如何在 kubernetes 上部署具有新架构的 postgres?

Sid*_*ath 0 postgresql kubernetes

我已使用此链接在 Kubernetes 上部署 Postgres。

下面是配置图:

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
  labels:
    app: postgres
data:
  POSTGRES_DB: postgresdb
  POSTGRES_USER: postgresadmin
  POSTGRES_PASSWORD: admin123
Run Code Online (Sandbox Code Playgroud)

和部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:10.4
          imagePullPolicy: "IfNotPresent"
          ports:
            - containerPort: 5432
          envFrom:
            - configMapRef:
                name: postgres-config
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgredb
      volumes:
        - name: postgredb
          persistentVolumeClaim:
            claimName: postgres-pv-claim
Run Code Online (Sandbox Code Playgroud)

我希望 configmap 或部署 yaml 中的简单配置将有助于在 postgres 数据库上创建新模式。

har*_*riK 5

您可以使用 Kubernetes postStart 生命周期挂钩在给定的 Postgres DB 上创建架构。只需使用生命周期块更新您的部署文件即可。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: postgres
  name: postgres
spec:
  containers:
  - image: postgres:10.4
    name: postgres
    resources: {}
    lifecycle:
      postStart:
        exec:
          command: ["/bin/bash","-c","sleep 20 && PGPASSWORD=$POSTGRES_PASSWORD psql $POSTGRES_DB -U $POSTGRES_USER -c \'CREATE SCHEMA IF NOT EXISTS key;\'"]
    envFrom:
    - configMapRef:
        name: postgres-config
    volumeMounts:
    - mountPath: /var/lib/postgresql/data
      name: data
  dnsPolicy: ClusterFirst
  restartPolicy: Never
  volumes:
  - name: data
    emptyDir: {}
status: {}
Run Code Online (Sandbox Code Playgroud)