如何更新 Kubernetes 部署的参数

run*_*run 2 docker kubernetes

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

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

ill*_*nan 5

您可以kubectl patch按照@mr.franco 的回答使用。我使用这个补丁argskubernetes-dashboard,而无需修改其官方安装清单部署。

这是一个完整的示例,说明如何args在现有部署上替换(在 JSON 补丁方面)容器:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.1/aio/deploy/recommended.yaml
Run Code Online (Sandbox Code Playgroud)
kubectl get deployment kubernetes-dashboard --namespace kubernetes-dashboard -o=json | jq '.spec.template.spec.containers[0].args'
Run Code Online (Sandbox Code Playgroud)
[
  "--auto-generate-certificates",
  "--namespace=kubernetes-dashboard"
]
Run Code Online (Sandbox Code Playgroud)
[
  "--auto-generate-certificates",
  "--namespace=kubernetes-dashboard"
]
Run Code Online (Sandbox Code Playgroud)
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"
]}]'
Run Code Online (Sandbox Code Playgroud)
[
  "--auto-generate-certificates",
  "--enable-insecure-login",
  "--enable-skip-login",
  "--namespace=kubernetes-dashboard"
]
Run Code Online (Sandbox Code Playgroud)


ffl*_*ing 2

您可以简单地执行kubectl edit deployment/<deployment-name>请参阅文档),修改args容器规范的字段,然后从$EDITOR.

这将“就地”更新部署规范,并使用新参数删除并重新启动 pod。从本质上讲,这与删除并重新启动 Pod 没有什么不同。