我正在尝试在 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
我建议您使用 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 提供单独的卷,通常会给您带来更好的性能。