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

6

我有一个运行在Kubernetes集群中的Postgres DB容器。我需要编写一个Kubernetes job以连接到该Postgres DB容器并运行SQL文件中的脚本。我需要了解以下两个事项:

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

以下是我的Kubernetes job样例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个回答

7

您需要将SQL文件作为配置映射的卷载入,并使用psql命令行执行来自已载入文件的指令。

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

psql -a -f sqlCommand.sql

需要使用你打算挂载的文件创建configmap,更多信息在此处

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

那么您需要在作业的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: [ "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

为什么环境变量的名称不是PGHOSTPGDATABASE - Bill

0

首先,您应该为其创建一个Docker文件,然后执行它并将相同的工作Docker镜像映射到Kubernetes作业YAML文件中。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接