如何一次编辑所有kubernetes的deployment
How to edit all the deployment of kubernetes at a time
我们有数百个部署,在配置中,我们将大多数部署的 imagePullPolicy 设置为“ifnotpresent”,少数设置为“always”,现在我想修改所有具有 的部署ifnotpresent 到 always.
我们怎样才能一下子做到这一点?
例如:
kubectl get deployment -n test -o json | jq ‘.spec.template.spec.contianer[0].imagePullPolicy=“ifnotpresent”| kubectl -n test replace -f -
以上命令有助于为一个特定的部署重置它。
Kubernetes 本身不提供批量更新功能。为此,您必须使用其他 CLI 工具。也就是说,要修改现有资源,您还可以使用 kubectl patch
函数。
下面的脚本并不漂亮,但会更新命名空间中的所有部署。
kubectl get deployments -o name | sed -e 's/.*\///g' | xargs -I {} kubectl patch deployment {} --type=json -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/imagePullPolicy", "value": "Always"}]'
注意:我使用 sed
从名称中删除资源类型,因为 kubectl 无法识别对 deployment.extensions
(可能还有其他)类型的资源执行的操作。
我们有数百个部署,在配置中,我们将大多数部署的 imagePullPolicy 设置为“ifnotpresent”,少数设置为“always”,现在我想修改所有具有 的部署ifnotpresent 到 always.
我们怎样才能一下子做到这一点?
例如:
kubectl get deployment -n test -o json | jq ‘.spec.template.spec.contianer[0].imagePullPolicy=“ifnotpresent”| kubectl -n test replace -f -
以上命令有助于为一个特定的部署重置它。
Kubernetes 本身不提供批量更新功能。为此,您必须使用其他 CLI 工具。也就是说,要修改现有资源,您还可以使用 kubectl patch
函数。
下面的脚本并不漂亮,但会更新命名空间中的所有部署。
kubectl get deployments -o name | sed -e 's/.*\///g' | xargs -I {} kubectl patch deployment {} --type=json -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/imagePullPolicy", "value": "Always"}]'
注意:我使用 sed
从名称中删除资源类型,因为 kubectl 无法识别对 deployment.extensions
(可能还有其他)类型的资源执行的操作。