kubectl patch


copy from:使用 kubectl patch 更新 API 對象

1、使用策略性合並補丁更新一個 Deployment

    通過補丁,您可以避免定義整個對象,只需要定義您希望更改的部分。
    通過策略性合並補丁,您只需要定義新增的元素就可以更新一個列表。
列表中已有的元素仍然保留,新增的元素和已有的元素會被合並。上述例子
中,最終結果的 containers 列表中既有原先的 nginx 容器,也有新增的 redis 容器。
第一步: 創建一個deployment
# cat deployment-patch-demo.yaml

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

$ kubectl create -f ./deployment-patch-demo.yaml
第二步: patch 更新 api 對象
# cat patch-file.yaml

spec:
  template:
    spec:
      containers:
      - name: patch-demo-ctr-2
        image: redis

$ kubectl patch deployment patch-demo --patch "$(cat patch-file.yaml)"
第三步: 查看更新結果
kubectl get deployment patch-demo --output yaml # deployment中的POD中會有兩個容器 

2、使用一個 JSON 合並補丁更新一個 Deployment

第一步: 創建一個deployment (同上)
第二步: patch 更新api對象
cat patch-file-2.yaml

spec:
  template:
    spec:
      containers:
      - name: patch-demo-ctr-3
        image: gcr.io/google-samples/node-hello:1.0

$ kubectl patch deployment patch-demo --type merge --patch "$(cat patch-file-2.yaml)"
第三步: 查看更新結果
kubectl get deployment patch-demo --output yaml # deployment中的POD中只有一個容器,原容器被替換 

3、其他

# 等價命令 kubectl patch deployment patch-demo --patch "$(cat patch-file.yaml)" kubectl patch deployment patch-demo --patch $'spec:\n template:\n spec:\n containers:\n - name: patch-demo-ctr-2\n image: redis' kubectl patch deployment patch-demo --patch "$(cat patch-file.json)"
kubectl patch deployment patch-demo --patch '{"spec": {"template": {"spec": {"containers": [{"name": "patch-demo-ctr-2","image": "redis"}]}}}}'
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM