繁体   English   中英

WSL Kubernetes Pod 卡在 ContainerCreating state 由于卷挂载

[英]WSL Kubernetes Pod stuck in ContainerCreating state due to volume mount

我正在使用 Windows 10 上的 Docker 桌面以及 ZEDC9F0A5A5D47797BF1ZESL33 的 Windows 子系统(WSL33)。 我有一个部署到本地 K8s 集群的容器化应用程序(由 Docker Desktop 提供)。 典型故事:一切正常,直到有一天 Docker 桌面更新来了,毁了一切)。 我现在拥有的 DD 版本是 2.3.0.2 稳定版。

我有一个带有 MySQL 的吊舱,其中定义了 pv、pvc 和存储 class。 当我将我的应用程序部署到集群时,我可以看到 pv 和 pvc 已绑定,但 pod 卡在ContainerCreating state:

$ kubectl describe pod mysql-6779d8fb8b-d25wz
Name:           mysql-6779d8fb8b-d25wz
Namespace:      typo3-connector
Priority:       0
Node:           docker-desktop/192.168.65.3
Start Time:     Wed, 13 May 2020 14:21:43 +0200
Labels:         app=mysql
                pod-template-hash=6779d8fb8b
Annotations:    <none>
Status:         Pending
IP:
IPs:            <none>
Controlled By:  ReplicaSet/mysql-6779d8fb8b
Containers:
  mysql:
    Container ID:
    Image:          lw-mysql
    Image ID:
    Port:           3306/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Environment Variables from:
      mysql-credentials  Secret  Optional: false
    Environment:         <none>
    Mounts:
      /var/lib/mysql from mysql-persistent-storage (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-wr6g9 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  mysql-persistent-storage:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  mysql-pv-claim
    ReadOnly:   false
  default-token-wr6g9:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-wr6g9
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason            Age                From                     Message
  ----     ------            ----               ----                     -------
  Warning  FailedScheduling  <unknown>          default-scheduler        persistentvolumeclaim "mysql-pv-claim" not found
  Warning  FailedScheduling  <unknown>          default-scheduler        persistentvolumeclaim "mysql-pv-claim" not found
  Normal   Scheduled         <unknown>          default-scheduler        Successfully assigned typo3-connector/mysql-6779d8fb8b-d25wz to docker-desktop
  Warning  FailedMount       35s (x8 over 99s)  kubelet, docker-desktop  MountVolume.NewMounter initialization failed for volume "mysql-pv" : path "/c/kubernetes/typo3-8/mysql-storage/" does not exist

错误是

MountVolume.NewMounter initialization failed for volume "mysql-pv" : path "/c/kubernetes/typo3-8/mysql-storage/" does not exist

但路径实际上存在于磁盘上(即在 WSL 中)。

光伏:

$ kubectl describe pv mysql-pv
Name:              mysql-pv
Labels:            <none>
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"name":"mysql-pv"},"spec":{"accessModes":["ReadWriteOnce"],"capa...
                   pv.kubernetes.io/bound-by-controller: yes
Finalizers:        [kubernetes.io/pv-protection]
StorageClass:      local-storage
Status:            Bound
Claim:             typo3-connector/mysql-pv-claim
Reclaim Policy:    Retain
Access Modes:      RWO
VolumeMode:        Filesystem
Capacity:          2Gi
Node Affinity:
  Required Terms:
    Term 0:        kubernetes.io/hostname in [docker-desktop]
Message:
Source:
    Type:  LocalVolume (a persistent volume backed by local storage on a node)
    Path:  /c/kubernetes/typo3-8/mysql-storage/
Events:    <none>

聚氯乙烯:

$ kubectl describe pvc mysql-pv-claim
Name:          mysql-pv-claim
Namespace:     typo3-connector
StorageClass:  local-storage
Status:        Bound
Volume:        mysql-pv
Labels:        <none>
Annotations:   kubectl.kubernetes.io/last-applied-configuration:
                 {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"mysql-pv-claim","namespace":"typo3-connector"},"spe...
               pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      2Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Mounted By:    mysql-6779d8fb8b-d25wz
Events:        <none>

我尝试从 PowerShell 运行它,但没有运气。 我得到相同的结果。 但在更新之前一切正常。

它是基于配置的问题吗?

编辑这是清单文件:

apiVersion: v1
kind: Namespace
metadata:
  name: typo3-connector
---
apiVersion: v1
data:
  MYSQL_PASSWORD: ZHVtbXk=
  MYSQL_ROOT_PASSWORD: ZHVtbXk=
  MYSQL_USER: ZHVtbXk=
kind: Secret
metadata:
  name: mysql-credentials
  namespace: typo3-connector
type: Opaque
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mysql
  name: mysql
  namespace: typo3-connector
spec:
  ports:
  - name: mysql-backend
    port: 3306
    protocol: TCP
  selector:
    app: mysql
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: typo3-connector
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - envFrom:
        - secretRef:
            name: mysql-credentials
        image: mysql:5.6
        imagePullPolicy: IfNotPresent
        name: mysql
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: mysql-persistent-storage
      imagePullSecrets:
      - name: lwdockerregistry
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 2Gi
  local:
    path: /c/kubernetes/typo3-8/mysql-storage/
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - docker-desktop
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  namespace: typo3-connector
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: local-storage

您必须对路径使用此格式:

/run/desktop/mnt/host/c/someDir/volumeDir

所以在你的情况下是:

/run/desktop/mnt/host/c/kubernetes/typo3-8/mysql-storage/

解决方案的来源

以下示例中所述,路径不应以 / 结尾。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-local-pv
spec:
  capacity:
    storage: 500Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /mnt/disks/vol1
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - my-node

将路径更改为path: /c/kubernetes/typo3-8/mysql-storage会产生魔力,并且您的 PVC 按设计工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM