通过 kubernetes 作业创建或更新现有的 postgres 数据库容器
Create or update existing postgres db container through kubernetes job
我有一个 Postgres DB 容器,它 运行 在 Kubernetes 集群中。我需要编写一个 Kubernetes 作业来连接到 Postgres DB 容器和 运行 来自 SQL 文件的脚本。这里我需要明白两件事
- 命令 运行 SQL 脚本
- 如何在 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,您可以在其中放置要执行的脚本
我有一个 Postgres DB 容器,它 运行 在 Kubernetes 集群中。我需要编写一个 Kubernetes 作业来连接到 Postgres DB 容器和 运行 来自 SQL 文件的脚本。这里我需要明白两件事
- 命令 运行 SQL 脚本
- 如何在 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,您可以在其中放置要执行的脚本