使用节点组创建和管理一个 Amazon EKS 集群 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用节点组创建和管理一个 Amazon EKS 集群

此示例项目演示了如何使用 Step Functions 和 Amazon Elastic Kubernetes Service 创建带有节点组的EKS亚马逊集群,在EKS亚马逊上运行作业,然后检查输出。完成后,它会移除节点组和 Amazon EKS 集群。

有关 Step Functions 和 Step Functions 服务集成的更多信息,请参阅以下内容:

注意

此示例项目可能会产生费用。

对于新品 Amazon 用户,可免费使用套餐。在此套餐中,低于某种使用水平的服务是免费的。有关 Amazon 费用和免费套餐,请参阅 Amazon EKS 定价

第 1 步:创建状态机

  1. 打开 Step Functions 控制台,然后选择创建状态机

  2. Manage an EKS cluster在搜索框中键入,然后从返回的搜索结果中选择 “管理EKS集群”。

  3. 选择下一步以继续。

  4. 选择 “运行演示” 以创建只读和 ready-to-deploy 工作流程,或者选择 “在其上构建” 以创建可编辑的状态机定义,您可以在此基础上构建并稍后部署。

    该示例项目部署了以下资源:

    • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的 Amazon Elastic Kubernetes Service cluster

    • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的 Amazon SNS topic

    • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的 Amazon Step Functions 状态机

    • 相关 Amazon Identity and Access Management (IAM) 角色

    下图显示了 “管理EKS集群” 示例项目的工作流程图:

    管理EKS集群示例项目的工作流程图。
  5. 选择使用模板继续进行选择。

后续步骤取决于您之前的选择:

  1. 运行演示 — 您可以先查看状态机,然后再使用部署的资源创建只读项目 Amazon CloudFormation 给你的 Amazon Web Services 账户.

    您可以查看状态机定义,准备就绪后,选择部署并运行以部署项目并创建资源。

    部署最多可能需要 10 分钟才能创建资源和权限。您可以使用堆栈 ID 链接来监控进度 Amazon CloudFormation.

    部署完成后,您应该会在控制台中看到您的新状态机。

  2. 在此基础上再接再厉 — 您可以查看和编辑工作流程定义。在尝试运行自定义工作流程之前,您可能需要为示例项目中的占位符设置值。

注意

部署到您的账户的服务可能会收取标准费用。

第 2 步:运行状态机

  1. 状态机页面上,选择您的示例项目。

  2. 在示例项目页面上,选择启动执行

  3. 启动执行对话框中,执行以下操作:

    1. (可选)输入自定义执行名称以覆盖生成的默认执行名称。

      非ASCII姓名和日志

      Step Functions 接受状态机、执行、活动和包含非ASCII字符的标签的名称。由于此类字符不适用于亚马逊 CloudWatch,因此我们建议您仅使用ASCII字符,以便您可以跟踪中的指标 CloudWatch。

    2. (可选)在输入框中,将输入值输入为JSON。如果您正在运行演示,则可以跳过此步骤。

    3. 选择启动执行

    Step Functions 控制台将引导您进入执行详情页面,您可以在图表视图中选择状态以浏览步骤详细信息窗格中的相关信息。

示例状态机代码

此示例项目中的状态机EKS通过创建 Amazon EKS 集群和节点组与 Amazon 集成,并使用SNS主题返回结果。

浏览此示例状态机,了解 Step Functions 如何管理亚马逊EKS集群和节点组。

有关如何做的更多信息 Amazon Step Functions 可以控制其他 Amazon 服务,请参阅将服务与 Step Functions 集成

