将 Amazon EBS CSI 驱动程序作为 Amazon EKS 附加组件管理 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将 Amazon EBS CSI 驱动程序作为 Amazon EKS 附加组件管理

您可以将 Amazon EBS CSI 驱动程序作为 Amazon EKS 附加组件管理。但是,此功能仅在 Amazon EKS 预览版中可用,也可能会发生一些变化。下面是预览的一些注意事项:
  • 目前不支持动态快照或卷大小调整。

  • 目前与树内 Amazon EBS 驱动程序没有向后兼容性。

  • 目前不支持 Windows Kubernetes 节点。

有关 Amazon EKS 附加组件的信息,请参阅 Amazon EKS 附加组件。您可以按照 添加 Amazon EBS CSI 附加组件 中的步骤添加 Amazon EBS CSI 附加组件。

如果添加了 Amazon EBS CSI 附加组件,则可以按照 将 Amazon EBS CSI 驱动程序作为 Amazon EKS 附加组件更新删除 Amazon EBS CSI 附加组件 部分的步骤进行管理。

先决条件

  • 现有 1.18 版或更高版本的集群。

    • 1.18 要求使用 eks.9 或更高版本。

    • 1.19 要求使用 eks.7 或更高版本。

    • 1.20 要求使用 eks.3 或更高版本。

    • 1.21 要求使用 eks.3 或更高版本。

  • 集群现有 Amazon Identity and Access Management (IAM) OpenID Connect (OIDC) 提供程序。要确定您是否已经拥有一个或是否要创建一个,请参阅 为集群创建 IAM OIDC 提供商

配置 Amazon EBS CSI 插件将 IAM 角色用于服务账户

Amazon EBS CSI 插件需要 IAM 权限才能代表您调用 Amazon API。有关更多信息,请参阅 GitHub 上的设置驱动程序权限

部署插件后,创建并配置来使用名为 ebs-csi-controller-sa 的服务账户。服务账户绑定到名为 ebs-csi-controller-sa 的 Kubernetes clusterrole 上,并分配所需的 Kubernetes 权限。

注意

无论您是否将 Amazon EBS CSI 插件配置为将 IAM 角色用于服务账户,Pod(一组容器)都可以访问分配给 IAM 角色的权限。这种情况下,除非您阻止对IMD的访问。有关更多信息,请参阅 Amazon EKS 的安全最佳实践

  1. 创建允许 CSI 驱动程序的服务账户代表您调用 Amazon API 的 IAM 策略。您可以查看 GitHub 上的策略文档。

    1. 从 GitHub 下载 IAM 策略文档。

      curl -o example-iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/docs/example-iam-policy.json
    2. 如果在 EBS 卷上使用自定义 KMS 密钥进行加密,请根据需要自定义 IAM 策略。例如,将以下内容添加到 IAM 策略,并将 custom-key-id 替换为自定义 KMS 密钥 ID。

      { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-id"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-id"] }

      有关如何使用可视化编辑器的说明,请参阅 创建 IAM 策略

    3. 创建策略。您可以将 AmazonEKS_EBS_CSI_Driver_Policy 更改为其他名称,但如果更改,请确保在后续步骤中也做出相应更改。

      aws iam create-policy \ --policy-name AmazonEKS_EBS_CSI_Driver_Policy \ --policy-document file://example-iam-policy.json
  2. 创建 IAM 角色并向其附加此 IAM 策略。您可以使用 eksctl 或 Amazon Web Services Management Console。

eksctl
  1. 使用以下命令创建 IAM 角色并附加 IAM 策略。将 my-cluster 替换为您自己的值,将 111122223333 替换为您的账户 ID。命令会部署一个创建了 IAM 角色的 Amazon CloudFormation 堆栈,向其附加 IAM 策略,并使用 IAM 角色的 Amazon Resource Name (ARN) 对现有 ebs-csi-controller-sa 服务账户添加注释。

    eksctl create iamserviceaccount \ --name ebs-csi-controller-sa \ --namespace kube-system \ --cluster my-cluster \ --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_EBS_CSI_Driver_Policy \ --approve \ --role-only
  2. 运行以下命令,查找创建的角色名称。将 stack-name 替换为上一个 eksctl 命令日志中的堆栈名称。稍后将使用此角色名称。

    aws cloudformation describe-stack-resources --query 'StackResources[0].PhysicalResourceId' --output text --stack-name stack-name
