通过 kubernetes 作业创建或更新现有的 postgres 数据库容器

Create or update existing postgres db container through kubernetes job

我有一个 Postgres DB 容器,它 运行 在 Kubernetes 集群中。我需要编写一个 Kubernetes 作业来连接到 Postgres DB 容器和 运行 来自 SQL 文件的脚本。这里我需要明白两件事

  1. 命令 运行 SQL 脚本
  2. 如何在 Job.yaml 文件中加载 SQL 文件

这是我的 Kubernetes 作业示例 yaml 文件

apiVersion: batch/v1
kind: Job
metadata:
  name: init-db
spec:
  template:
    metadata:
      name:  init-db
      labels:
        app: init-postgresdb
    spec:
      containers:
      - image: "docker.io/bitnami/postgresql:11.5.0-debian-9-r60"
        name: init-db
        command:
        - psql -U postgres 
        env:
          - name: DB_HOST
            value: "knotted-iguana-postgresql"
          - name: DB_DATABASE
            value: "postgres"
      restartPolicy: OnFailure  

您必须将 SQL 文件挂载为配置映射中的卷,并使用 psql cli 执行挂载文件中的命令。

要从文件执行命令,您可以通过以下方式更改 yaml 上的命令参数:

psql -a -f sqlCommand.sql

需要使用您假装挂载的文件创建配置映射更多信息here

kubectl create configmap sqlCommands.sql --from-file=sqlCommands.sql

然后你必须在你的作业yaml中添加configmap和mount语句并修改命令以使用挂载的文件。

apiVersion: batch/v1
kind: Job
metadata:
  name: init-db
spec:
  template:
    metadata:
      name:  init-db
      labels:
        app: init-postgresdb
    spec:
      containers:
      - image: "docker.io/bitnami/postgresql:11.5.0-debian-9-r60"
        name: init-db
        command: [ "bin/sh", "-c", "psql -a -f /sqlCommand.sql" ]
        volumeMounts:
        - name: sqlCommand
          mountPath: /sqlCommand.sql
        env:
          - name: DB_HOST
            value: "knotted-iguana-postgresql"
          - name: DB_DATABASE
            value: "postgres"
      volumes:
        - name: sqlCommand
          configMap:
          # Provide the name of the ConfigMap containing the files you want
          # to add to the container
          name: sqlCommand.sql
      restartPolicy: OnFailure

您应该首先为相同的文件创建一个 docker 文件,执行它并将相同的工作 docker 图像映射到 kubernetes 作业 yaml 文件。

您可以在 docker 文件中添加一个 entrypoint.sh,您可以在其中放置要执行的脚本