Json 如何使用kubectl修补部署中的容器环境变量?
当我想提取某些容器环境变量的当前值时,我可以使用jsonpath,语法如下:Json 如何使用kubectl修补部署中的容器环境变量?,json,kubernetes,kubectl,jsonpath,Json,Kubernetes,Kubectl,Jsonpath,当我想提取某些容器环境变量的当前值时,我可以使用jsonpath,语法如下: kubectl get pods -l component='somelabel' -n somenamespace -o \ jsonpath='{.items[*].spec.containers[*].env[?(@.name=="SOME_ENV_VARIABLE")].value}') kubectl -n kube-system patch svc kubernetes-dashboard --type=
kubectl get pods -l component='somelabel' -n somenamespace -o \
jsonpath='{.items[*].spec.containers[*].env[?(@.name=="SOME_ENV_VARIABLE")].value}')
kubectl -n kube-system patch svc kubernetes-dashboard --type='json' -p="[{'op': 'replace', 'path': '/spec/ports/0/nodePort', 'value': $PORT}]"
这将返回名为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 get pods -l component='somelabel' -n somenamespace -o \
jsonpath='{.items[*].spec.containers[*].env[?(@.name=="SOME_ENV_VARIABLE")].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'
来修补变量呢?我应该使用哪种语法?而不是命令,您可以使用来更新k8s部署的环境变量
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
希望这有帮助。
- op:替换
路径:/spec/template/spec/containers/0/env/0/name
值:您的变量名
- op:替换
路径:/spec/template/spec/containers/0/env/0/value
值:您的变量值
这非常有用,tnx!