Amazon Web Services Management Console

使用 Amazon Web Services Management Console 创建 Amazon EBS CSI 插件 IAM 角色

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在左侧导航窗格中,选择 Roles (角色)

  3. 角色页中,选择创建角色

  4. Select trusted entity(选择受信任的实体)页面上,执行以下操作:

    1. Trusted entity type(受信任的实体类型)部分中,选择 Web identity(Web 身份)。

    2. 对于 Identity provider (身份提供商),选择您集群的 URL。

    3. 对于 Audience (受众),请选择 sts.amazonaws.com.cn

    4. 选择 Next (下一步)

  5. Add permissions(添加权限)页面上,执行以下操作:

    1. Filter policies (筛选器策略) 框中,输入 AmazonEKS_EBS_CSI_Driver_Policy

    2. 选中搜索返回的 AmazonEKS_EBS_CSI_Driver_Policy 左侧的复选框。

    3. 选择 Next (下一步)

  6. Name, review, and create(命名、查看和创建)页面中,执行以下操作:

    1. 对于 Role name(角色名称),请为角色输入唯一名称,例如 AmazonEKSEBSCSIRole

    2. Add tags (Optional)(添加标签(可选))下,通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅 IAM 用户指南中的标记 IAM 实体

    3. 选择 Create role (创建角色)

  7. 创建角色后,在控制台中选择角色以将其打开进行编辑。

  8. 选择 Trust relationships(信任关系)选项卡,然后选择 Edit trust policy(编辑信任策略)。

  9. 查找类似下面的行。

    "oidc.eks.cn-north-1.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com.cn"

    将该行更改为类似于以下行。将 EXAMPLED539D4633E53DE1B716D3041E 替换为集群的 OIDC 提供程序 ID,将 region-code 替换为集群所在的 Amazon Web Services 区域 代码,将 aud(上一个输出中)替换为 sub

    "oidc.eks.region-code.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
  10. 选择 Update policy(更新策略)以完成操作。

添加 Amazon EBS CSI 附加组件

选择带有您想要用于将 Amazon EBS CSI 附加组件添加到集群的工具名称的选项卡。

重要

在添加 Amazon EBS CSI 附加组件之前,请确认您不会自行管理Amazon EKS 将开始管理的任何设置。要确定 Amazon EKS 管理的设置,请参阅 Amazon EKS 附加组件配置

eksctl

要使用 eksctl 添加 Amazon EBS CSI 附加组件

请将 my-cluster 替换为集群名称,将 111122223333 替换为账户 ID,将 role-name 替换为之前创建的角色名称。然后运行以下命令。

eksctl create addon --name aws-ebs-csi-driver --cluster my-cluster --service-account-role-arn arn:aws:iam::111122223333:role/role-name --force

如果删除 --force 选项并且与现有设置存在冲突,则命令将失败,并显示错误消息来帮助您解决冲突。选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。这是因为该选项覆盖了这些设置。有关管理 Amazon EKS 附加组件的更多信息,请参阅 Amazon EKS 附加组件配置

Amazon Web Services Management Console

