Direkt zum Inhalt

Wie erstelle ich benutzerdefinierte Amazon Linux-AMIs für Amazon EKS?

Lesedauer: 5 Minute
0

Ich möchte ein benutzerdefiniertes Amazon Linux Amazon Machine Image (AMI) für die Bereitstellung mit einem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster erstellen.

Lösung

Voraussetzungen

  • Installieren Sie Packer entweder auf Ihrem lokalen Computer oder auf einer Amazon Linux Amazon Elastic Compute Cloud (EC2) -Instance. Anweisungen finden Sie unter Packer installieren auf der Hashicorp-Website.
  • Installieren Sie dann das Amazon-Plugin, um es mit Hashicorp Packer zu verwenden, um benutzerdefinierte Images auf AWS zu erstellen. Anweisungen finden Sie unter Installation auf der Hashicorp-Website.
  • Stelle sicher, dass make und git installiert sind:
    sudo yum install make -y
    sudo yum install git -y

Benutzerdefinierte Amazon Linux-AMIs für Amazon EKS erstellen

Führen Sie die folgenden Schritte aus:

  1. Führen Sie den folgenden Befehl aus, um das amazon-eks-ami AWS-Übungen-Repository zu klonen:

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

    Weitere Informationen finden Sie unter amazon-eks-ami auf der GitHub-Website.

  2. Führen Sie den folgenden Befehl aus, um eine neue Datei mit dem Namen variables-custom.json im Verzeichnis amazon-eks-ami zu erstellen:

    sudo vi variables-custom.json

    Hinweis: Die Standardvariablendatei, die variables-custom.json überschreibt, befindet sich in der Datei variables-default.json auf der GitHub-Website. Wenn Sie Amazon Linux 2 (AL2) verwenden, lautet der Dateipfad für variables-default.json /amazon-eks-ami/templates/al2/variables-default.json. Wenn Sie Amazon Linux 2023 (AL2023) verwenden, lautet der Dateipfad /amazon-eks-ami/templates/al2023/variables-default.json.

  3. Fügen Sie in der Datei variables-custom.json Ihre Werte hinzu:

    {
        "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
    }

    Wenn Sie ein vorhandenes AMI als Quelle verwenden, um ein benutzerdefiniertes AMI für EKS zu erstellen, legen Sie den Wert launch_block_device_mappings_volume_size fest. Der Wert muss gleich oder größer als die Größe des AMI-Snapshot-Volumes sein. Der Standardwert in der Datei variables-default.json ist „4“.
    Wenn Sie die Option iam_instance_profile in Packer verwenden, müssen Sie den Instance-Profilnamen der IAM-Rolle angeben, die Sie anhängen möchten. Geben Sie nicht den IAM-Rollen-ARN oder den Instance-Profil-ARN an.
    Wenn der Parameter temporary_security_group_source_cidrs nicht bereitgestellt wird, öffnet Packer den SSH-Port für alle IP-Adressen (0.0.0.0/0). Um ein Sicherheitsrisiko zu vermeiden, empfiehlt es sich, die IP-Adresse Ihres Quellcomputers im Parameter temporary_security_group_source_cidrs anzugeben.

  4. Führen Sie den folgenden Befehl aus, um den benutzerdefinierten AMI-Erstellungsprozess zu starten:

    sudo make PACKER_OPTIONAL_K8S_VARIABLE_FILE=variables-custom.json k8s=1.29 os_distro=al2 arch=x86_64 -d

    Oder führen Sie den folgenden Befehl aus, um die Packer-Protokollierung zu aktivieren:

    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

    Hinweis: Um die Zeitzone Ihres Systems einzustellen, ersetzen Sie „:Asia/Kolkata“ durch Ihre Zeitzone. Die generierte Protokolldatei von Packer ist in demselben Verzeichnis verfügbar, in dem Sie den Packer-Befehl ausführen.

  5. Vergewissern Sie sich, dass die IAM-Benutzeranmeldeinformationen oder die IAM-Rolle, die Sie zum Ausführen des Befehls make verwenden, über die erforderlichen IAM-Berechtigungen verfügen. Weitere Informationen finden Sie unter IAM-Aufgabe oder Instance-Rolle und Anhängen von IAM-Richtlinien an Rollen auf der Hashicorp-Website. Außerdem müssen die Berechtigungen den Zugriff auf den Standard-Bucket von Amazon Simple Storage Service (Amazon S3) ermöglichen. Sie müssen die AmazonS3ReadOnlyAccess-Richtlinie anhängen. Wenn Sie nicht berechtigt sind, auf den S3-Bucket zuzugreifen, wird möglicherweise die folgende Fehlermeldung angezeigt:

    "required variable not set: kubernetes_build_date
    required variable not set: kubernetes_version"

    Hinweis: Diese Berechtigungen ermöglichen es Packer, API-Aufrufe an AWS zu tätigen. Oder konfigurieren Sie statische Anmeldeinformationen wie einen geheimen Schlüssel und einen geheimen Zugriffsschlüssel, eine Umgebungsvariable oder gemeinsam genutzte Anmeldeinformationsdateien.

  6. Stellen Sie sicher, dass Ihr benutzerdefiniertes AMI in Ihrer AWS-Region des Quell-AMI vorhanden ist.

