Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何為 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
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前
- 已提問 1 年前
- 已提問 1 年前