要使用 Amazon Web Services Management Console 添加 Amazon EBS CSI 附加组件

  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 在左侧导航窗格中,选择 Amazon EKS Clusters(集群)。

  3. 选择要为其配置 Amazon EBS CSI 附加组件的集群名称。

  4. 选择 Configuration 选项卡。

  5. 选择 Add-ons(附加组件)选项卡。

  6. 选择 Add new(新增)

    1. Name(名称)选择 Amazon EBS CSI Driver(Amazon EBS CSI 驱动程序)。

    2. 选择您想使用的 Version(版本)

    3. 对于 Service account role(服务账户角色),选择要将 IAM 策略附加到的 IAM 角色。

    4. 如果选择 Override existing configuration for this add-on on the cluster(覆盖集群上此附加组件的现有配置),则可能用 Amazon EKS 附加组件设置覆盖现有附加组件的一个或多个设置。如果不启用此选项,并且与现有设置存在冲突,则操作将失败,并显示一条错误消息来帮助您解决冲突。在选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。有关管理 Amazon EKS 附加组件的更多信息,请参阅 Amazon EKS 附加组件配置

    5. 选择 Add(添加)

Amazon CLI

使用 Amazon CLI 添加 Amazon EBS CSI 附加组件

my-cluster 替换为集群名称,将 111122223333 替换为账户 ID,将 role-name 替换为之前创建的角色名称。然后,运行以下命令。

aws eks create-addon \ --cluster-name my-cluster \ --addon-name aws-ebs-csi-driver \ --service-account-role-arn arn:aws:iam::111122223333:role/role-name

将 Amazon EBS CSI 驱动程序作为 Amazon EKS 附加组件更新

新版本发布后或者将集群更新到一个新的 Kubernetes 次要版本后,Amazon EKS 不会自动为集群更新 Amazon EBS CSI。要更新现有集群上的 Amazon EBS CSI,您必须启动更新,然后 Amazon EKS 会为您更新该附加组件。

重要

请先将您的集群和节点更新到新的 Kubernetes 次要版本,然后再将 Amazon EBS CSI 更新到相同的次要版本。

eksctl

要使用 eksctl 更新 Amazon EBS CSI 附加组件

  1. 检查 Amazon EBS CSI 附加组件的当前版本。将 my-cluster 替换为您的集群名称。

    eksctl get addon --name aws-ebs-csi-driver --cluster my-cluster

    输出如下所示。

    NAME VERSION STATUS ISSUES IAMROLE UPDATE AVAILABLE aws-ebs-csi-driver v1.4.0-eksbuild.preview ACTIVE 0 v1.4.0-eksbuild.1
  2. 将附加组件更新为上一个步骤的输出中的 UPDATE AVAILABLE 下返回的版本。

    eksctl update addon \ --name aws-ebs-csi-driver \ --version v1.4.0-eksbuild.1 \ --cluster my-cluster \ --force

    如果删除 --force 选项并且与现有设置存在冲突,则命令将失败,并显示一条错误消息来帮助您解决冲突。选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。这是因为该选项覆盖了这些设置。有关管理 Amazon EKS 附加组件的更多信息,请参阅 Amazon EKS 附加组件配置

Amazon Web Services Management Console

使用 Amazon Web Services Management Console 更新 Amazon EBS CSI 附加组件

  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 在左侧导航窗格中,选择 Amazon EKS Clusters(集群)。

  3. 选择要为其更新 Amazon EBS CSI 附加组件的集群名称。

  4. 选择 Configuration 选项卡。

  5. 选择 Add-ons(附加组件)选项卡。

  6. 选中 aws-ebs-csi-driver 框右上角的复选框。

  7. 选择编辑

    1. 选择您要使用的 Amazon EKS 附加组件的 Version(版本)

    2. 对于 Service account role(服务账户角色),如果没有被选中,则选择您附加了 IAM 策略的 IAM 角色的名称。

    3. 如果选择 Override existing configuration for this add-on on the cluster(覆盖集群上此附加组件的现有配置),则可能用 Amazon EKS 附加组件设置覆盖现有附加组件的一个或多个设置。如果不启用此选项,并且与现有设置存在冲突,则操作将失败,并显示一条错误消息来帮助您解决冲突。在选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。有关管理 Amazon EKS 附加组件的更多信息,请参阅 Amazon EKS 附加组件配置

    4. Select Update(更新)。

Amazon CLI

