如何為 Amazon EKS 建立自訂 Amazon Linux AMI?

2 分的閱讀內容
0

我想建立一個自訂 Amazon Linux Amazon Machine Image (AMI),並將其和 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集一起部署。

簡短說明

若要為 Amazon EKS 建立自訂 Amazon Linux AMI,您必須使用下列項目:

注意: Packer 可使用 AWS CloudFormation 堆疊來運作。此堆疊會執行 m4.large 或 a1.large Amazon Elastic Compute Cloud (Amazon EC2) 執行個體 (視目標 AMI 架構而定)。執行個體是由 Packer 佈建。使用套件和二進位檔佈建執行個體後,Packer 會從執行中的執行個體建立 AMI。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確認您使用的是最新的 AWS CLI 版本

安裝和設定 Packer

1.    從 HashiCorp 網站安裝 Packer

2.    設定您的 AWS 帳戶憑證,以允許 Packer 代表您呼叫 AWS API 作業。您可使用靜態憑證 (私密金鑰和私密存取金鑰)、環境變數、共用憑證檔案或 Amazon EC2 角色。

**注意:**如需為 Packer 設定 AWS 憑證的詳細資訊,請參閱 HashiCorp 網站上的身分驗證IAM 任務或執行個體角色

複製 Amazon EKS AMI 儲存庫

若要將 Amazon EKS AMI 儲存庫複製到您的工作站,請執行下列命令:

$ git clone https://github.com/awslabs/amazon-eks-ami && cd amazon-eks-ami

注意: Packer 是通過一系列以 eks-worker-al2.json 為建置規格的 Makefile 目標來執行。建置過程會使用 amazon-ebs Packer 建置器 (從 HashicCorp 網站取得) 並啟動一個執行個體。Packer Shell 佈建程式 (從 HashicCorp 網站取得) 會在執行個體上執行 install-worker.sh 指令碼,以安裝軟體並執行其他組態任務。然後,Packer 會從執行個體建立 AMI,並在建立 AMI 後終止執行個體。

提供自訂來源 AMI

若要設定自訂來源 AMI,請設定 Packer 組態檔案 eks-worker-al2.json 中的變數 source_ami_idsource_ami_ownersaws_region。例如:

"source_ami_id": "SOURCE_AMI_ID",      # Enter the ID of your source image
"source_ami_owners": "AWS_ACCOUNT_ID", # Enter the account where this image is stored
"aws_region": "AWS_DEFAULT_REGION",    # Enter the AWS Region of the source AMI

若要提供自訂工作者二進位檔,請完成 (選用) 提供您自己的 Kubernetes 二進位檔一節中的步驟。

若要使用 AWS 的預設 Kubernetes 二進位建置映像,請完成使用預設二進位建置 Amazon EKS 工作者 AMI 一節中的步驟。

(選用) 提供您自己的 Kubernetes 二進位檔

當 Packer 佈建執行個體時,預設會從 Amazon EKS 公有 Amazon Simple Storage Service (Amazon S3) 儲存貯體 us-west-2 中的 amazon-eks 下載二進位檔。如需詳細資訊,請參閱 install-worker.sh 檔案

1.    若要檢查預設儲存貯體中的可用二進位檔,請執行下列 AWS CLI 命令

$ aws s3 ls s3://amazon-eks
$ aws s3 ls s3://amazon-eks/kubernetes_version/kubernetes_build_date/bin/linux/arch/

**注意:**使用您的值取代 amazon-ekskubernetes_versionkubernetes_build_datearch

**重要事項:**若要在佈建期間將自己的二進位檔下載到工作節點,您必須鏡像 install-worker.sh 指令碼中使用的 amazon-eks 儲存貯體資料夾結構。

2.    透過您自己的建置程序將二進位檔準備就緒後,請使用 AWS CLI 將二進位檔複製到您自己的 S3 儲存貯體。

以下為自訂 kubelet 二進位檔的範例:

$ aws s3 cp kubelet s3://my-custom-bucket/kubernetes_version/kubernetes_build_date/bin/linux/arch/kubelet

**注意:**用您的值取代 my-custom-bucketamazon-ekskubernetes_versionkubernetes_build_datearch

重要事項:您必須針對特定的 kubernetes_versionkubernetes_build_datearch 組合提供預設 amazon-eks 儲存貯體中列出的所有二進位檔。這些二進位檔必須可透過 AWS Identity and Access Management (IAM) 憑證存取,您可在安裝和設定 HashiCorp Packer 一節中設定這些憑證。

使用自訂二進位檔建置 Amazon EKS 工作者 AMI

要啟動建置程序,請使用 eks-worker-al2.json 中設定的來源 AMI,透過參數叫用製造商。例如:

$ make k8s \
    binary_bucket_name=my-custom-bucket \
    binary_bucket_region=eu-west-1 \
    kubernetes_version=1.14.9 \
    kubernetes_build_date=2020-01-22

**注意:**確認 binary_bucket_namebinary_bucket_regionkubernetes_versionkubernetes_build_date 參數符合您在 Amazon S3 中之二進位檔的路徑。

使用預設二進位檔建置 Amazon EKS 工作者 AMI

1.    若要使用自訂基本 AMI 和預設 (最新) Kubernetes 二進位檔來建置 Amazon EKS 工作者 AMI,請確認已透過正確的基本 AMI 更新 eks-worker-al2.json 檔案。

2.    若要提供 Kubernetes 版本作為參數以觸發建置程序,請執行下列命令:

$ make 1.14  # Build a Amazon EKS Worker AMI for k8s 1.14

**注意:**如需更進階的組態,您必須先修改 amazon-eks-ami AWS GitHub 儲存庫中的組態檔案才能觸發建置。

**提示:**請查看 AWS GitHub,了解使用 Packer 組態建置自訂 AMI 時的常見問題


AWS 官方
AWS 官方已更新 2 年前