Amazon Elastic Kubernetes Service EKS 部署操作参考 - AWS CodePipeline

Amazon Elastic Kubernetes Service EKS 部署操作参考

您可以使用 EKSDeploy 操作部署 Amazon EKS 服务。部署需要有 Kubernetes 清单,以便 CodePipeline 用来部署映像。

在创建管道之前,您必须事先创建 Amazon EKS 资源,并在映像存储库中存储映像。您可以选择为集群提供 VPC 信息。

重要

此操作使用 CodePipeline 托管的 CodeBuild 计算在构建环境中运行命令。运行 Commands 操作将在 AWS CodeBuild 中产生单独的费用。

注意

EKS 部署操作仅适用于 V2 类型管道。

EKS 操作支持公共和私有 EKS 集群。私有集群是 EKS 推荐的类型;但是,两种类型都支持。

跨账户操作支持 EKS 操作。要添加跨账户 EKS 操作,请在操作声明中添加目标账户中的 actionRoleArn

操作类型

  • 类别:Deploy

  • 拥有者:AWS

  • 提供方:EKS

  • 版本:1

配置参数

ClusterName

必需:是

Amazon EKS 中的 Amazon EKS 集群。

Helm 下的选项

当选定部署工具为 Helm 时,以下是可用的选项。

HelmReleaseName

必需:是(仅对于 Helm 类型是必需)

部署的发布名称。

HelmChartLocation

必需:是(仅对于 Helm 类型是必需)

部署的图表位置。

HelmValuesFiles

必需:否(仅对于 Helm 类型是可选)

要覆盖 Helm 值文件,请在 Helm 图表位置输入以逗号分隔的 Helm 值文件。

Kubectl 下的选项

当选定部署工具为 Kubectl 时,以下是可用的选项。

ManifestFiles

必需:是(仅对于 Kubectl 类型是必需)

清单文件名称,该文本文件描述服务的容器名称以及映像和标签。您可以使用此文件来参数化映像 URI 和其他信息。您可以使用环境变量来实现此目的。

您可以将此文件存储在管道的源存储库中。

命名空间

必需:否

要在 kubectlhelm 命令中使用的 Kubernetes 命名空间。

子网

必需:否

您的集群的 VPC 的子网。它们属于附加到您的集群的同一 VPC。您还可以提供尚未附加到您的集群的子网,并在此处进行指定。

SecurityGroupIds

必需:否

您的集群的 VPC 的安全组。它们属于附加到您的集群的同一 VPC。您还可以提供尚未附加到您的集群的安全组,并在此处进行指定。

输入构件

  • 构件数:1

  • 描述:该操作会在管道的源文件存储库中查找 Kubernetes 清单文件或 Helm 图表。如果要使用存储在 S3 存储桶中的 .tgz 格式的 Helm 图表,则可以通过将 S3 存储桶/密钥配置为源操作来实现。例如,提供的对象密钥将是 my-chart-0.1.0.tgz

输出构件

  • 构件数:0

  • 描述:输出构件不适用于此操作类型。

环境变量

用于替换清单文件或 Helm 图表值文件中的映像存储库或映像标签等变量。

键值对环境变量对的键,例如 $IMAGE_TAG

键/值对的值,例如 v1.0。可以使用管道操作中的输出变量或管道变量来参数化该值。例如,管道可以包含一个 ECRBuildAndPublish 操作,该操作会使用 ${codepipeline.PipelineExecutionId} 创建一个 ECR 映像,而 EKS 操作可以通过将 ${codepipeline.PipelineExecutionId} 作为环境变量值来使用该映像。

输出变量

EKSClusterName

Amazon EKS 中的 Amazon EKS 集群。

服务角色策略权限

要运行此操作,管道的服务角色策略中必须提供以下权限。

  • EC2 操作:当 CodePipeline 运行该操作时,需要 EC2 实例权限。请注意,这与创建 EKS 集群时所需的 EC2 实例角色不同。

    如果您使用的是现有的服务角色,要使用此操作,需要为服务角色添加以下权限。

    • ec2:CreateNetworkInterface

    • ec2:DescribeDhcpOptions

    • ec2:DescribeNetworkInterfaces

    • ec2:DeleteNetworkInterface

    • ec2:DescribeSubnets

    • ec2:DescribeSecurityGroups

    • ec2:DescribeVpcs

  • EKS 操作:当 CodePipeline 运行该操作时,需要 EKS 集群权限。请注意,这与创建 EKS 集群时所需的 IAM EKS 集群角色不同。

    如果您使用的是现有的服务角色,要使用此操作,需要为服务角色添加以下权限。

    • eks:DescribeCluster

  • 日志流操作:当 CodePipeline 运行操作时,CodePipeline 会使用管道名称创建一个日志组,如下所示。这样就可以使用管道名称缩小日志资源的权限范围。

    /aws/codepipeline/MyPipelineName

    如果您使用的是现有的服务角色,要使用此操作,需要为服务角色添加以下权限。

    • logs:CreateLogGroup

    • logs:CreateLogStream

    • logs:PutLogEvents

在服务角色策略语句中,将权限范围缩小到资源级别,如下例所示。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeCluster" ], "Resource": "arn:aws:eks:*:111122223333:cluster/YOUR_CLUSTER_NAME" }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterface", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs", "ec2:DescribeRouteTables" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:111122223333:log-group:/aws/codepipeline/YOUR_PIPELINE_NAME", "arn:aws:logs:*:111122223333:log-group:/aws/codepipeline/YOUR_PIPELINE_NAME:*" ] } ] }

要在控制台中使用操作详细信息对话框页面查看日志,必须在控制台角色中添加查看日志的权限。有关更多信息,请参阅在 CodePipeline 控制台中查看计算日志所需的权限中的控制台权限策略示例。

将服务角色添加为集群的访问入口

在管道的服务角色策略中提供权限后,您可以通过添加 CodePipeline 服务角色作为集群的访问入口来配置集群权限。

您也可以使用具有更新权限的操作角色。有关更多信息,请参阅步骤 4:为 CodePipeline 服务角色创建访问条目中的教程示例。

操作声明

YAML
Name: DeployEKS ActionTypeId: Category: Deploy Owner: AWS Provider: EKS Version: '1' RunOrder: 2 Configuration: ClusterName: my-eks-cluster ManifestFiles: ManifestFile.json OutputArtifacts: [] InputArtifacts: - Name: SourceArtifact
JSON
{ "Name": "DeployECS", "ActionTypeId": { "Category": "Deploy", "Owner": "AWS", "Provider": "EKS", "Version": "1" }, "RunOrder": 2, "Configuration": { "ClusterName": "my-eks-cluster", "ManifestFiles": "ManifestFile.json" }, "OutputArtifacts": [], "InputArtifacts": [ { "Name": "SourceArtifact" } ] },

下列相关资源在您使用此操作的过程中会有所帮助。