Kubernetes - Postgres -创建表格

uqjltbpv  于 2023-02-03  发布在  Kubernetes
关注(0)|答案(2)|浏览(114)

我可以在Kubernetes中创建一个带卷的PostgresSQL部署,没有任何问题。我的问题是如何创建数据库表。
我可以很容易地在pod中执行并创建表,但我希望它是自动创建的。
我不想建立在码头形象作为一个想要一个通用的形象。
我已经考虑了一些选项,如Kubernetes批处理作业只运行一次,但不确定最好的方法是什么?
谢谢。

myzjeezk

myzjeezk1#

这可能会有帮助(这里我添加了configmap、持久卷、持久卷声明和Postgres部署yaml。这个yaml将在Postgres容器内的Postgres数据库中自动创建一个名为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

如果您认为这有帮助,请将其标记为答案。

txu3uszq

txu3uszq2#

您有多种方式:
postgresql docker image的正式状态("初始化脚本“部分):
如果要在从该映像派生的映像中执行其他初始化,请在/docker-entrypoint-initdb.d下添加一个或多个 .sql、.sql.gz或 *.sh脚本
这些脚本仅在创建数据库时运行。例如,如果您启动/重新启动数据卷包含现有数据库的Pod,则这些脚本将不会启动。
使用kubernetes,您可以提供包含所需文件的configmap(如果文件大小小于1 Mb)或包含初始化文件的卷。
另一个选择是应用程序本身,例如你可以使用嵌入在应用程序中的flywayDBliquibase(springboot可以透明地执行)。

相关问题