本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Step Functions 建立和管理 Amazon EKS 叢集
了解如何將 Step Functions 與 Amazon 整合EKS以管理 Kubernetes 叢集。Step Functions 提供兩種類型的服務整APIs合,可與 Amazon Elastic Kubernetes Service 整合。一個可以讓你使EKSAPIs用 Amazon 創建和管理 Amazon EKS 集群。另一個可讓您使用 Kubernetes 與叢集互動,API並在應用程式工作流程中執行作業。
您可以將 Kubernetes API 整合與使用 Step Functions 建立的 Amazon EKS 叢集、透過 eksctl 工具或 Amazon EKS主控台
若要瞭解如何整合 AWS 服務在 Step Functions 中,請參閱整合 服務和。將參數傳遞給 Step Functions 數API中的服務
優化 Amazon EKS 集成的主要功能
-
支援執行任務 (.sync)整合模式。
-
請求回應整合模式沒有最佳化。
-
不支援使用任務令牌等待回調整合模式。
注意
Step Functions EKS 整合僅支援APIs具有公用端點存取權的 Kubernetes。依預設,EKS叢集API伺服器端點具有公用存取權。如需詳細資訊,請參閱 Amazon EKS使用者指南中的 Amazon EKS 叢集端點存取控制。
如果停止執行,Step Functions 不會自動終止 Amazon EKS 叢集。如果您的狀態機器在 Amazon EKS 叢集終止之前停止,您的叢集可能會無限期地繼續執行,並可能會產生額外費用。為避免這種情況,請確保您建立的任何 Amazon EKS 叢集都已正確終止。如需詳細資訊,請參閱:
-
執行任務 (.sync)在服務集成模式。
注意
「Step Functions 數」中的工作有最大輸入或結果資料大小的配額。當您傳送至其他服務或從其他服務接收資料時,這會將您限制為 256 KB 的資料,以 UTF -8 編碼的字串形式。請參閱 與狀態機器執行相關的配額。
庫伯尼特斯API集成
Step Functions 支援下列列列項目:APIs
RunJob
服eks:runJob
務整合可讓您在 Amazon EKS 叢集上執行任務。該eks:runJob.sync
變體允許您等待工作完成,並選擇性地檢索日誌。
您的 Kubernetes API 伺服器必須授與狀態機器所使用之IAM角色的權限。如需詳細資訊,請參閱許可。
對於執行 Job (.sync
) 模式,工作的狀態是由輪詢決定。Step Functions 最初以每分鐘大約 1 次輪詢的速率進行輪詢。這個速率最終會減慢到大約每 5 分鐘進行 1 次調查。如果您需要更頻繁的輪詢,或需要對輪詢策略進行更多控制,則可以使用eks:call
整合來查詢工作的狀態。
此eks:runJob
整合特定於batch/v1
庫伯尼特工作。如需詳細資訊,請參閱 Kubernetes 文件中的工作eks:call
。您可以使用 Step Functions 來建立輪詢迴圈,如使用 Lambda 和輪詢工作狀態 AWS Batch範例專案中所示。
支援的參數包括:
-
ClusterName
:您要調用的 Amazon EKS 群集的名稱。-
Type
:String
-
必要:是
-
-
CertificateAuthority
:與叢集通訊所需的 Base64 編碼憑證資料。您可以從 Amazon EKS 控制台或使用 Amazon獲得此值EKSDescribeClusterAPI。 -
Type
:String
-
必要:是
-
-
Endpoint
:您的 Kubernetes API 伺URL服器的端點。您可以從 Amazon EKS 控制台或使用 Amazon獲得此值EKSDescribeClusterAPI。 -
Type
:String
-
必要:是
-
-
Namespace
:執行工作的命名空間。如果未提供,則會使default
用命名空間。-
Type
:String
-
必要:否
-
-
Job
:Job 的定義。請參閱 Kubernetes 文件中的工作。 -
Type
:JSON
或String
-
必要:是
-
-
LogOptions
:用於控制日誌的可選檢索的一組選項。只有在使用「執行 Job (.sync)」服務整合模式來等待工作完成時才適用。-
Type
:JSON
-
必要:否
-
記錄會包含在金鑰下的回應中
logs
。工作中可能有多個網繭,每個 Pod 都有多個容器。{ ... "logs": { "pods": { "pod1": { "containers": { "container1": { "log":
<log>
}, ... } }, ... } } -
記錄擷取是以最大的方式執行。如果擷取記錄檔時發生錯誤,則會有
log
欄位error
和cause
。
-
-
LogOptions.RetrieveLogs
:在工作完成後啟用記錄擷取。依預設,不會擷取記錄檔。-
Type
:Boolean
-
必要:否
-
-
LogOptions.RawLogs
:如果設定RawLogs
為 true,則會以原始字串傳回記錄,而不會嘗試將其剖析為JSON。根據預設,記錄會在可能的情況下還原序列化為JSON。在某些情況下,這種解析可能會引入不必要的更改,例如限制包含多個數字的數字的精度。-
Type
:Boolean
-
必要:否
-
-
LogOptions.LogParameters
:Kubernetes API 的讀取記錄檔API支援查詢參數來控制記錄擷取。例如,您可以使用tailLines
或limitBytes
限制擷取記錄檔的大小,並保留在 Step Functions 資料大小配額內。如需詳細資訊,請參閱 Kubernetes API 參考資料的「讀取記錄」一節。 -
Type:
String
到的地圖List of Strings
-
必要:否
-
範例:
"LogParameters": { "tailLines": [ "6" ] }
-
下列範例包含執行工作、等待工作完成,然後擷取工作記錄的Task
狀態:
{
"StartAt": "Run a job on EKS",
"States": {
"Run a job on EKS": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:runJob.sync",
"Parameters": {
"ClusterName": "MyCluster",
"CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
"Endpoint": "https://AKIAIOSFODNN7EXAMPLE.yl4.us-east-1.eks.amazonaws.com",
"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-2000",
"image": "perl",
"command": [ "perl" ],
"args": [
"-Mbignum=bpi",
"-wle",
"print bpi(2000)"
]
}
],
"restartPolicy": "Never"
}
}
}
}
},
"End": true
}
}
}
Call
eks:call
服務整合可讓您使用 Kubernetes 透過 Kubernetes 端點讀API取和寫入 Kubernetes 資源物件。API
您的 Kubernetes API 伺服器必須授與狀態機器所使用之IAM角色的權限。如需詳細資訊,請參閱許可。
如需有關可用作業的詳細資訊,請參閱 Kubernetes API
支援的參數Call
包括:
-
ClusterName
:您要調用的 Amazon EKS 群集的名稱。-
Type
:String -
必要:是
-
-
CertificateAuthority
:與叢集通訊所需的 Base64 編碼憑證資料。您可以從 Amazon EKS 控制台或使用 Amazon獲得此值EKSDescribeClusterAPI。 -
Type
:String
-
必要:是
-
-
Endpoint
:您的 Kubernetes API 伺URL服器的端點。您可以在 Amazon EKS 控制台上或通過使用 AmazonEKS '找到這個值 DescribeCluster API。 -
Type
:String
-
必要:是
-
-
Method
:您的請求的HTTP方法。下列其中一項:GET
、POST
、PUT
、DELETE
、HEAD
或PATCH
。-
Type
:String
-
必要:是
-
-
Path
:庫伯尼特RESTAPI人作業的HTTP路徑。-
Type
:String
-
必要:是
-
-
QueryParameters
:Kubernetes REST API 作業的HTTP查詢參數。-
Type:
String
到的地圖List of Strings
-
必要:否
-
範例:
"QueryParameters": { "labelSelector": [ "job-name=example-job" ] }
-
-
RequestBody
:Kubernetes REST API 作業的HTTP郵件本文。-
Type
:JSON
或String
-
必要:否
-
以下包含用eks:call
來列出屬於工作之網繭的Task
狀態example-job
。
{
"StartAt": "Call EKS",
"States": {
"Call EKS": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:call",
"Parameters": {
"ClusterName": "MyCluster",
"CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
"Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
"Method": "GET",
"Path": "/api/v1/namespaces/default/pods",
"QueryParameters": {
"labelSelector": [
"job-name=example-job"
]
}
},
"End": true
}
}
}
以下內容包含用eks:call
來刪除工作的Task
狀態example-job
,並設定以確propagationPolicy
保工作的網繭也會遭到刪除。
{
"StartAt": "Call EKS",
"States": {
"Call EKS": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:call",
"Parameters": {
"ClusterName": "MyCluster",
"CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
"Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
"Method": "DELETE",
"Path": "/apis/batch/v1/namespaces/default/jobs/example-job",
"QueryParameters": {
"propagationPolicy": [
"Foreground"
]
}
},
"End": true
}
}
}
支持 Amazon EKS APIs
支持的 Amazon EKS APIs 和語法包括:
-
-
使用
eks:createCluster
服務整合建立 Amazon EKS 叢集時,該IAM角色會以管理員身分新增至 Kubernetes RBAC 授權表格 (具有系統:主控權限)。一開始,只有該IAM實體可以呼叫 Kubernetes API 伺服器。如需詳細資訊,請參閱:Amazon EKS 使用服務連結角色,其中包含 Amazon 代表您呼叫其他服務所EKS需的許可。如果這些服務連結角色不存在於您的帳戶中,您必須將
iam:CreateServiceLinkedRole
權限新增至 Step Functions 使用的IAM角色。如需詳細資訊,請參閱 Amazon 使用EKS者指南中的使用服務連結角色。Step Functions 使用的IAM角色必須具有將叢集IAM角色傳遞給 Amazon 的
iam:PassRole
許可EKS。如需詳細資訊,請參閱 Amazon EKS使用者指南中的 Amazon EKS 叢集IAM角色。
-
-
Amazon EKS 使用服務連結角色,其中包含 Amazon 代表您呼叫其他服務所EKS需的許可。如果這些服務連結角色不存在於您的帳戶中,您必須將
iam:CreateServiceLinkedRole
權限新增至 Step Functions 使用的IAM角色。如需詳細資訊,請參閱 Amazon 使用EKS者指南中的使用服務連結角色。Fargate EKS 上的 Amazon 網站可能無法在所有地區提供。如需區域可用性的相關資訊,請參閱 Amazon EKS 使用者指南中關於 Fargate 的章節。
Step Functions 使用的IAM角色必須具有將網繭執行IAM角色傳遞給 Amazon 的
iam:PassRole
權限EKS。如需詳細資訊,請參閱 Amazon EKS 使用者指南中的網繭執行角色。
-
-
Amazon EKS 使用服務連結角色,其中包含 Amazon 代表您呼叫其他服務所EKS需的許可。如果這些服務連結角色不存在於您的帳戶中,您必須將
iam:CreateServiceLinkedRole
權限新增至 Step Functions 使用的IAM角色。如需詳細資訊,請參閱 Amazon 使用EKS者指南中的使用服務連結角色。Step Functions 使用的IAM角色必須具有將節點IAM角色傳遞給 Amazon 的
iam:PassRole
許可EKS。如需詳細資訊,請參閱 Amazon 使用EKS者指南中的使用服務連結角色。
以下內容包括Task
建立 Amazon EKS 叢集的項目。
{
"StartAt": "CreateCluster.sync",
"States": {
"CreateCluster.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:createCluster.sync",
"Parameters": {
"Name": "MyCluster",
"ResourcesVpcConfig": {
"SubnetIds": [
"subnet-053e7c47012341234",
"subnet-027cfea4b12341234"
]
},
"RoleArn": "arn:aws:iam::123456789012:role/MyEKSClusterRole"
},
"End": true
}
}
}
以下內容包括刪除 Amazon EKS 叢集的Task
狀態。
{
"StartAt": "DeleteCluster.sync",
"States": {
"DeleteCluster.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteCluster.sync",
"Parameters": {
"Name": "MyCluster"
},
"End": true
}
}
}
以下內容包括建Task
立 Fargate 設定檔的狀態。
{
"StartAt": "CreateFargateProfile.sync",
"States": {
"CreateFargateProfile.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:createFargateProfile.sync",
"Parameters": {
"ClusterName": "MyCluster",
"FargateProfileName": "MyFargateProfile",
"PodExecutionRoleArn": "arn:aws:iam::123456789012:role/MyFargatePodExecutionRole",
"Selectors": [{
"Namespace": "my-namespace",
"Labels": { "my-label": "my-value" }
}]
},
"End": true
}
}
}
以下內容包括刪除 Fargate 設定檔的Task
狀態。
{
"StartAt": "DeleteFargateProfile.sync",
"States": {
"DeleteFargateProfile.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteFargateProfile.sync",
"Parameters": {
"ClusterName": "MyCluster",
"FargateProfileName": "MyFargateProfile"
},
"End": true
}
}
}
以下內容包括建Task
立節點群組的狀態。
{
"StartAt": "CreateNodegroup.sync",
"States": {
"CreateNodegroup.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:createNodegroup.sync",
"Parameters": {
"ClusterName": "MyCluster",
"NodegroupName": "MyNodegroup",
"NodeRole": "arn:aws:iam::123456789012:role/MyNodeInstanceRole",
"Subnets": ["subnet-09fb51df01234", "subnet-027cfea4b1234"]
},
"End": true
}
}
}
以下內容包括刪除節點群組的Task
狀態。
{
"StartAt": "DeleteNodegroup.sync",
"States": {
"DeleteNodegroup.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteNodegroup.sync",
"Parameters": {
"ClusterName": "MyCluster",
"NodegroupName": "MyNodegroup"
},
"End": true
}
}
}
許可
使用eks:createCluster
服務整合建立 Amazon EKS 叢集時,該IAM角色會以管理員身分新增至 Kubernetes RBAC 授權表格中,並具有許可。system:masters
一開始,只有該IAM實體可以呼叫 Kubernetes API 伺服器。例如,您將無法使用 kubectl 與 Ku bernetes API 伺服器互動,除非您承擔與 Step Functions 狀態機器相同的角色,或設定 Kubernetes 授與其他實體的權限。IAM如需詳細資訊,請參閱 Amazon EKS 使用者指南中的管理叢集的使用者或IAM角色。
您可以將其他IAM實體 (例如使用者或角色) 新增權限,方法是將這些實體新增至 kube-system 命名空aws-auth
ConfigMap
間中的。如果您要從 Step Functions 建立叢集,請使用eks:call
服務整合。
以下內容包括建Task
立aws-auth
ConfigMap
並授與使用者arn:aws:iam::123456789012:user/my-user
和IAM角色system:masters
權限的狀態arn:aws:iam::123456789012:role/my-role
。
{
"StartAt": "Add authorized user",
"States": {
"Add authorized user": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:call",
"Parameters": {
"ClusterName": "MyCluster",
"CertificateAuthority": "LS0tLS1CRUd...UtLS0tLQo=",
"Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
"Method": "POST",
"Path": "/api/v1/namespaces/kube-system/configmaps",
"RequestBody": {
"apiVersion": "v1",
"kind": "ConfigMap",
"metadata": {
"name": "aws-auth",
"namespace": "kube-system"
},
"data": {
"mapUsers": "[{ \"userarn\": \"arn:aws:iam::123456789012:user/my-user\", \"username\": \"my-user\", \"groups\": [ \"system:masters\" ] } ]",
"mapRoles": "[{ \"rolearn\": \"arn:aws:iam::123456789012:role/my-role\", \"username\": \"my-role\", \"groups\": [ \"system:masters\" ] } ]"
}
}
},
"End": true
}
}
注意
您可能會看到以包含路徑 /服務IAM角色/ 的格式顯示的角色,ARN例如。arn:aws:iam::123456789012:role/
在service-role
/my-roleaws-auth
中列出角色時,不應包含此服務角色路徑 Token。
第一次建立叢集時,aws-auth
ConfigMap
將不存在,但如果您建立 Fargate 設定檔,則會自動新增叢集。您可以擷取的目前值aws-auth
、新增其他權限以及PUT
新版本。通常在 Fargate 配置文件aws-auth
之前創建更容易。
如果您的叢集是在「Step Functions」之外建立的,您可以設定 kubectl 與您的 Kubernetes 伺服器通訊。API然後,使用創建一個新的kubectl apply -f aws-auth.yaml
或aws-auth
ConfigMap
使用編輯已經存在的kubectl edit -n kube-system configmap/aws-auth
。如需詳細資訊,請參閱:
-
EKS在 Amazon EKS用戶指南中為 Amazon 創建庫貝配置。
-
在 Amazon EKS 使用者指南中管理叢集的使用者或IAM角色。
如果您的IAM角色在 Kubernetes 中沒有足夠的權限,eks:call
或eks:runJob
服務整合將失敗,並出現下列錯誤:
Error:
EKS.401
Cause:
{
"ResponseBody": {
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "Unauthorized",
"reason": "Unauthorized",
"code": 401
},
"StatusCode": 401,
"StatusText": "Unauthorized"
}
IAM致電 Amazon 政策 EKS
下面的示例模板顯示如何 AWS Step Functions 根據狀態機器定義中的資源產生IAM策略。如需詳細資訊,請參閱 Step Functions 式如何為整合式服務產生IAM原則 和 探索 Step Functions 中的服務整合模式。
CreateCluster
資源
{
"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:444455556666:cluster/*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": [
"arn:aws:iam::444455556666:role/StepFunctionsSample-EKSClusterManag-EKSServiceRole-ANPAJ2UCCR6DPCEXAMPLE"
],
"Condition": {
"StringEquals": {
"iam:PassedToService": "eks.amazonaws.com"
}
}
}
]
}
CreateNodeGroup
資源
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeSubnets",
"eks:CreateNodegroup"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"eks:DescribeNodegroup",
"eks:DeleteNodegroup"
],
"Resource": "arn:aws:eks:sa-east-1:444455556666:nodegroup/*"
},
{
"Effect": "Allow",
"Action": [
"iam:GetRole",
"iam:ListAttachedRolePolicies"
],
"Resource": "arn:aws:iam::444455556666:role/*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": [
"arn:aws:iam::444455556666:role/StepFunctionsSample-EKSClusterMan-NodeInstanceRole-ANPAJ2UCCR6DPCEXAMPLE"
],
"Condition": {
"StringEquals": {
"iam:PassedToService": "eks.amazonaws.com"
}
}
}
]
}
DeleteCluster
資源
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:DeleteCluster",
"eks:DescribeCluster"
],
"Resource": [
"arn:aws:eks:sa-east-1:444455556666:cluster/ExampleCluster"
]
}
]
}
DeleteNodegroup
資源
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:DeleteNodegroup",
"eks:DescribeNodegroup"
],
"Resource": [
"arn:aws:eks:sa-east-1:444455556666:nodegroup/ExampleCluster/ExampleNodegroup/*"
]
}
]
}
如需將 Amazon EKS 搭配 Step Functions 搭配使用的詳細資訊,請參閱使用 Step Functions 建立和管理 Amazon EKS 叢集。