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

2 分的閱讀內容
0

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

解決方法

先決條件

  • 在本端電腦上或 Amazon Linux Amazon Elastic Compute Cloud (EC2) 執行個體上安裝封裝程式。如需說明,請參閱 Hashicorp 網站上的安裝封裝程式
  • 然後,安裝 Amazon 外掛程式,以與 Hashicorp 封裝程式搭配使用,在 AWS 上建立自訂映像。如需說明,請參閱 Hashicorp 網站上的安裝
  • 請確定是否已安裝 makegit
    sudo yum install make -y
    sudo yum install git -y

為 Amazon EKS 建立自訂 Amazon Linux AMI

請完成下列步驟:

  1. 若要複製 amazon-eks-ami AWS 實驗室儲存庫,請執行下列命令:

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

    如需詳細資訊,請參閱 GitHub 網站上的 amazon-eks-ami

  2. 若要在 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

  3. 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 位址

  4. 若要啟動自訂 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" 取代為您的時區。封裝程式產生的日誌檔會在您執行封裝程式命令的相同目錄中提供。

  5. 檢查您用來執行 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 呼叫。或者,您可以設定靜態憑證,例如私密金鑰和私密存取金鑰、環境變數,或共用憑證檔案。

  6. 驗證您的自訂 AMI 是否存在於來源 AMI 的 AWS 區域中。

封裝程式佈建執行個體時,系統會從 us-west-2 中的 Amazon EKS 公有 S3 儲存貯體 amazon-eks 下載預設二進位檔。如需詳細資訊,請參閱 GitHub 網站上的 install-worker.sh 檔案。

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

請完成下列步驟:

  1. 若要檢查預設儲存貯體中的可用二進位檔,請執行下列命令:
    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 取代為您的值。
  2. 若要在佈建期間將自己的二進位檔下載到工作節點,您必須鏡映 install-worker.sh 指令碼中使用的 amazon-eks 儲存貯體資料夾結構。
  3. 二進位檔準備就緒後,請使用 AWS CLI 將二進位檔複製到您的 Amazon 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 取代為您的值。您必須提供預設 amazon-eks 儲存貯體中列出的所有二進位檔。
  4. 若要啟動構置程序,請使用在路徑 /amazon-eks-ami/templates/al2/variables-default.json 從目錄 al2variables-default.json 中設定的來源 AMI。若要使用參數調用 make,請執行類似於下列的命令:
    make k8s  binary_bucket_name=Custom_Bucket_Name  binary_bucket_region=Region  kubernetes_version=Version  kubernetes_build_date=Build_Date -d
    **注意:**確認 binary_bucket_namebinary_bucket_regionkubernetes_versionkubernetes_build_date 參數是否符合您在 Amazon S3 中二進位檔的路徑。
AWS 官方
AWS 官方已更新 4 個月前