我正在尝试更新一个掌机部署的部署,以便它使用作为k8s秘密资源存储的秘密。这个必须设置为我的pod中的STORAGE_PASSWORD环境变量。
在我的例子中,秘密在secrets/redis中,数据项是redis-password:
$ kubectl get secret/redis - yamlapiVersion: v1数据:redis-password: XXXXXXXXXXXXXXXX =:秘密元数据:名称:复述,类型:不透明
我试过了:
$ kubectl set env——from secret/redis deployment/gateway——keys=redis-password警告:密钥REDIS_PASSWORD已传输到REDIS_PASSWORD部署。apps/gateway env updated
当我查看更新的部署清单时,我看到该变量已被添加,但(如建议)该变量已设置为REDIS_PASSWORD:
- name: REDIS_PASSWORDvalueFrom:secretKeyRef:关键:redis-passwordname: redis
我也尝试过kubectl patch
与replace
操作,但我不能得到语法正确的有秘密插入。
如何修改环境变量名称为STORAGE_PASSWORD?
给出如下的部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: example
spec:
replicas: 1
template:
spec:
containers:
- image: alpinelinux/darkhttpd
name: darkhttpd
args:
- --port
- "9991"
ports:
- name: http
protocol: TCP
containerPort: 9991
env:
- name: EXAMPLE_VAR
value: example value
在secret中进行补丁的语法如下:
kubectl patch deploy/example --patch='
{
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "darkhttpd",
"env": [
{
"name": "STORAGE_PASSWORD",
"valueFrom": {
"secretKeyRef": {
"name": "redis",
"key": "redis-password"
}
}
}
]
}
]
}
}
}
}
'
或者使用JSONPatch样式的补丁:
kubectl patch --type json deploy/example --patch='
[
{
"op": "add",
"path": "/spec/template/spec/containers/0/env/-",
"value": {
"name": "STORAGE_PASSWORD",
"valueFrom": {
"secretKeyRef": {
"name": "redis",
"key": "redis-password"
}
}
}
}
]
'
这两个都不是特别漂亮,因为你是在现有的复杂嵌套结构上添加一个复杂的嵌套结构。
您也可以使用kubectl edit
:
kubectl edit deployment gateway
然后编辑yaml文件
# - name: REDIS_PASSWORD
- name: STORAGE_PASSWORD
valueFrom:
secretKeyRef:
key: redis-password
name: redis
供参考:https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/kubectl-edit