{ "Comment": "An example of the Amazon States Language for running Amazon EKS Cluster", "StartAt": "Create an EKS cluster", "States": { "Create an EKS cluster": { "Type": "Task", "Resource": "arn:aws:states:::eks:createCluster.sync", "Parameters": { "Name": "ExampleCluster", "ResourcesVpcConfig": { "SubnetIds": [ "subnet-0aacf887d9f00e6a7", "subnet-0e5fc41e7507194ab" ] }, "RoleArn": "arn:aws:iam::111122223333:role/StepFunctionsSample-EKSClusterManag-EKSServiceRole-ANPAJ2UCCR6DPCEXAMPLE" }, "Retry": [{ "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 30, "MaxAttempts": 2, "BackoffRate": 2 }], "ResultPath": "$.eks", "Next": "Create a node group" }, "Create a node group": { "Type": "Task", "Resource": "arn:aws:states:::eks:createNodegroup.sync", "Parameters": { "ClusterName": "ExampleCluster", "NodegroupName": "ExampleNodegroup", "NodeRole": "arn:aws:iam::111122223333:role/StepFunctionsSample-EKSClusterMan-NodeInstanceRole-ANPAJ2UCCR6DPCEXAMPLE", "Subnets": [ "subnet-0aacf887d9f00e6a7", "subnet-0e5fc41e7507194ab"] }, "Retry": [{ "ErrorEquals": [ "States.ALL" ], "IntervalSeconds": 30, "MaxAttempts": 2, "BackoffRate": 2 }], "ResultPath": "$.nodegroup", "Next": "Run a job on EKS" }, "Run a job on EKS": { "Type": "Task", "Resource": "arn:aws:states:::eks:runJob.sync", "Parameters": { "ClusterName": "ExampleCluster", "CertificateAuthority.$": "$.eks.Cluster.CertificateAuthority.Data", "Endpoint.$": "$.eks.Cluster.Endpoint", "LogOptions": { "RetrieveLogs": true }, "Job": { "apiVersion": "batch/v1", "kind": "Job", "metadata": { "name": "example-job" }, "spec": { "backoffLimit": 0, "template": { "metadata": { "name": "example-job" }, "spec": { "containers": [ { "name": "pi-20", "image": "perl", "command": [ "perl" ], "args": [ "-Mbignum=bpi", "-wle", "print '{ ' . '\"pi\": '. bpi(20) . ' }';" ] } ], "restartPolicy": "Never" } } } } }, "ResultSelector": { "status.$": "$.status", "logs.$": "$.logs..pi" }, "ResultPath": "$.RunJobResult", "Next": "Examine output" }, "Examine output": { "Type": "Choice", "Choices": [ { "And": [ { "Variable": "$.RunJobResult.logs[0]", "NumericGreaterThan": 3.141 }, { "Variable": "$.RunJobResult.logs[0]", "NumericLessThan": 3.142 } ], "Next": "Send expected result" } ], "Default": "Send unexpected result" }, "Send expected result": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:sa-east-1:111122223333:StepFunctionsSample-EKSClusterManagement123456789012-SNSTopic-ANPAJ2UCCR6DPCEXAMPLE", "Message": { "Input.$": "States.Format('Saw expected value for pi: {}', $.RunJobResult.logs[0])" } }, "ResultPath": "$.SNSResult", "Next": "Delete job" }, "Send unexpected result": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:sa-east-1:111122223333:StepFunctionsSample-EKSClusterManagement123456789012-SNSTopic-ANPAJ2UCCR6DPCEXAMPLE", "Message": { "Input.$": "States.Format('Saw unexpected value for pi: {}', $.RunJobResult.logs[0])" } }, "ResultPath": "$.SNSResult", "Next": "Delete job" }, "Delete job": { "Type": "Task", "Resource": "arn:aws:states:::eks:call", "Parameters": { "ClusterName": "ExampleCluster", "CertificateAuthority.$": "$.eks.Cluster.CertificateAuthority.Data", "Endpoint.$": "$.eks.Cluster.Endpoint", "Method": "DELETE", "Path": "/apis/batch/v1/namespaces/default/jobs/example-job" }, "ResultSelector": { "status.$": "$.ResponseBody.status" }, "ResultPath": "$.DeleteJobResult", "Next": "Delete node group" }, "Delete node group": { "Type": "Task", "Resource": "arn:aws:states:::eks:deleteNodegroup.sync", "Parameters": { "ClusterName": "ExampleCluster", "NodegroupName": "ExampleNodegroup" }, "Next": "Delete cluster" }, "Delete cluster": { "Type": "Task", "Resource": "arn:aws:states:::eks:deleteCluster.sync", "Parameters": { "Name": "ExampleCluster" }, "End": true } } }

有关在将 Step Functions 与其他功能一起使用IAM时如何进行配置的信息 Amazon 服务,请参阅Step Functions 如何为集成服务生成IAM策略

IAM示例

这些例子 Amazon Identity and Access Management (IAM) 示例项目生成的策略包括执行状态机和相关资源所需的最低权限。我们建议您在IAM策略中仅包含必要的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:CreateCluster" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:DeleteCluster" ], "Resource": "arn:aws:eks:sa-east-1:111122223333:cluster/*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::111122223333:role/StepFunctionsSample-EKSClusterManag-EKSServiceRole-ANPAJ2UCCR6DPCEXAMPLE" ], "Condition": { "StringEquals": { "iam:PassedToService": "eks.amazonaws.com" } } } ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:sa-east-1:111122223333:StepFunctionsSample-EKSClusterManagement123456789012-SNSTopic-ANPAJ2UCCR6DPCEXAMPLE" ] } ] }

有关在将 Step Functions 与其他功能一起使用IAM时如何进行配置的信息 Amazon 服务,请参阅Step Functions 如何为集成服务生成IAM策略