如何更新Kubernetes部署的args

时间:2018-04-16 14:48:15

标签: docker kubernetes

我有一个在Kubernetes中运行的部署,并希望更新" args"在应用更新之前,它会在重新启动时使用与初始启动时不同的入口点arg,其中还包括一些数据引导。

我知道您可以运行kubectl set image来更新部署或复制集正在运行的映像,但是如何在不删除和重新创建资源的情况下更新args?

3 个答案:

答案 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答案。