【问题标题】:POD in pending status because PV and PVC unable to deletePOD 处于挂起状态,因为 PV 和 PVC 无法删除
【发布时间】:2021-05-07 11:57:34
【问题描述】:

我遇到了与 PV 和 PVC 有关的问题,我真的不知道如何解决。有人可以提供一些见解吗?

Github -> https://github.com/Sarony11/wordpress-k8s/tree/main/k8s

文件: wordpress-pv.yaml(添加在 cmets 之后)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: wp1-pv
  labels:
    app: wordpress
spec:
  capacity:
    storage: 5Gi
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /tmp/data

wordpress-pv-claim.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp1-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: standard
  volumeName: wp1-html

wordpress-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wp1-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
      component: app
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
        component: app
    spec:
      containers:
      - image: wordpress:5.6.0-apache
        name: wp1
        env:
          - name: WORDPRESS_DB_HOST
            value: "35.204.214.81"
          - name: WORDPRESS_DB_USER
            value: wordpressdb
          - name: WORDPRESS_DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysql-pass
                key: password
        ports:
        - containerPort: 80
          name: wp1-port
        volumeMounts:
        - name: wp1-pv
          mountPath: /var/www/html
      volumes:
      - name: wp1-pv
        persistentVolumeClaim:
          claimName: wp1-pv-claim

命令

administrator@master-ubuntu:~/learning/wordpress-k8s$ microk8s.kubectl apply -k k8s
secret/mysql-pass-7m4b7ft482 created
service/wp1-clusterip-service created
ingress.networking.k8s.io/ingress-service created
persistentvolume/wp1-pv created
persistentvolumeclaim/wp1-pv-claim created



administrator@master-ubuntu:~/learning/wordpress-k8s$ microk8s.kubectl get 
pv,pvc -n default
NAME                      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
persistentvolume/wp1-pv   5Gi        RWO            Retain           Available           standard                74s

NAME                                 STATUS    VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/wp1-pv-claim   Pending   wp1-html   0                         standard  

 74s

administrator@master-ubuntu:~/learning/wordpress-k8s$ microk8s.kubectl describe pv wp1-pv
Name:            wp1-pv
Labels:          app=wordpress
Annotations:     <none>
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    standard
Status:          Available
Claim:
Reclaim Policy:  Retain
Access Modes:    RWO
VolumeMode:      Filesystem
Capacity:        5Gi
Node Affinity:   <none>
Message:
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /tmp/data
    HostPathType:
Events:            <none>


administrator@master-ubuntu:~/learning/wordpress-k8s$ microk8s.kubectl describe pvc wp1-pv-claim
Name:          wp1-pv-claim
Namespace:     default
StorageClass:  standard
Status:        Pending
Volume:        wp1-html
Labels:        app=wordpress
Annotations:   <none>
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      0
Access Modes:
VolumeMode:    Filesystem
Mounted By:    wp1-app-54ddf5fb78-7f8j6
               wp1-app-54ddf5fb78-hgqmj
               wp1-app-54ddf5fb78-sxn9j
Events:        <none>

PV 和 PVS 的结果仍然是 Pending,当然,Pod 也处于 Pending。

【问题讨论】:

  • 嗨!你能打印出你目前拥有的 pod、pvc 和 pv 的列表,以便我们了解更多关于当前情况的详细信息吗? kubectl get po,pvc,pv
  • kubectl get pv 的输出是什么? (在您的命名空间中)
  • 我更新了我的主帖。我创建了一个 PV yaml 文件(我更改了名称以重新开始)但结果是一样的:(

标签: kubernetes persistent-volumes microk8s


【解决方案1】:

请检查/分享 pvc 和 pv 的状态。

检查状态

#kubectl get pvc,pv -n <namespace>

描述pvc和pv。

#kubectl describe pvc <PVC-name> -n namespace
#kubectl describe pv <PV-name> -n namespace

【讨论】:

    【解决方案2】:

    所以这里的问题是您没有创建任何持久卷。
    这就是为什么你的 pvc 和你的 pod 一样保持pending 的原因。

    要使其正常工作,您需要提供一个符合 pvc 规范的 PV

    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
      volumeName: "wp-html"
    

    下面是一个应该与你的 pvc 匹配的 PV 示例

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: wp-html
      labels:
        app: wordpress
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      hostPath:
        path: /data/pv/wp-html
    

    此 PV 会将数据存储在 本地节点上的 /data/pv/wp-html 文件夹下。

    【讨论】:

      【解决方案3】:

      我已经在我的环境中测试过了,可以给你一些建议。 在开始之前阅读如何在 Kubernetes 中正确配置动态配置 - dynamics-provisioning-kubernetes

      1. 你的 pv yaml 没问题。
      2. 从 pvc yaml 文件中删除 volumeName 字段:
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: wp1-pv-claim
        labels:
          app: wordpress
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 5Gi
        storageClassName: standard
      

      因此,您的 pvc 将成功绑定到现有 pv。

      1. 在 Deployment yaml 文件中更改 volumeMounts 值,例如更改为 wp1-pv-storage
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: wp1-app
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: wordpress
            tier: frontend
            component: app
        strategy:
          type: Recreate
        template:
          metadata:
            labels:
              app: wordpress
              tier: frontend
              component: app
          spec:
            containers:
            - image: wordpress:5.6.0-apache
              name: wp1
              env:
                - name: WORDPRESS_DB_HOST
                  value: "35.204.214.81"
                - name: WORDPRESS_DB_USER
                  value: wordpressdb
                - name: WORDPRESS_DB_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: mysql-pass
                      key: password
              ports:
              - containerPort: 80
                name: wp1-port
              volumeMounts:
              - name: wp1-pv-storage
                mountPath: /var/www/html
            volumes:
            - name: wp1-pv-storage
              persistentVolumeClaim:
                claimName: wp1-pv-claim
      

      【讨论】:

        猜你喜欢
        • 2020-02-13
        • 1970-01-01
        • 1970-01-01
        • 2020-12-14
        • 2021-03-24
        • 1970-01-01
        • 2021-08-11
        • 2015-12-15
        • 2018-03-31
        相关资源
        最近更新 更多