首页 > 解决方案 > Kubernetes 从 GCE 持久磁盘卷配置 PVC 显示错误

问题描述

我正在使用具有 2 个节点的 GCE 集群,我使用 kubeadm 进行设置。现在我想为要部署的 postgresql 设置一个持久卷。我创建了一个带有 storageClass 的 PVC 和 PV,并在同一个项目中创建了一个名为postgres的 10G 磁盘空间。我在下面附加了 PVC、PV 和部署的脚本。另外我正在使用一个具有访问权限的服务帐户到磁盘。

1.部署.yml

apiVersion: apps/v1
kind: Deployment 
metadata:
  name: kyc-postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - image: "postgres:9.6.2"
        name: postgres
        ports:
        - containerPort: 5432
          name: postgres
        volumeMounts:
        - name: postgres-storage
          mountPath: /var/lib/postgresql/db-data
      volumes:
      - name: postgres-storage
        persistentVolumeClaim:
          claimName: kyc-postgres-pvc

2.PersistentVolumeClaim.yml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kyc-postgres-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: standard

3.PersistentVolume.yml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: kyc-postgres-pv
  annotations:
    kubernetes.io/createdby: gce-pd-dynamic-provisioner
    pv.kubernetes.io/bound-by-controller: "yes"
    pv.kubernetes.io/provisioned-by: kubernetes.io/gce-pd
  finalizers:
  - kubernetes.io/pv-protection
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 5Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: kyc-postgres-pvc
    namespace: default
  gcePersistentDisk:
    fsType: NTFS
    pdName: postgres
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: failure-domain.beta.kubernetes.io/zone
          operator: In
          values:
          - us-central1-a
        - key: failure-domain.beta.kubernetes.io/region
          operator: In
          values:
          - us-central1-a
  persistentVolumeReclaimPolicy: Delete
  storageClassName: standard
  volumeMode: Filesystem
status:
  phase: Bound
  1. 存储类.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  zone: us-central1-a

现在,当我创建这些卷和部署时,pod 没有正确启动。当我厌倦了创建部署时,我收到以下错误。

Failed to get GCE GCECloudProvider with error <nil>

我还附上了我的输出kubectl get sc

NAME       PROVISIONER            RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
standard   kubernetes.io/gce-pd   Delete          Immediate           false                  10m

有人可以帮我解决这个问题吗?提前感谢您的时间——如果我错过了任何事情,过分强调或过分强调某一点,请在评论中告诉我。

标签: postgresqlkubernetesgoogle-compute-enginepersistent-volumes

解决方案


PersistentVolumeClaim没有指定 a storageClassName,所以我想您可能想要使用默认的StorageClass。使用默认 StorageClass 时,您无需创建PersistentVolume资源,该资源将从 Google Cloud Platform 动态提供。(或者有什么特殊原因你不想使用默认的 StorageClass?)


推荐阅读