==使用策略合并 patch 更新 Deployment ==
apiVersion: apps/v1
kind: Deployment
metadata:
name: mygin-v1
labels:
app: mygin
spec:
replicas: 3
selector:
matchLabels:
app: mygin
template:
metadata:
labels:
app: mygin
spec:
containers:
- name: mygin
image: logs:ginv01
resources:
requests:
memory: 256Mi
ports:
- containerPort: 80
# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
mygin-v1 3/3 3 3 5s
打一个补丁
- patch 中的列表与现有列表合并。当你在列表中使用策略性合并 patch 时,并不总是这样。 在某些情况下,列表是替换的,而不是合并的。
添加一个策略
tee patch-file.yaml <<-'EOF'
spec:
template:
spec:
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 10
- key: "node.kubernetes.io/not-ready"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 10
EOF
对 Deployment 执行 patch 操作
# kubectl patch deployment mygin-v1 --patch-file patch-file.yaml
# kubectl get deploy mygin-v1 -o yaml
resources:
requests:
memory: 256Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
tolerations: <<<<<<<--------添加的内容
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 10
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 10
再打一个POD的反亲和性补丁
tee podAnt.yaml <<-'EOF'
spec:
template:
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution: # 硬策略
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- mygin
topologyKey: kubernetes.io/hostname
EOF
kubectl patch deployment mygin-v1 --patch-file podAnt.yaml
#由于节点少需要scale一下
kubectl scale deployment mygin-v1 --replicas=2
kubectl get deployment mygin-v1 -o yaml