我有一个Pod或Job yaml规范文件(我可以对其进行编辑),我想从本地计算机上启动它(例如,使用kubectl create -f my_spec.yaml
)
规范声明了卷安装。该卷中会有一个文件,我想用作环境变量的值。
我要使卷文件的内容最终出现在环境变量中(而我不必通过某种方式将文件“下载”到本地计算机并插入到规范中来跳过循环)。
P.S。如果您可以控制command
中的container
,显然该怎么做。但是在启动任意图像的情况下,我无法控制command
属性,因为我不知道。
apiVersion: batch/v1
kind: Job
metadata:
generateName: puzzle
spec:
template:
spec:
containers:
- name: main
image: arbitrary-image
env:
- name: my_var
valueFrom: <Contents of /mnt/my_var_value.txt>
volumeMounts:
- name: my-vol
path: /mnt
volumes:
- name: my-vol
persistentVolumeClaim:
claimName: my-pvc
答案 0 :(得分:1)
您可以使用kubectl无限循环创建部署,该循环将不断轮询卷并从中更新configmap。之后,您可以将创建的configmap挂载到pod中。这有点hacky,但是可以正常工作并自动更新您的configmap。唯一的要求是PV必须为ReadWriteMany或ReadOnlyMany(但在这种情况下,您可以以只读模式将其安装到所有Pod)。
apiVersion: v1
kind: ServiceAccount
metadata:
name: cm-creator
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: cm-creator
rules:
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["create", "update", "get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: cm-creator
namespace: default
subjects:
- kind: User
name: system:serviceaccount:default:cm-creator
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: cm-creator
apiGroup: rbac.authorization.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: cm-creator
namespace: default
labels:
app: cm-creator
spec:
replicas: 1
serviceAccountName: cm-creator
selector:
matchLabels:
app: cm-creator
template:
metadata:
labels:
app: cm-creator
spec:
containers:
- name: cm-creator
image: bitnami/kubectl
command:
- /bin/bash
- -c
args:
- while true;
kubectl create cm myconfig --from-file=my_var=/mnt/my_var_value.txt --dry-run -o yaml | kubectl apply -f-;
sleep 60;
done
volumeMounts:
- name: my-vol
path: /mnt
readOnly: true
volumes:
- name: my-vol
persistentVolumeClaim:
claimName: my-pvc