1

我不知道爲什麼持久性音量沒有被聲明,或者我可以採取什麼步驟來進一步診斷?Kubernetes沒有聲明持久性音量 - 「由於PersistentVolumeClaim未被綁定:」task-pv-claim「,這是意外的。」

索賠大小是否與卷大小匹配?卷大小是否應與GCP卷大小相匹配?

這太難以測試,並找出...

我在這裏的目標只是能,只要它會支持滾動部署甚至單個副本創建一個WordPress的實例....

輸出的kubectl get pods

輸出 kubectl describe pods
NAME       READY  STATUS RESTARTS AGE 
wordpress-1546832918-mz4rt 0/3  Pending 0   47m 
wordpress-1546832918-p0s1s 0/3  Pending 0   47m 

...truncated... 
Events: 
    FirstSeen LastSeen Count From   SubObjectPath Type  Reason   Message 
    --------- -------- ----- ----   ------------- -------- ------   ------- 
    47m  3s  168 default-scheduler  Warning  FailedScheduling [SchedulerPredicates failed due to PersistentVolumeClaim is not bound: "task-pv-claim", which is unexpected., SchedulerPredicates failed due to PersistentVolumeClaim is not bound: "task-pv-claim", which is unexpected.] 

輸出的kubectl get pvc

輸出 kubectl get pv
NAME   STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE 
task-pv-claim Pending          manual   4h 

NAME  CAPACITY ACCESSMODES RECLAIMPOLICY STATUS  CLAIM  STORAGECLASS REASON AGE 
pv0001 10Gi  RWX   Retain   Available    manual     4h 

production.yaml

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: wordpress 
    labels: 
    app: wordpress 
spec: 
    replicas: 2 
    selector: 
    matchLabels: 
     app: wordpress 
    template: 
    metadata: 
     labels: 
     app: wordpress 
    spec: 
     terminationGracePeriodSeconds: 30 
     containers: 
     - image: eu.gcr.io/abcxyz/wordpress:deploy-1502807720 
      name: wordpress 
      imagePullPolicy: "Always" 
      env: 
      - name: WORDPRESS_HOST 
       value: localhost 
      - name: WORDPRESS_DB_USERNAME 
       valueFrom: 
       secretKeyRef: 
        name: cloudsql-db-credentials 
        key: username 
      volumeMounts: 
      - name: wordpress-persistent-storage 
       mountPath: /var/www/html 
     - image: eu.gcr.io/abcxyz/nginx:deploy-1502807720 
      name: nginx 
      imagePullPolicy: "Always" 
      ports: 
      - containerPort: 80 
       name: nginx 
      volumeMounts: 
      - name: wordpress-persistent-storage 
       mountPath: /var/www/html 
       readOnly: true 
     - image: gcr.io/cloudsql-docker/gce-proxy:1.09 
      name: cloudsql-proxy 
      command: ["/cloud_sql_proxy", "--dir=/cloudsql", 
        "-instances=abcxyz:europe-west1:wordpressdb2=tcp:3306", 
        "-credential_file=/secrets/cloudsql/credentials.json"] 
      volumeMounts: 
      - name: cloudsql-instance-credentials 
       mountPath: /secrets/cloudsql 
       readOnly: true 
      - name: ssl-certs 
       mountPath: /etc/ssl/certs 
      - name: cloudsql 
       mountPath: /cloudsql 
     volumes: 
     - name: wordpress-persistent-storage 
      persistentVolumeClaim: 
      claimName: "task-pv-claim" 
     - name: cloudsql-instance-credentials 
      secret: 
      secretName: cloudsql-instance-credentials 
     - name: ssl-certs 
      hostPath: 
      path: /etc/ssl/certs 
     - name: cloudsql 
      emptyDir: 

pVolume.yaml

apiVersion: "v1" 
kind: "PersistentVolume" 
metadata: 
    name: "pv0001" 
spec: 
    storageClassName: manual 
    capacity: 
    storage: "10Gi" 
    accessModes: 
    - "ReadWriteMany" 
    gcePersistentDisk: 
    fsType: "ext4" 
    pdName: "wordpress-disk" 

pVolumeClaim.yaml

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

回答

1

你的執着量要求的spec.accessModes具有相匹配的是,在持續的音量。嘗試將它們都改爲相同的值。

如果沒有工作,你可以在spec.selector定義添加到您的持續量要求的定義,通過更新到您的持久體積metadata.labels匹配這樣的:

apiVersion: "v1" 
kind: "PersistentVolume" 
metadata: 
    name: "pv0001" 
    labels: 
    name: "pv0001" # can be anything as long as it matches the selector in the pvc 
spec: 
    ... 

---- 
kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
    name: task-pv-claim 
spec: 
    storageClassName: manual 
    accessModes: 
    - ReadWriteOnce 
    resources: 
    requests: 
     storage: 3Gi 
    selector: 
    matchLabels: 
     name: "pv0001" 

spec.selector充當過濾器確保只有指定標籤的PV匹配。

相關問題