使用 Amazon CLI 更新 Amazon EBS CSI 附加组件

  1. 检查 Amazon EBS CSI 附加组件的当前版本。将 my-cluster 替换为您的集群名称。

    aws eks describe-addon \ --cluster-name my-cluster \ --addon-name aws-ebs-csi-driver \ --query "addon.addonVersion" \ --output text

    输出如下所示。

    v1.4.0-eksbuild.preview
  2. 确定哪些版本的 Amazon EBS CSI 附加组件可用于您的集群版本。

    aws eks describe-addon-versions \ --addon-name aws-ebs-csi-driver \ --kubernetes-version 1.20 \ --query "addons[].addonVersions[].[addonVersion, compatibilities[].defaultVersion]" \ --output text

    输出如下所示。

    v1.4.0-eksbuild.preview True

    下面带有 True 的版本是使用您指定的版本的新集群部署的默认版本。

  3. 将附加组件更新为上一步输出中返回 True 的版本。也可以更新到更高版本(如果输出中返回)。

    aws eks update-addon \ --cluster-name my-cluster \ --addon-name aws-ebs-csi-driver \ --addon-version v1.4.0-eksbuild.preview \ --resolve-conflicts OVERWRITE

    如果删除 --resolve-conflicts OVERWRITE 选项并且与现有设置存在冲突,则命令将失败,并显示错误消息以帮助您解决冲突。选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。这是因为该选项覆盖了这些设置。有关管理 Amazon EKS 附加组件的更多信息,请参阅 Amazon EKS 附加组件配置

删除 Amazon EBS CSI 附加组件

移除 Amazon EKS 附加组件时,您有两种选择。

  • 将附加组件保留在您的集群上 - 此方法将移除 Amazon EKS 对任何设置的管理。还移除 Amazon EKS 通知您更新以及在您启动更新后自动更新 Amazon EKS 附加组件的功能。但是,此方法会保留集群上的附加组件软件。此选项使附加组件成为自我管理的附加组件,而不是 Amazon EKS 附加组件。使用此方法,附加组件不停机。

  • 从集群中完全删除附加组件 - 我们建议只有当集群中没有资源依赖于附加组件时,才从集群移除 Amazon EKS 附加组件。移除 Amazon EKS 附加组件后,可以再次添加。

如果附加组件有与其关联的 IAM 账户,则不会移除该 IAM 账户。

选择带有要用于移除 Amazon EBS CSI 附加组件的工具名称的选项卡。

eksctl

要使用 eksctl 移除 Amazon EBS CSI 附加组件

请将 my-cluster 替换为您的集群名称,然后运行以下命令。如果您移除了附加组件,这会从集群移除附加组件软件。如果不希望 Amazon EKS 管理附加组件的任何设置,请使用 Amazon Web Services Management Console 或 Amazon CLI 移除附加组件。执行此操作,可以在集群上保留附加组件软件。如果您移除 --preserve,会从集群移除附加组件软件。

eksctl delete addon --cluster my-cluster --name aws-ebs-csi-driver --preserve
Amazon Web Services Management Console

要使用 Amazon Web Services Management Console 移除 Amazon EBS CSI 附加组件

  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 在左侧导航窗格中,选择 Amazon EKS Clusters(集群)。

  3. 选择要为其移除 Amazon EBS CSI 附加组件的集群名称。

  4. 选择 Configuration 选项卡。

  5. 选择 Add-ons(附加组件)选项卡。

  6. 选中 aws-ebs-csi-driver 框右上角的复选框。

  7. 选择 Remove

  8. 如果希望 Amazon EKS 停止管理附加组件设置,请选择 Preserve on cluster(在集群上保留)。如果要在集群上保留附加组件软件,请执行此操作。这样您可以自行管理附加组件的所有设置。

  9. 键入 aws-ebs-csi-driver

  10. 选择 Remove(移除)。

Amazon CLI

要使用 Amazon CLI 移除 Amazon EBS CSI 附加组件

请将 my-cluster 替换为您的集群名称,然后运行以下命令。如果您移除 --preserve,这会从集群移除附加组件软件。

aws eks delete-addon --cluster-name my-cluster --addon-name aws-ebs-csi-driver --preserve