zoukankan      html  css  js  c++  java
  • k8s 部署 postgresql 报错:initdb: error: directory "/var/lib/postgresql/data" exists but is not empty

    最近在 k8s 上部署 gitlab 时,底层存储使用的是 ceph,结果 postgresql 遇到以下报错:

    $ kubectl -n gitlab logs postgresql-76d969dd56-m79wm
    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.
    
    initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
    It contains a lost+found directory, perhaps due to it being a mount point.
    Using a mount point directly as the data directory is not recommended.
    Create a subdirectory under the mount point.
    

    postgresql yaml 文件:

    # pv
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: postgresql-ceph-pvc
      namespace: gitlab
    spec:
      storageClassName: ceph-leffss
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
     
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: postgresql
      namespace: gitlab
      labels:
        app: gitlab
        tier: postgreSQL
    spec:
      ports:
        - port: 5432
      selector:
        app: gitlab
        tier: postgreSQL
    
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: postgresql
      namespace: gitlab
      labels:
        app: gitlab
        tier: postgreSQL
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gitlab
          tier: postgreSQL
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: gitlab
            tier: postgreSQL
        spec:
          #nodeSelector:
          #  gee/disk: "500g"
          containers:
            - image: hub.leffss.com/library/postgres:12.6-alpine
            #- image: harbor.boge.com/library/postgres:12.6-alpine
              name: postgresql
              env:
                - name: POSTGRES_USER
                  value: gitlab
                - name: POSTGRES_DB
                  value: gitlabhq_production
                - name: POSTGRES_PASSWORD
                  value: bogeusepg
                - name: TZ
                  value: Asia/Shanghai
              ports:
                - containerPort: 5432
                  name: postgresql
              livenessProbe:
                exec:
                  command:
                  - sh
                  - -c
                  - exec pg_isready -U gitlab -h 127.0.0.1 -p 5432 -d gitlabhq_production
                initialDelaySeconds: 110
                timeoutSeconds: 5
                failureThreshold: 6
              readinessProbe:
                exec:
                  command:
                  - sh
                  - -c
                  - exec pg_isready -U gitlab -h 127.0.0.1 -p 5432 -d gitlabhq_production
                initialDelaySeconds: 20
                timeoutSeconds: 3
                periodSeconds: 5
    #          resources:
    #            requests:
    #              cpu: 100m
    #              memory: 512Mi
    #            limits:
    #              cpu: "1"
    #              memory: 1Gi
              volumeMounts:
                - name: postgresql
                  mountPath: /var/lib/postgresql/data
          volumes:
            - name: postgresql
              persistentVolumeClaim:
                claimName: postgresql-ceph-pvc
    
    

    解决方法:volumeMounts 中新增 subPath 参数

      volumeMounts:
        - name: postgresql
          mountPath: /var/lib/postgresql/data
          subPath: data
    

    参考:postgresql - How to have data persist in GKE kubernetes StatefulSet with postgres? - Stack Overflow

  • 相关阅读:
    Java 设计模式之单例
    CentOS 下安装配置Hadoop
    Linux 修改IP地址和DNS
    Hibernate 主配置文件详解
    HTTP 协议细节
    Java 设计模式之工厂
    mysqldump备份与还原
    [小技巧]windows时间同步
    关于反射
    XHTML、DTD和Web Services
  • 原文地址:https://www.cnblogs.com/leffss/p/15627754.html
Copyright © 2011-2022 走看看