我有一个在Kubernetes中运行的部署,并希望更新" args"在应用更新之前,它会在重新启动时使用与初始启动时不同的入口点arg,其中还包括一些数据引导。
我知道您可以运行kubectl set image
来更新部署或复制集正在运行的映像,但是如何在不删除和重新创建资源的情况下更新args?
答案 0 :(得分:2)
您可以按照@ mr.franco的答案中的说明使用kubectl patch
。我正在使用它修补args
部署中的kubernetes-dashboard
,而无需修改其正式安装清单。
这是一个完整示例,说明如何在现有Deployment上替换(根据JSON修补程序)容器args
:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.1/aio/deploy/recommended.yaml
kubectl get deployment kubernetes-dashboard --namespace kubernetes-dashboard -o=json | jq '.spec.template.spec.containers[0].args'
[
"--auto-generate-certificates",
"--namespace=kubernetes-dashboard"
]
kubectl patch deployment \
kubernetes-dashboard \
--namespace kubernetes-dashboard \
--type='json' \
-p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args", "value": [
"--auto-generate-certificates",
"--enable-insecure-login",
"--enable-skip-login",
"--namespace=kubernetes-dashboard"
]}]'
kubectl get deployment kubernetes-dashboard --namespace kubernetes-dashboard -o=json | jq '.spec.template.spec.containers[0].args'
[
"--auto-generate-certificates",
"--enable-insecure-login",
"--enable-skip-login",
"--namespace=kubernetes-dashboard"
]
答案 1 :(得分:0)
您可以简单地执行kubectl edit deployment/<deployment-name>
(see docs),修改容器规范的args
字段,然后从$EDITOR
保存+退出。
这将更新部署规范&#34;到位&#34;并使用新参数删除并重新启动pod。在引擎盖下,这与删除和重新启动pod没有什么不同。
答案 2 :(得分:0)
对于该用例,您可以使用kubectl patch
。
作为参考,您可以查看that答案。