运行 shell 脚本来初始化 kubernetes 中的 pod(初始化我的数据库集群)

Sha*_*uan 5 kubernetes

我需要能够运行 shell 脚本(我的脚本用于初始化我的数据库集群)来初始化 Kubernetes 中的 pod,

我不想在 dockerfile 中创建脚本,因为我直接从网络获取图像,所以我不想碰它。

所以我想知道是否有办法将我的脚本放入我的其中一卷中,以便我可以像这样执行它:

spec:
  containers:
  - name: command-demo-container
    image: debian
    command: ["./init.sh"]
  restartPolicy: OnFailure
Run Code Online (Sandbox Code Playgroud)

Sha*_*uan 1

我最终决定采用使用我们想要运行的脚本创建配置文件的方法,然后从卷内部调用此 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)