繁体   English   中英

如何使用 kubectl 在部署中修补容器环境变量?

[英]How to patch container env variable in deployment with kubectl?

当我想提取一些容器环境变量的当前值时,我可以使用 jsonpath 的语法如下:

kubectl get pods -l component='somelabel' -n somenamespace -o \
jsonpath='{.items[*].spec.containers[*].env[?(@.name=="SOME_ENV_VARIABLE")].value}')

这将返回名为SOME_ENV_VARIABLE的 env varialbe 的值。 json 中带有容器环境变量的 Pod 部分将如下所示:

            "spec": {
                "containers": [
                    {
                        "env": [
                            {
                                "name": "SOME_ENV_VARIABLE",
                                "value": "some_value"
                            },
                            {
                                "name": "ANOTHER_ENV_VARIABLE",
                                "value": "another_value"
                            }
                        ],

当我想在我的部署中修补一些值时,我使用的命令的语法如下:

kubectl -n kube-system patch svc kubernetes-dashboard --type='json' -p="[{'op': 'replace', 'path': '/spec/ports/0/nodePort', 'value': $PORT}]"

但是,如果我需要使用像env[?(@.name=="SOME_ENV_VARIABLE")]这样的表达式,如何使用'op': 'replace'修补变量? 我应该使用哪种语法?

您可以使用kubectl set env来更新 k8s 部署的环境变量,而不是kubectl patch命令。

envvalue=$(kubectl get pods -l component='somelabel' -n somenamespace -o jsonpath='{.items[*].spec.containers[*].env[?(@.name=="SOME_ENV_VARIABLE")].value}')
kubectl set env deployment/my-app-deploy op=$envvalue

希望这可以帮助。

他们中的大多数都没有提供正确的命令,只是使用简单=>

 kubectl set env deployment/deploy_name APP_VERSION=value -n namespace

  • 操作:替换路径:/spec/template/spec/containers/0/env/0/name 值:YOUR_VARIABLE_NAME
  • op:替换路径:/spec/template/spec/containers/0/env/0/value 值:YOUR_VARIABLE_VALUE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM