【go云原生】Kubernetes Pod调度
最近更新:2025-01-07
|
字数总计:2.4k
|
阅读估时:9分钟
|
阅读量:次
- Kubernetes Pod调度
- 污点与容忍度调度
- 节点选择器调度
- 亲和性与反亲和性调度
- 节点亲和性(pod和node)
- pod亲和性和反亲和性(pod与pod)
Kubernetes Pod调度
污点与容忍度调度
1 2 3 4 5 6 7 8 9 10 11 12 13
| git clone http://gitlab.0voice.com/golangvip/mock-app.git
kubectl create configmap mock-app-conf --from-file config.yaml=config.yaml
kubectl create secret tls mock-app-crt --cert cert/tls.crt --key cert/tls.key
kubectl create secret docker-registry 161dockerauth --docker-server 192.168.239.161:5000 --docker-username lin --docker-password 123456
kubectl apply -f Deployment.yaml kubectl apply -f Service.yaml
kubectl describe node worker1 kubectl describe node master
|
节点选择器调度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| vim Deployment.yaml > spec: > template: > spec: > nodeName: master1 kubectl apply -f Deployment.yaml kubectl get pod -o wide
kubectl label nodes worker1 disktype=ssd kubectl label nodes worker2 disktype=machinery vim Deployment.yaml > spec: > template: > spec: > nodeSelector: > disktype: ssd kubectl apply -f Deployment.yaml kubectl get pod -o wide
|
亲和性与反亲和性调度
节点亲和性(pod和node)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| apiVersion: v1 kind: Pod metadata: name: with-node-affinity spec: affinity: nodeAffinity: requiredDuringSchedulinggnoredDuringExecution: nodeselectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - antarctica-eastl - antarctica-westl preferredDuringSchedulinggnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: another-node-label-key operator: In values: - another-node-label-value matchFields: - key: metadata.name operator: In values: - worker2 containers: - name: with-node-affinity image: registry.k8s.io/pause: 2.0
|
- operator
- In:标签值存在于提供的字符串集中
- Notln:标签值不包含在提供的字符串集中
- Exists:对象上存在具有此键的标签
- DoesNotExist:对象上不存在具有此键的标签
- Gt:提供的值将被解析为整数,并且该整数小于通过解析此选择算符命名的标签的值所得到的整数
- Lt:提供的值将被解析为整数,并且该整数大于通过解析此选择算符命名的标签的值所得到的整数
- Gt和Lt操作符不能与非整数值一起使用。如果给定的值未解析为整数,则该Pod将无法被调度
- Gt和Lt不适用于podAffinity,只能与nodeAffinity一起使用
pod亲和性和反亲和性(pod与pod)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| apiVersion: v1 kind: Pod metadata: name: with-pod-affinity spec: affinity: podAffinity: requiredDuringSchedulinggnoredDuringExecution: - labelselector: matchExpressions: - key: security operator: In values: - S1 topologykey: topology.kubernetes.io/zone podAntiAffinity: preferredDuringSchedulinggnoredDuringExecution: - weight: 100 podAffinityTerm: labelselector: matchExpressions: - key: security operator: In values: - S2 topologykey: topology.kubernetes.io/zone containers: - name:with-pod-affinity image: registry.k8s.io/pause: 2.0
|
- 亲和性规则规定,只有节点属于特定的区域且该区域中的其他Pod已打上security=S1标签时,调度器才可以将示例Pod调度到此节点上。例如,如果我们有一个具有指定区域(称之为“ZoneV)的集群,此区域由带有topology.kubernetes.io/zone=V标签的节点组成,那么只要Zonev内已经至少有一个Pod打了security=S1标签,调度器就可以将此Pod调度到ZoneV内的任何节点。相反,如果ZoneV中没有带有security=S1标签的Pod,则调度器不会将示例Pod调度给该区域中的任何节点
- 反亲和性规则规定,如果节点属于特定的区域且该区域中的其他Pod已打上security=S2标签则调度器应尝试避免将Pod调度到此节点上。例如,如果我们有一个具有指定区域(我们称之为ZoneR)的集群,此区域由带有topology.kubernetes.io/zone=R标签的节点组成,只要ZoneR内已经至少有一个Pod打了security=S2标签,调度器应避免将Pod分配给ZoneR内的任何节点。相反,如果ZoneR中没有带有security=S2标签的Pod,则反亲和性规则不会影响将Pod调度到Zone
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| kubectl label nodes worker1 region=A kubectl label nodes worker2 region=B
vim Deployment.yaml spec: replicas: 10 selector: matchLabels: app:mockapp template: metadata: Labels: app: mockapp spec: affinity: podAffinity: requiredDuringschedulingIgnoredDuringExecution: LabelSelector: matchLabels app: mockapp topologykey: region restartPolicy: Always imagePulisecrets: name: 16ldockerauth
kubectl apply -f Deployment.yaml
|
- 亲和性和反亲和性不要应用于大规模的集群,因为涉及到计算,可能会影响性能
2025-01-07
该篇文章被 Cleofwine
归为分类:
Go云原生