如何在kubernetes部署清单中为不同的平台架构分配不同的节点和映像



我有一个使用节点亲和性的工作集群,它可以根据kubernetes架构标签将pod分配给节点。我有一个树莓派ARM64和linux AMD64的混合集群。我不知道如何将副本集分布在两个不同的容器规格上,每个容器规格都包含亲和标签和图像标签。

下面是树莓皮的工作清单,但我想在同一清单中添加更多amd64的规范,但使用不同的图像标签,并基于amd64标签

apiVersion: v1
kind: Service
metadata:
name: flaskapp-service
spec:
selector:
app: flaskapp
ports:
- protocol: "TCP"
port: 8080
targetPort: 5000
type: LoadBalancer

apiVersion: apps/v1
kind: Deployment
metadata:
name: flaskapp
spec:
replicas: 2
selector:
matchLabels:
app: flaskapp
template:
metadata:
labels:
app: flaskapp
spec:
containers:
- image: xxxxxxxx/flaskapp:**arm64**
imagePullPolicy: IfNotPresent
name: flaskapp
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64

您不能在同一部署中执行此操作。为每种体系结构创建一个部署,并为每个体系结构创建正确的映像和关联规则。

对于服务方面,您可以只拥有一个。要做到这一点,请确保为每个体系结构的pod添加一些不同的标签,并从服务定义中省略它们。

例如:

apiVersion: v1
kind: Service
metadata:
name: flaskapp-service
spec:
selector:
app: flaskapp
ports:
- protocol: "TCP"
port: 8080
targetPort: 5000
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: flaskapp-arm
spec:
replicas: 2
selector:
matchLabels:
app: flaskapp
arch: arm
template:
metadata:
labels:
app: flaskapp
arch: arm
spec:
containers:
- image: xxxxxxxx/flaskapp:**arm64**
imagePullPolicy: IfNotPresent
name: flaskapp
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: flaskapp-amd
spec:
replicas: 2
selector:
matchLabels:
app: flaskapp
arch: amd
template:
metadata:
labels:
app: flaskapp
arch: amd
spec:
containers:
- image: xxxxxxxx/flaskapp:**amd**
imagePullPolicy: IfNotPresent
name: flaskapp
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- amd

最新更新