AWS EKS:创建有状态集。每个副本在 EFS 上都有自己的持久存储

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

我正在尝试在 AWS EKS 上部署具有 3 个副本的有状态集,每个副本都有动态创建的自己的持久存储(在 efs 上)。 efs 服务器地址存储在 aws Secrets Manager 中。

但是它不起作用。 我收到以下错误:

警告失败调度 4 分钟 58 个默认调度程序 0/1 节点可用:pod 具有未绑定的即时 PersistentVolumeClaims。抢占:0/1 个节点可用:1 抢占对调度没有帮助

如有任何帮助,我们将不胜感激。

secrets-provider-class.yaml

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-secrets-provider
spec:
  provider: aws
  parameters:
    objects:  |
      - objectName: "efs-server-address"
        objectType: secretsmanager
        objectVersion: ""

efs-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: efs-storageclass
provisioner: secrets-store.csi.k8s.io
parameters:
  secretProviderClass: "aws-secrets-provider"

eks-secrets-manager-efs-sa.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: eks-secrets-manager-efs-sa
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::1234567890:policy/eks-secrets-manager-efs-policy

efs-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: efs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: efs-storageclass
  resources:
    requests:
      storage: 1Gi
  selector:
      matchLabels:
        fileSystemId: fs-0f012ab34567ab89c

statefulset-01.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset-01
  labels:
    app: app-sample-01
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app-sample-01
  template:
    metadata:
      labels:
        app: app-sample-01
    spec:
      serviceAccountName: eks-secrets-manager-efs-sa
      containers:
        - name: container-sample-01
          image: '123456789000.dkr.ecr.us-east-1.amazonaws.com/sample-repo:latest'
          ports:
            - containerPort: 8080
          volumeMounts:
            - name: efs-volume
              mountPath: /data
  volumeClaimTemplates:
      - metadata:
          name: efs-volume
        spec:
          accessModes:
            - ReadWriteMany
          storageClassName: efs-storageclass
          resources:
            requests:
              storage: 1Gi
kubernetes amazon-eks amazon-efs
1个回答
0
投票

我建议您使用 AWS EFS CSI 驱动程序。

然后您可以使用动态配置,以便每个 Pod 在同一 EFS 文件系统中获得单独的子路径(您不需要为每个 Pod 提供单独的 EFS 文件系统)。在此处检查

subPathPattern
中的
StorageClass
选项:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: efs-sc
provisioner: efs.csi.aws.com
parameters:
  provisioningMode: efs-ap
  fileSystemId: fs-92107410
  directoryPerms: "700"
  gidRangeStart: "1000" # optional
  gidRangeEnd: "2000" # optional
  basePath: "/dynamic_provisioning" # optional
  subPathPattern: "${.PVC.namespace}/${.PVC.name}" # optional
  ensureUniqueDirectory: "true" # optional
  reuseAccessPoint: "false" # optional

或者,您可以使用 AWS EBS CSI 驱动程序,它将为每个 Pod 提供单独的卷,通常会给您带来更好的性能。

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