【问题标题】:how to create helm chart of postgres with pvc如何使用 pvc 创建 postgres 的掌舵图
【发布时间】:2021-09-19 07:41:58
【问题描述】:

我想用 PVC(持久卷声明)为 PostgreSQL 创建一个掌舵图。

我看过尝试片尾 https://www.katacoda.com/courses/kubernetes/helm-package-manager 使用 pvc 创建 Postgres helm 图表。

我该怎么做?

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    我使用以下PVCvalues.yaml 和 Chart.yaml 进行部署

    pvc.yaml

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: postgres-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 25Gi
    

    values.yaml

    postgresql:
      cpu: 1000m
      memory: 1Gi
      persistence:
        enabled: true
        existingClaim: postgres-pvc
      volumePermissions:
        enabled: true
      replication:
        enabled: false
      initdbScripts:
        psql.sql: |
          CREATE USER user WITH PASSWORD 'pass';
          ALTER USER user WITH SUPERUSER;
    

    Chart.yaml

    apiVersion: v2
    name: pgname
    description: A Short description
    
    type: application
    
    version: 0.1.3
    
    appVersion: 1.16.2
    
    dependencies:
      - name: postgresql
        version: 7.x.x
        repository: https://kubernetes-charts.storage.googleapis.com/
        condition: postgresql.enabled
        tags:
          - services
          - db
          - write
    

    我在以下目录结构中有以上文件。

    .
    ├── Chart.yaml
    ├── charts
    │   └── postgresql-7.7.3.tgz
    └── values.yaml
    

    . 我做helm dependency updatehelm install release_name . 安装。在那之前kubectl apply -f pvc.yaml

    注意你需要在同一个命名空间中

    【讨论】:

    • 感谢您的回答,我尝试运行 kubectl apply -f chat.yaml 但它显示错误,错误:无法解码“chart.yaml”:缺少对象'Kind'
    • 我能够使用 kubectl apply -f pvc.yaml 命令创建 pvc,当我在命令下运行时,我得到函数“三元”未定义错误。 cmd=helm install demo stable/postgresql --set persistence.storageClass=postgres-pvc error=Error: parse error in "postgresql/templates/statefulset.yaml": template: postgresql/templates/statefulset.yaml:85: function "ternary " 未定义
    【解决方案2】:

    正如我们可以从PostgreSQL helm charts docs 中看到的那样,它可以与以下parameters 一起使用:

    +----------------------------+-----------------------------------------------------------------+---------------+
    |         Parameter          |                           Description                           |    Default    |
    +----------------------------+-----------------------------------------------------------------+---------------+
    | persistence.enabled        | Enable data persistence                                         | true          |
    | persistence.existingClaim  | Use a existing PVC which must be created manually before bound  | nil           |
    | persistence.storageClass   | Specify the storageClass used to provision the volume           | nil           |
    | persistence.mountPath      | Path to mount data volume at                                    | nil           |
    | persistence.accessMode     | Access mode of data volume                                      | ReadWriteOnce |
    | persistence.size           | Size of data volume                                             | 8Gi           |
    | persistence.annotations    | Persistent Volume Claim annotations                             | {}            |
    +----------------------------+-----------------------------------------------------------------+---------------+
    

    持久性

    默认情况下,数据使用 PostgreSQL 状态集中的 PVC 模板进行持久化。您可以禁用将persistence.enabled 参数设置为false 的持久性。在 Kubernetes 集群中需要一个默认的 StorageClass 来动态供应卷。在 persistence.storageClass 中指定另一个 StorageClass 或设置 persistence.existingClaim(如果您已经有要使用的持久卷)。

    这意味着您只需要创建自己的Persistent Volume,例如如下所示:

    pv.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: task-pv-volume
      labels:
        type: local
    spec:
      storageClassName: manual
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/mnt/data"
    

    pvc.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: task-pv-claim
    spec:
      storageClassName: manual
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 8Gi
    

    一旦这些被部署和绑定,您就可以安装 PostgreSQL 图表:

    helm install my-release bitnami/postgresql --set persistence.existingClaim=task-pv-claim

    【讨论】:

      【解决方案3】:

      这个https://arctype.com/blog/deploy-postgres-kubernetes/ 解决了我的问题

      # clean
      helm list
      helm delete postgresql-db
      helm repo remove bitnami
      kubectl get pvc
      kubectl delete pvc data-postgresql-db
      helm repo add bitnami https://charts.bitnami.com/bitnami
      helm search repo postgresql
      
      # Create PV & PVC
      echo "---
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: postgresql-pv
        labels:
          type: local
      spec:
        storageClassName: manual
        capacity:
          storage: 10Gi
        accessModes:
          - ReadWriteOnce
        hostPath:
          path: "/mnt/data"
      " > pv.yaml
      k apply -f pv.yaml
      
      echo "---
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: postgresql-pv-claim
      spec:
        storageClassName: manual
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 10Gi
      " > pvc.yaml
      k apply -f pvc.yaml
      
      helm install postgresql-db bitnami/postgresql --set persistence.existingClaim=postgresql-pv-claim --set volumePermissions.enabled=true
      
      

      【讨论】:

        猜你喜欢
        • 2021-06-13
        • 2019-10-09
        • 1970-01-01
        • 2019-03-15
        • 2020-08-26
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 2017-04-08
        相关资源
        最近更新 更多