本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
本教學課程可協助您在 CodePipeline 中建立部署動作,將您的程式碼部署到您在 Amazon EKS 中設定的叢集。
EKS 動作支援公有和私有 EKS 叢集。私有叢集是 EKS 建議的類型;不過,支援這兩種類型。
注意
在主控台中建立管道時,CodePipeline 將使用 S3 成品儲存貯體做為成品。(這與用於 S3 來源動作的 儲存貯體不同。) 如果 S3 成品儲存貯體位於與管道帳戶不同的帳戶中,請確定 S3 成品儲存貯體由 擁有 AWS 帳戶 ,且安全且可靠。
注意
此動作使用 CodePipeline 受管 CodeBuild 運算在建置環境中執行命令。執行命令動作會產生個別費用 AWS CodeBuild。
注意
部署動作僅適用於 V2 EKS
類型管道。
先決條件
您必須先有幾個資源,才能使用此教學來建立 CD 管道。以下是在開始使用前需準備的事項:
注意
所有這些資源都應在相同區域內建立 AWS 。
-
來源控制儲存庫 (本教學課程使用 GitHub),您將在其中新增範例
deployment.yaml
檔案。 -
您必須使用現有的 CodePipeline 服務角色,使用以下動作的許可進行更新步驟 3:更新 IAM 中的 CodePipeline 服務角色政策。所需的許可取決於您建立的叢集類型。如需詳細資訊,請參閱服務角色政策許可。
-
您已推送至 ECR 或映像儲存庫的正常運作映像和儲存庫標籤。
滿足這些先決條件之後,即可繼續教學並建立 CD 管道。
步驟 1:(選用) 在 Amazon EKS 中建立叢集
您可以選擇使用公有或私有端點建立 EKS 叢集。
在下列步驟中,您會在 EKS 中建立公有或私有叢集。如果您已建立叢集,則此步驟為選用。
在 Amazon EKS 中建立公有叢集
在此步驟中,您會在 EKS 中建立叢集。
建立公有叢集
-
開啟 EKS 主控台,然後選擇建立叢集。
-
在名稱中,為您的叢集命名。選擇 Next (下一步)。
-
選擇 Create (建立)。
在 Amazon EKS 中建立私有叢集
如果您選擇使用私有端點建立叢集,請務必僅連接私有子網路,並確保其具有網際網路連線。
遵循接下來的五個子步驟,以使用私有端點建立叢集。
在主控台中建立 VPC
-
開啟 VPC 主控台,然後選擇建立 VPC。
-
在 VPC 設定下,選擇 VPC 和更多。
-
選擇 以建立一個公有和 4 個私有子網路。選擇建立 VPC。
-
在子網路頁面上,選擇私有。
判斷 VPC 中的私有子網路
-
導覽至您的 VPC,然後選擇 VPC ID 以開啟 VPC 詳細資訊頁面。
-
在 VPC 詳細資訊頁面上,選擇資源映射索引標籤。
-
檢視圖表並記下您的私有子網路。子網路會顯示標籤,指出公有或私有狀態,且每個子網路都會對應至路由表。
請注意,私有叢集將擁有所有私有子網路。
-
建立公有子網路以託管 NAT 閘道。您一次只能連接一個網際網路閘道至 VPC。
在公有子網路中建立 NAT 閘道
-
在公有子網路中,建立 NAT 閘道。導覽至 VPC 主控台,然後選擇網際網路閘道。選擇建立網際網路閘道。
-
在名稱中,輸入網際網路閘道的名稱。選擇建立網際網路閘道。
更新私有子網路的路由表,將流量導向至 NAT 閘道。
將 NAT 閘道新增至私有子網路的路由表
-
導覽至 VPC 主控台,然後選擇子網路。
-
對於每個私有子網路,選擇它,然後在詳細資訊頁面上選擇該子網路的路由表,選擇編輯路由表。
-
更新私有子網路的路由表,將網際網路流量導向 NAT 閘道。選擇 Add route (新增路由)。從要新增的選項中選擇 NAT 閘道。選擇您建立的網際網路閘道。
-
針對公有子網路,建立自訂路由表。確認公有子網路的網路存取控制清單 (ACL) 允許來自私有子網路的傳入流量。
-
選擇 Save changes (儲存變更)。
在此步驟中,您會在 EKS 中建立叢集。
建立私有叢集
-
開啟 EKS 主控台,然後選擇建立叢集。
-
在名稱中,為您的叢集命名。選擇 Next (下一步)。
-
指定您的 VPC 和其他組態資訊。選擇 Create (建立)。
EKS 叢集可以是公有或私有叢集。此步驟適用於只有私有端點的叢集。如果您的叢集是私有的。
步驟 2:在 Amazon EKS 中設定私有叢集
只有在您已建立私有叢集時,此步驟才適用。此步驟適用於只有私有端點的叢集。
設定叢集
-
只在聯網索引標籤下的 EKS 叢集中連接私有子網路。在 下的判斷 VPC 中的私有子網路區段中連接擷取的私有子網路步驟 1:(選用) 在 Amazon EKS 中建立叢集。
-
請確定私有子網路具有網際網路的存取權,因為 CodePipeline 會儲存並從管道的 S3 成品儲存貯體擷取成品。
步驟 3:更新 IAM 中的 CodePipeline 服務角色政策
在此步驟中,您將更新現有的 CodePipeline 服務角色,例如 cp-service-role
,具有 CodePipeline 與叢集連線所需的許可。如果您沒有現有角色,請建立新的角色。
使用下列步驟更新您的 CodePipeline 服務角色。
更新您的 CodePipeline 服務角色政策
-
開啟 IAM 主控台,網址為 https://console.aws.amazon.com/iam/
://www.)。 -
從主控台儀表板,選擇 Roles (角色)。
-
查詢 CodePipeline 服務角色,例如
cp-service-role
。 -
新增內嵌政策。
-
在政策編輯器中,輸入以下內容。
-
針對公有叢集,新增下列許可。
{ "Statement": [ { "Sid": "EksClusterPolicy", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:us-east-1:
ACCOUNT-ID
:cluster/my-cluster" }, { "Sid": "EksVpcClusterPolicy", "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs" ], "Resource": [ "*" ] } ], "Version": "2012-10-17" } -
針對私有叢集,新增下列許可。如果適用,私有叢集將需要 VPC 的額外許可。
{ "Statement": [ { "Sid": "EksClusterPolicy", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:us-east-1:
ACCOUNT-ID
:cluster/my-cluster" }, { "Sid": "EksVpcClusterPolicy", "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": "*", "Condition": { "StringEqualsIfExists": { "ec2:Subnet": [ "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-03ebd65daeEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0e377f6036EXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE" ] } } }, { "Effect": "Allow", "Action": "ec2:CreateNetworkInterfacePermission", "Resource": "*", "Condition": { "ArnEquals": { "ec2:Subnet": [ "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-03ebd65daeEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0e377f6036EXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE" ] } } }, { "Effect": "Allow", "Action": "ec2:DeleteNetworkInterface", "Resource": "*", "Condition": { "StringEqualsIfExists": { "ec2:Subnet": [ "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-03ebd65daeEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0e377f6036EXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE" ] } } } ], "Version": "2012-10-17" }
-
-
選擇更新政策。
步驟 4:建立 CodePipeline 服務角色的存取項目
在此步驟中,您會在叢集上建立存取項目,以新增您在步驟 3 中更新的 CodePipeline 服務角色,以及受管存取政策。
-
開啟 EKS 主控台並導覽至您的叢集。
-
選擇存取索引標籤。
-
在 IAM 存取項目下,選擇建立存取項目。
-
在 IAM 主體 ARN 中,輸入您剛為動作更新的角色,例如
cp-service-role
。選擇 Next (下一步)。 -
在步驟 2:新增存取政策頁面的政策名稱中,選擇存取的受管政策,例如
AmazonEKSClusterAdminPolicy
。選擇 Add Policy (新增政策)。選擇 Next (下一步)。注意
這是 CodePipeline 動作用來與 Kubernetes 交談的政策。最佳實務是,若要以最低權限縮減政策中的許可範圍,而非管理政策,請改為連接自訂政策。
-
在檢閱頁面上,選擇建立。
步驟 5:建立來源儲存庫並新增helm chart
組態檔案
在此步驟中,您會建立適合您動作的組態檔案 (Kubernetes 資訊清單檔案或 Helm Chart),並將組態檔案存放在來源儲存庫中。為您的組態使用適當的檔案。如需詳細資訊,請參閱 https://kubernetes.io/docs/reference/kubectl/quick-reference/
-
對於 Kubernetes,請使用資訊清單檔案。
-
對於 Helm,請使用 Helm Chart。
-
建立或使用現有的 GitHub 儲存庫。
-
在儲存庫中為您的 Helm Chart 檔案建立新的結構,如以下範例所示。
mychart |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | |-- ingress.yaml | `-- service.yaml `-- values.yaml
-
將 檔案新增至儲存庫的根層級。
步驟 6:建立管道
使用 CodePipeline 精靈建立管道階段並連接來源儲存庫。
建立管道
前往 https://console.aws.amazon.com/codepipeline/
開啟 CodePipeline 主控台。 -
在 Welcome (歡迎) 頁面、Getting started (入門) 頁面、或者 Pipelines (管道) 頁面上,選擇 Create pipeline (建立管道)。
-
在步驟 1:選擇建立選項頁面的建立選項下,選擇建置自訂管道選項。選擇 Next (下一步)。
-
在步驟 2:選擇管道設定中,在管道名稱中輸入
MyEKSPipeline
。 -
CodePipeline 提供 V1 和 V2 類型的管道,這些管道在特性和價格方面有所不同。V2 類型是您可以在 主控台中選擇的唯一類型。如需詳細資訊,請參閱管道類型。如需 CodePipeline 定價的資訊,請參閱 定價
。 -
在服務角色中,選擇您在步驟 3 中更新的服務角色。
-
將 Advanced settings (進階設定) 下的設定保留為預設值,然後選擇 Next (下一步)。
-
在步驟 3:新增來源階段頁面上,針對來源提供者,選擇建立與 GitHub 儲存庫的連線。
-
在步驟 4:新增建置階段頁面上,選擇略過。
-
在步驟 5:新增部署階段頁面上,選擇 Amazon EKS。
-
在部署組態類型下,選擇 Helm。
-
在 Helm Chart 位置中,輸入發行名稱,例如
my-release
。針對 Helm Chart 位置,輸入 helm Chart 檔案的路徑,例如mychart
。 -
選擇 Next (下一步)。
-
-
在 Step 6: Review (步驟 6:檢閱) 頁面上,檢閱您的管道組態,然後選擇 Create pipeline (建立管道) 來建立管道。
-
管道成功執行後,請選擇檢視詳細資訊以檢視動作上的日誌,以檢視動作輸出。