通过Kubernetes作业创建或更新现有的postgres db容器

时间:2019-10-18 10:57:10

标签: postgresql kubernetes kubernetes-jobs

我有一个在Kubernetes集群中运行的Postgres DB容器。我需要编写一个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  

2 个答案:

答案 0 :(得分:2)

您必须从configmap中将SQL文件作为卷挂载,并使用psql cli从已挂载的文件执行命令。

要从文件执行命令,您可以通过以下方法在Yaml上更改命令参数:

psql -a -f sqlCommand.sql

需要使用您假装的安装信息的文件来创建configmap 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

答案 1 :(得分:0)

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

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