Wenn Packer die Instance bereitstellt, werden Standard-Binärdateien aus dem öffentlichen S3-Bucket amazon-eks von Amazon EKS in us-west-2 heruntergeladen. Weitere Informationen finden Sie in der Datei install-worker.sh auf der GitHub-Website.

Eigene Kubernetes-Binärdateien bereitstellen (optional)

Führen Sie die folgenden Schritte aus:

  1. Führen Sie den folgenden Befehl aus, um die verfügbaren Binärdateien zu überprüfen, die im Standard-Bucket bereitgestellt werden:
    aws s3 ls s3://amazon-eks
    aws s3 ls s3://amazon-eks/kubernetes_version/kubernetes_build_date/bin/linux/arch/
    Hinweis: Ersetzen Sie amazon-eks, kubernetes_version, kubernetes_build_date und arch durch Ihre Werte.
  2. Um Ihre eigenen Binärdateien während der Bereitstellung auf den Worker-Knoten herunterzuladen, müssen Sie die amazon-eks-Bucket-Ordnerstruktur widerspiegeln, die im Skript install-worker.sh verwendet wird.
  3. Nachdem Ihre Binärdateien vorbereitet sind, verwenden Sie das AWS-CLI, um die Binärdateien in Ihren Amazon S3-Bucket zu kopieren. Das folgende Beispiel verwendet eine benutzerdefinierte kubelet-Binärdatei:
    aws s3 cp kubelet s3://my-custom-bucket/kubernetes_version/kubernetes_build_date/bin/linux/arch/kubelet
    Hinweis: Ersetzen Sie my-custom-bucket, amazon-eks, kubernetes_version, kubernetes_build_date und arch durch Ihre Werte. Sie müssen alle Binärdateien angeben, die im Standard-amazon-eks-Bucket aufgeführt sind.
  4. Um den Build-Prozess zu starten, verwenden Sie das Quell-AMI, das in variables-default.json aus dem Verzeichnis al2 unter dem Pfad /amazon-eks-ami/templates/al2/variables-default.json konfiguriert ist. Um make mit den Parametern aufzurufen, führen Sie einen Befehl ähnlich dem folgenden aus:
    make k8s  binary_bucket_name=Custom_Bucket_Name  binary_bucket_region=Region  kubernetes_version=Version  kubernetes_build_date=Build_Date -d
    Hinweis: Vergewissern Sie sich, dass die Parameter binary_bucket_name, binary_bucket_region, kubernetes_version und kubernetes_build_date mit dem Pfad zu Ihren Binärdateien in Amazon S3 übereinstimmen.
AWS OFFICIALAktualisiert vor 2 Jahren