Kubernetes-封装DB的Pod崩溃

Ćep*_*epa 1 google-cloud-platform kubernetes google-kubernetes-engine

尝试将Django应用程序部署到Kubernetes集群时遇到问题。更具体地说,当我尝试部署PostgreSQL时。

这是我的.YML部署文件的样子:

apiVersion: v1
kind: Service
metadata:
  name: postgres-service
spec:
  selector:
    app: postgres-container
    tier: backend
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432
  type: ClusterIP
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-pv
  labels:
      type: local
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 2Gi
  hostPath:
    path: /tmp/data/persistent-volume-1 #U okviru cvora n
  persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pv-claim
  labels:
    type: local
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres-container
      tier: backend
  template:
    metadata:
      labels:
        app: postgres-container
        tier: backend
    spec:
      containers:
        - name: postgres-container
          image: postgres:9.6.6
          env:
            - name: POSTGRES_USER
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: user

            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: password

            - name: POSTGRES_DB
              value: agent_technologies_db
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: postgres-volume-mount
              mountPath: /var/lib/postgresql/data/db-files

      volumes:
        - name: postgres-volume-mount
          persistentVolumeClaim:
            claimName: postgres-pv-claim
        - name: postgres-credentials
          secret:
            secretName: postgres-credentials
Run Code Online (Sandbox Code Playgroud)

这是我运行kubectl get pods命令时得到的:

NAME                                             READY     STATUS             RESTARTS   AGE
agent-technologies-deployment-7c7c6676ff-8p49r   1/1       Running            0          2m
agent-technologies-deployment-7c7c6676ff-dht5h   1/1       Running            0          2m
agent-technologies-deployment-7c7c6676ff-gn8lp   1/1       Running            0          2m
agent-technologies-deployment-7c7c6676ff-n9qql   1/1       Running            0          2m
postgres-8676b745bf-8f7jv                        0/1       CrashLoopBackOff   4          3m
Run Code Online (Sandbox Code Playgroud)

这是当我尝试使用来检查PostgreSQL部署的过程时得到的结果kubectl logs $pod_name

initdb: directory "/var/lib/postgresql/data" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/var/lib/postgresql/data" or run initdb
with an argument other than "/var/lib/postgresql/data".
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.
Run Code Online (Sandbox Code Playgroud)

注意:我正在使用Google Cloud作为提供商。

sur*_*ren 6

您无法在中拥有数据库/var/lib/postgres/data/whatever

更改该路径,/var/lib/postgres/whatever它将起作用。

17.2.1。辅助文件系统的使用

除了计算机的“根”卷以外,许多安装都在文件系统(卷)上创建数据库集群。如果选择执行此操作,建议不要尝试使用辅助卷的最顶层目录(装入点)作为数据目录。最佳实践是在PostgreSQL用户拥有的安装点目录中创建一个目录,然后在其中创建数据目录。这样可以避免权限问题,尤其是对于诸如pg_upgrade之类的操作,还可以确保在辅助卷脱机时清除失败。

而且,顺便说一句,我必须创建一个秘密,因为它不在帖子中:

apiVersion: v1
kind: Secret
metadata:
  name: postgres-credentials
type: Opaque
data:
  user: cG9zdGdyZXM=            #postgres
  password: cGFzc3dvcmQ=        #password
Run Code Online (Sandbox Code Playgroud)

请注意,用户名必须为“ postgres”。我不知道你是否在报道...