我可以在Kubernetes中创建一个带卷的PostgresSQL部署,没有任何问题。我的问题是如何创建数据库表。我可以很容易地在pod中执行并创建表,但我希望它是自动创建的。我不想建立在码头形象作为一个想要一个通用的形象。我已经考虑了一些选项,如Kubernetes批处理作业只运行一次,但不确定最好的方法是什么?谢谢。
myzjeezk1#
这可能会有帮助(这里我添加了configmap、持久卷、持久卷声明和Postgres部署yaml。这个yaml将在Postgres容器内的Postgres数据库中自动创建一个名为users的表。谢谢
users
apiVersion: v1 kind: ConfigMap metadata: name: postgres-config labels: app: postgres data: Postgres_DB: postgresdb --- apiVersion: v1 kind: Secret metadata: name: postgres-secret data: Postgres_User: postgresadmin Postgres_Password: admin123 --- kind: PersistentVolume apiVersion: v1 metadata: name: postgres-pv-volume labels: type: local app: postgres spec: storageClassName: manual capacity: storage: 5Gi accessModes: - ReadWriteMany hostPath: path: "/mnt/data" --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: postgres-pv-claim labels: app: postgres spec: storageClassName: manual accessModes: - ReadWriteMany resources: requests: storage: 5Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: postgres spec: replicas: 1 selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: containers: - name: postgres-container image: postgres:latest imagePullPolicy: "IfNotPresent" lifecycle: postStart: exec: command: ["/bin/sh","-c","sleep 20 && PGPASSWORD=$POSTGRES_PASSWORD psql -w -d $POSTGRES_DB -U $POSTGRES_USER -c 'CREATE TABLE IF NOT EXISTS users (userid SERIAL PRIMARY KEY,username TEXT,password TEXT,token TEXT,type TEXT);'"] ports: - containerPort: 5432 env: - name: POSTGRES_DB valueFrom: configMapKeyRef: name: postgres-config key: Postgres_DB - name: POSTGRES_USER valueFrom: secretKeyRef: name: postgres-secret key: Postgres_User - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: postgres-secret key: Postgres_Password volumeMounts: - mountPath: /var/lib/postgresql/data name: postgredb volumes: - name: postgredb persistentVolumeClaim: claimName: postgres-pv-claim
如果您认为这有帮助,请将其标记为答案。
txu3uszq2#
您有多种方式:postgresql docker image的正式状态("初始化脚本“部分):如果要在从该映像派生的映像中执行其他初始化,请在/docker-entrypoint-initdb.d下添加一个或多个 .sql、.sql.gz或 *.sh脚本这些脚本仅在创建数据库时运行。例如,如果您启动/重新启动数据卷包含现有数据库的Pod,则这些脚本将不会启动。使用kubernetes,您可以提供包含所需文件的configmap(如果文件大小小于1 Mb)或包含初始化文件的卷。另一个选择是应用程序本身,例如你可以使用嵌入在应用程序中的flywayDB或liquibase(springboot可以透明地执行)。
2条答案
按热度按时间myzjeezk1#
这可能会有帮助(这里我添加了configmap、持久卷、持久卷声明和Postgres部署yaml。这个yaml将在Postgres容器内的Postgres数据库中自动创建一个名为
users
的表。谢谢如果您认为这有帮助,请将其标记为答案。
txu3uszq2#
您有多种方式:
postgresql docker image的正式状态("初始化脚本“部分):
如果要在从该映像派生的映像中执行其他初始化,请在/docker-entrypoint-initdb.d下添加一个或多个 .sql、.sql.gz或 *.sh脚本
这些脚本仅在创建数据库时运行。例如,如果您启动/重新启动数据卷包含现有数据库的Pod,则这些脚本将不会启动。
使用kubernetes,您可以提供包含所需文件的configmap(如果文件大小小于1 Mb)或包含初始化文件的卷。
另一个选择是应用程序本身,例如你可以使用嵌入在应用程序中的flywayDB或liquibase(springboot可以透明地执行)。