Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
如何為 Amazon EKS 建立自訂 Amazon Linux AMI?
我想建立一個自訂 Amazon Linux Amazon Machine Image (AMI),並將其和 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集一起部署。
解決方法
先決條件
- 在本端電腦上或 Amazon Linux Amazon Elastic Compute Cloud (EC2) 執行個體上安裝封裝程式。如需說明,請參閱 Hashicorp 網站上的安裝封裝程式。
- 然後,安裝 Amazon 外掛程式,以與 Hashicorp 封裝程式搭配使用,在 AWS 上建立自訂映像。如需說明,請參閱 Hashicorp 網站上的安裝。
- 請確定是否已安裝 make 和 git:
sudo yum install make -y sudo yum install git -y
為 Amazon EKS 建立自訂 Amazon Linux AMI
請完成下列步驟:
-
若要複製 amazon-eks-ami AWS 實驗室儲存庫,請執行下列命令:
sudo git clone https://github.com/awslabs/amazon-eks-ami && cd amazon-eks-ami
如需詳細資訊,請參閱 GitHub 網站上的 amazon-eks-ami。
-
若要在 amazon-eks-ami 目錄中建立名稱為 variables-custom.json 的新檔案,請執行下列命令:
sudo vi variables-custom.json
**注意:**variables-custom.json 覆寫的預設變數檔案位於 GitHub 網站上的 variables-default.json 檔案中。如果您使用 Amazon Linux 2 (AL2),則 variables-default.json 的檔案路徑為 /amazon-eks-ami/templates/al2/variables-default.json。如果您使用 Amazon Linux 2023 (AL2023),則檔案路徑為 /amazon-eks-ami/templates/al2023/variables-default.json。
-
在 variables-custom.json 檔案中,新增值:
{ "aws_region": "AWS_Region", "source_ami_filter_name": "AMI_Name", "source_ami_id": "Source_AMI_ID", "source_ami_owners": "AMI_Owner_Account_ID", "temporary_security_group_source_cidrs": "Source_Machine_IP", #example: local_machine_IP /32 or NAT_GW_IP /32 or EC2_PublicIP /32 "launch_block_device_mappings_volume_size": "Integer", #Root volume size of the instance to be launched by packer "iam_instance_profile": "IAM_Instance_Profile_Name" #Optional }
您使用現有 AMI 作為來源建立 EKS 的自訂 AMI 時,請設定 launch_block_device_mappings_volume_size 值。該值必須等於或大於 AMI 快照磁碟區大小。在 variables-default.json 檔案中的預設值為 "4"。
如果您在封裝程式中使用 iam_instance_profile 選項,則必須提供您要連接的 IAM 角色的執行個體設定檔名稱。請勿提供 IAM 角色 ARN 或執行個體設定檔 ARN。
如果未提供 temporary_security_group_source_cidrs 參數,則封裝程式會開啟所有 IP 位址 (0.0.0.0/0) 的 SSH 連接埠。若要預防安全風險,最佳實務是在 temporary_security_group_source_cidrs 參數中指定來源機器的 IP 位址。 -
若要啟動自訂 AMI 建立程序,請執行下列命令:
sudo make PACKER_OPTIONAL_K8S_VARIABLE_FILE=variables-custom.json k8s=1.29 os_distro=al2 arch=x86_64 -d
或者,若要開啟封裝程式日誌,請執行下列命令:
sudo PACKER_LOG_PATH=packer_logs.txt`TZ=":Asia/Kolkata" date +%Y-%m-%d_%H%M` PACKER_LOG=1 make PACKER_OPTIONAL_K8S_VARIABLE_FILE=variables-custom.json k8s=1.29 os_distro=al2 arch=x86_64 -d
**注意:**若要設定系統的時區,請將 ":Asia/Kolkata" 取代為您的時區。封裝程式產生的日誌檔會在您執行封裝程式命令的相同目錄中提供。
-
檢查您用來執行 make 命令的 IAM 使用者憑證或 IAM 角色是否具有必要的 IAM 許可。如需詳細資訊,請參閱 Hashicorp 網站上的 IAM 任務或執行個體角色並將 IAM 政策附加到角色。此外,許可必須允許存取預設的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。您必須附加 AmazonS3ReadOnlyAccess 政策。如果您沒有存取 S3 儲存貯體的許可,則可能會收到下列錯誤:
"required variable not set: kubernetes_build_date
required variable not set: kubernetes_version"**注意:**這些許可允許封裝程式對 AWS 進行 API 呼叫。或者,您可以設定靜態憑證,例如私密金鑰和私密存取金鑰、環境變數,或共用憑證檔案。
-
驗證您的自訂 AMI 是否存在於來源 AMI 的 AWS 區域中。
封裝程式佈建執行個體時,系統會從 us-west-2 中的 Amazon EKS 公有 S3 儲存貯體 amazon-eks 下載預設二進位檔。如需詳細資訊,請參閱 GitHub 網站上的 install-worker.sh 檔案。
提供您自己的 Kubernetes 二進位檔 (選用)
請完成下列步驟:
- 若要檢查預設儲存貯體中的可用二進位檔,請執行下列命令:
**注意:**將 amazon-eks、kubernetes_version、kubernetes_build_date 和 arch 取代為您的值。aws s3 ls s3://amazon-eks aws s3 ls s3://amazon-eks/kubernetes_version/kubernetes_build_date/bin/linux/arch/
- 若要在佈建期間將自己的二進位檔下載到工作節點,您必須鏡映 install-worker.sh 指令碼中使用的 amazon-eks 儲存貯體資料夾結構。
- 二進位檔準備就緒後,請使用 AWS CLI 將二進位檔複製到您的 Amazon S3 儲存貯體。下列範例會使用自訂 kubelet 二進位檔:
**注意:**將 my-custom-bucket、amazon-eks、kubernetes_version、kubernetes_build_date 和 arch 取代為您的值。您必須提供預設 amazon-eks 儲存貯體中列出的所有二進位檔。aws s3 cp kubelet s3://my-custom-bucket/kubernetes_version/kubernetes_build_date/bin/linux/arch/kubelet
- 若要啟動構置程序,請使用在路徑 /amazon-eks-ami/templates/al2/variables-default.json 從目錄 al2 的 variables-default.json 中設定的來源 AMI。若要使用參數調用 make,請執行類似於下列的命令:
**注意:**確認 binary_bucket_name、binary_bucket_region、kubernetes_version 和 kubernetes_build_date 參數是否符合您在 Amazon S3 中二進位檔的路徑。make k8s binary_bucket_name=Custom_Bucket_Name binary_bucket_region=Region kubernetes_version=Version kubernetes_build_date=Build_Date -d

相關內容
- 已提問 3 個月前lg...
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 6 個月前lg...
- 已提問 4 個月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前