POD 启动失败:在注册的 CSI 驱动程序列表中找不到 efs.csi.aws.com

问题描述 投票:0回答:2

我按照此链接创建持久卷声明并在 AWS Fargate 上的 Pod 中使用它。

这是我的配置文件

redis-csi.yaml:

kind: CSIDriver
metadata:
  name: efs.csi.aws.com
spec:
  attachRequired: false```

redis-sc.yaml :
```kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: efs-sc
  namespace: $ns
provisioner: efs.csi.aws.com

redis-pv.yaml:

kind: PersistentVolume
metadata:
  name: redis-efs-pv
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: efs-sc
  csi:
    driver: efs.csi.aws.com
    volumeHandle: $WOF_EFS_FS_ID::$WOF_EFS_AP

redis-pvc.yaml:

kind: PersistentVolumeClaim
metadata:
  name: redis-efs-uploads-pvc
  namespace: $ns
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: efs-sc
  resources:
    requests:
      storage: 2Gi

redis-sts.yaml:

kind: StatefulSet
metadata:
  name: redis-cluster
spec:
  serviceName: redis-cluster
  replicas: 1
  selector:
    matchLabels:
      app: redis-cluster
  template:
    metadata:
      labels:
        app: redis-cluster
    spec:
      containers:
        - name: redis
          image: redis:alpine
          command:
            - redis-server
            - "/redis-master/redis.conf"
          env:
            - name: MASTER
              value: "true"
          ports:
            - containerPort: 6379
              name: client
            - containerPort: 16379
              name: gossip
          volumeMounts:
            - mountPath: /redis-master-data
              name: data
            - mountPath: /redis-master
              name: config
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: redis-efs-uploads-pvc
        - name: config
          configMap:
            name: redis-config-map
            items:
              - key: redis-config
                path: redis.conf

这是我脚本的一部分:

kubectl config set-context --current --namespace=$ns

kubectl apply -f volume/redis-csi.yaml
( echo "cat <<EOF" ; cat volume/redis-sc.yaml; echo EOF ) | sh | kubectl apply -f -

export WOF_EFS_FS_ID=$WOF_EFS_FS_ID
export WOF_EFS_AP=$WOF_EFS_AP
( echo "cat <<EOF" ; cat volume/redis-pv.yaml; echo EOF ) | sh | kubectl apply -f -

( echo "cat <<EOF" ; cat volume/redis-pvc.yaml; echo EOF ) | sh | kubectl apply -f -
( echo "cat <<EOF" ; cat redis-config-map.yaml; echo EOF ) | sh | kubectl apply -f -
kubectl apply -f redis-sts.yaml

问题

当 ns = default 时:一切都很好,我的 redis 容器已启动。但是当我创建其他命名空间并设置 ns=othernamespace 时,我的 pod 出现以下错误:

Warning  FailedMount  91s (x11 over 7m43s)  kubelet            MountVolume.MountDevice failed for volume "redis-efs-pv" : kubernetes.io/csi: attacher.MountDevice failed to create newCsiDriverClient: driver name efs.csi.aws.com not found in the list of registered CSI drivers
  
Warning  FailedMount  67s (x2 over 3m22s)   kubelet            Unable to attach or mount volumes: unmounted volumes=[data], unattached volumes=[config kube-api-access-t44sq data]: timed out waiting for the condition

每次我删除所有内容并在默认命名空间上重新创建所有内容时,Pod 都会正确启动。但是当我尝试在其他命名空间中部署时,出现上述错误。

amazon-web-services kubernetes amazon-efs
2个回答
0
投票

根据您提供的配置,您似乎正在手动创建

AWS EFS CSI driver
CSIDriver

我建议您采取正确的行为,即通过 Amazon EKS 附加组件安装 Amazon EFS CSI 驱动程序。要将 Amazon EFS 加载项添加到您的集群,请参阅创建 EFS 加载项

或者,如果您想要自行管理 Amazon EFS CSI 驱动程序安装,请参阅 GitHub 上的安装


0
投票

StorageClass 资源应该是命名空间的,这可能是您问题的原因吗?

出于兴趣,是否已将

volumeAttributes
添加到您的活动持久卷中的
spec.csi
中?

我遇到了同样的问题,问题的根源是我限制了 EFS CSI 驱动程序的

node
组件仅在我的“关键”节点上运行,而不是在我的“正常”节点上运行。我通过在 AWS 中的 EFS CSI 驱动程序附加组件的可选配置值中包含以下内容,实现了这一令人印象深刻的壮举 (!):

node:
  nodeSelector:
    eks.amazonaws.com/nodegroup: eks-node-group-critical
  tolerations:
    - effect: "NoSchedule"
      key: "cluster-priority"
      operator: "Equal"
      value: "critical"

如果您也这样做过,请不要这样做:)。

node
组件需要在每个集群的节点上运行,以确保驱动程序本身安装到每个节点的文件系统中。阅读更多这里

© www.soinside.com 2019 - 2024. All rights reserved.