如何為 Amazon EKS 建立自訂 Amazon Linux AMI?
我想建立一個自訂 Amazon Linux Amazon Machine Image (AMI),並將其和 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集一起部署。
簡短說明
若要為 Amazon EKS 建立自訂 Amazon Linux AMI,您必須使用下列項目:
- HashiCorp Packer (從 HashiCorp 網站取得)
- 包含 AWS GitHub 上 Amazon EKS 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_id、source_ami_owners 和 aws_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-eks、kubernetes_version、kubernetes_build_date 和 arch。
**重要事項:**若要在佈建期間將自己的二進位檔下載到工作節點,您必須鏡像 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-bucket、amazon-eks、kubernetes_version、kubernetes_build_date 和 arch。
重要事項:您必須針對特定的 kubernetes_version、kubernetes_build_date 和 arch 組合提供預設 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_name、binary_bucket_region、kubernetes_version 和 kubernetes_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 時的常見問題。
相關內容
- 已提問 9 個月前lg...
- 已提問 3 個月前lg...
- 已提問 9 個月前lg...
- 已提問 6 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 10 個月前