背景:
对于已经发布的服务。如何做到在线更新呢?
总结有这么几种办法:
kubectl annotate, kubectl edit, kubectl replace, kubectl scale, 和 kubectl apply。
本文介绍 kubectl patch的办法
比如创建一个如下的pod
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: patch-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: patch-demo-ctr
image: nginx
tolerations:
- effect: NoSchedule
key: dedicated
value: test-team
之后我们要修改镜像内容 ,使用patch怎么办呢?
1.先创建一个patch-file-containers.yaml
spec:
template:
spec:
containers:
- name: patch-demo-ctr-2
image: redis
2.之后命令行更新pod配置
kubectl patch deployment patch-demo --patch “$(cat patch-file-containers.yaml)”
很多k8s管理平台的 在线修改yaml 其实使用的是 kubectl patch 增量修改pod配置