我有一个在Kubernetes集群中运行的Postgres DB容器。我需要编写一个Kubernetes作业以连接到Postgres DB容器并从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
答案 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,您可以在其中放置要执行的脚本