kubernetes PersistentVolumeClaim在新调配的AWS EKS群集上停留在“等待创建卷,...调配器“ebs.csi.aws.com“...”

eoigrqb6  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(168)

我们有a EKS setup provisioned,其中我们使用基于云原生构建包的Tekton管道,我们的PipelineRuns在没有获得Pod资源的情况下被卡住并永远挂起。我们创建了如下所示的PersistentVolumeClaim:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: buildpacks-source-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

查看创建后此PVC的事件,以下事件表明我们的EKS设置存在问题:
命令kubectl describe pvc buildpacks-source-pvc提供以下事件消息:

Name:          buildpacks-source-pvc
Namespace:     default
StorageClass:  gp2
Status:        Pending
Volume:
Labels:        <none>
Annotations:   volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com
               volume.kubernetes.io/selected-node: ip-999-99-99-99.eu-central-1.compute.internal
               volume.kubernetes.io/storage-provisioner: ebs.csi.aws.com
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode:    Filesystem
Used By:       affinity-assistant-0b3d266b91-0
               affinity-assistant-53a7c08baf-0
               affinity-assistant-a375f28de3-0
               affinity-assistant-e8cb1a6e15-0
               buildpacks-test-pipeline-run-9rz4l-fetch-repository-pod
Events:
  Type    Reason                Age                     From                         Message
  ----    ------                ----                    ----                         -------
  Normal  ExternalProvisioning  3m43s (x561 over 143m)  persistentvolume-controller  waiting for a volume to be created, either by external provisioner "ebs.csi.aws.com" or manually created by system administrator

EBS CSI是什么?我们如何让集群像以前一样工作?

2g32fytz

2g32fytz1#

a Container Storage Interface (CSI) driver上的EKS 1.23开始,为了让PersistentVolume为您的PersisentVolumeClaims提供服务,就像您习惯于早期EKS版本一样。
The docs tell us,需要配置什么:

溶液:配置Amazon EBS CSI驱动程序以在EKS中运行PersistentVolumes

本质上,我们需要将AWS EBS CSI驱动程序作为EKS插件启用,但在此之前,我们需要启用IAM OIDC提供程序并为EBS CSI驱动程序创建IAM角色,最简单的方法是使用eksctl(其他方法如using plain aws cli or the AWS GUI are described in the docs)。

1.)安装eksctl

这里我们假设the aws cli is installed and configured-并且您可以访问您的EKS集群。要使用eksctl,我们需要先安装它。在Mac上使用brew,如下所示:

brew tap weaveworks/tap
brew install weaveworks/tap/eksctl

或在Linux上用途:

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
2.)启用IAM OIDC提供程序

EBS CSI驱动程序工作的先决条件是群集具有现有AWS身份和访问管理(IAM)OpenID Connect(OIDC)提供程序。可以使用以下命令启用此IAM OIDC提供程序:

eksctl utils associate-iam-oidc-provider --region=eu-central-1 --cluster=YourClusterNameHere --approve
3.)创建Amazon EBS CSI驱动程序IAM角色

eksctl就绪后,创建IAM角色:

eksctl create iamserviceaccount \
  --name ebs-csi-controller-sa \
  --namespace kube-system \
  --cluster YourClusterNameHere \
  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
  --approve \
  --role-only \
  --role-name AmazonEKS_EBS_CSI_DriverRole

正如你所看到的,AWS为我们维护了一个托管策略,我们可以简单地使用(AWS maintains a managed policy, available at ARN arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy)。只有当你使用加密的EBS驱动器时,你才需要额外添加配置到策略中。
命令...
...部署AWS CloudFormation堆栈,该堆栈创建IAM角色,将IAM策略附加到该角色,并使用IAM角色的Amazon资源名称(ARN)注解现有的ebs-csi-controller-sa服务帐户。

4.)添加Amazon EBS CSI加载项

现在我们终于可以添加EBS CSI插件了。因此,我们还需要AWS帐户ID,可以通过运行aws sts get-caller-identity --query Account --output text(参见Quick way to get AWS Account number from the AWS CLI tools?)获得。现在eksctl create addon命令如下所示:

eksctl create addon --name aws-ebs-csi-driver --cluster YourClusterNameHere --service-account-role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/AmazonEKS_EBS_CSI_DriverRole --force

现在,您的PersistentVolumeClaim应该获得状态Bound,同时为您创建了EBS卷-Tekton管道应该再次运行。

相关问题