我需要能够运行 shell 脚本(我的脚本用于初始化我的数据库集群)来初始化 Kubernetes 中的 pod,
我不想在 dockerfile 中创建脚本,因为我直接从网络获取图像,所以我不想碰它。
所以我想知道是否有办法将我的脚本放入我的其中一卷中,以便我可以像这样执行它:
spec:
containers:
- name: command-demo-container
image: debian
command: ["./init.sh"]
restartPolicy: OnFailure
Run Code Online (Sandbox Code Playgroud)
我最终决定采用使用我们想要运行的脚本创建配置文件的方法,然后从卷内部调用此 configMap。
这是一个简短的解释:
在我的 pod.yaml 文件中,有一个名为“/pgconf”的VolumeMount 目录,docker 映像在该目录中读取您放置在那里的任何 SQL 脚本,并在 pod 启动时运行它。在Volumes中,我将放置 configMap 名称 (postgres-init-script-configmap),它是 configmap.yaml 文件中定义的配置的名称。
不需要使用 kubernetes 创建 configMap,只要将 configMap 文件放在与 pod.yaml 相同的目录中,pod 就会从 configMap 文件中获取配置。
我的 POD yaml 文件:
apiVersion: v1
kind: Pod
metadata:
name: "{{.Values.container.name.primary}}"
labels:
name: "{{.Values.container.name.primary}}"
spec:
securityContext:
fsGroup: 26
restartPolicy: {{default "Always" .Values.restartPolicy}}
containers:
- name: {{.Values.container.name.primary}}
image: "{{.Values.image.repository}}/{{.Values.image.container}}:{{.Values.image.tag}}"
ports:
- containerPort: {{.Values.container.port}}
env:
- name: PGHOST
value: /tmp
- name: PG_PRIMARY_USER
value: primaryuser
- name: PG_MODE
value: primary
resources:
requests:
cpu: {{ .Values.resources.cpu }}
memory: {{ .Values.resources.memory }}
volumeMounts:
- mountPath: /pgconf
name: init-script
readOnly: true
volumes:
- name: init-script
configMap:
name: postgres-init-script-configmap
Run Code Online (Sandbox Code Playgroud)
我的 configmap.yaml (其中包含将初始化数据库的 SQL 脚本):
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-init-script-configmap
data:
setup.sql: |-
CREATE USER david WITH PASSWORD 'david';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11465 次 |
| 最近记录: |