Amazon EKS용 사용자 지정 Amazon Linux AMI는 어떻게 생성하나요?

4분 분량
0

사용자 정의 Amazon Linux Amazon Machine Image(AMI)를 생성하여 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터와 함께 배포하고 싶습니다.

해결 방법

사전 요구 사항

  • Packer를 로컬 머신이나 Amazon Linux Amazon Elastic Compute Cloud(EC2) 인스턴스에 설치합니다. 지침은 Hashicorp 웹사이트에서 Install Packer를 참조하세요.
  • 그런 다음 Amazon Plugin을 설치하여 Hashicorp Packer와 함께 사용하여 AWS에서 사용자 지정 이미지를 생성합니다. 지침은 Hashicorp 웹사이트에서 Installation을 참조하세요.
  • makegit이 설치되어 있는지 확인하세요.
    sudo yum install make -y
    sudo yum install git -y

Amazon EKS용 맞춤형 Amazon Linux AMI 만들기

다음 단계를 완료하십시오.

  1. amazon-eks-ami AWS Labs 리포지토리를 복제하려면 다음 명령을 실행합니다.

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

    자세한 내용은 GitHub 웹사이트의 amazon-ecs-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"입니다.
    Packer에서 iam_instance_profile 옵션을 사용하는 경우 연결하려는 IAM 역할의 인스턴스 프로필 이름을 제공해야 합니다. IAM 역할 ARN 또는 인스턴스 프로필 ARN을 제공하지 마세요.
    temporary_security_group_source_cidrs 매개 변수가 제공되지 않은 경우 Packer는 모든 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”**를 시간대로 바꾸십시오. 생성된 Packer 로그 파일은 Packer 명령을 실행하는 디렉터리와 동일한 디렉터리에서 사용할 수 있습니다.

  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"

    참고: 이러한 권한을 통해 Packer는 AWS에 API를 호출할 수 있습니다. 또는 시크릿 키와 시크릿 액세스 키, 환경 변수 또는 공유 자격 증명 파일과 같은 정적 자격 증명을 구성할 수 있습니다.

  6. 사용자 지정 AMI가 원본 AMI의 AWS 리전에 있는지 확인합니다.

Packer가 인스턴스를 프로비저닝할 때, 기본 바이너리는 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-eks, kubernetes_version, kubernetes_build_date, arch를 사용자의 값으로 바꿉니다.
  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-bucket, amazon-eks, kubernetes_version, kubernetes_build_date, arch를 사용자의 값으로 바꿉니다. 기본 amazon-eks 버킷에 나열된 모든 바이너리를 제공해야 합니다.
  4. 빌드 프로세스를 시작하려면 /amazon-eks-ami/templates/al2/variables-default.json 경로에 있는 al2 디렉터리의 variables-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_name, binary_bucket_region, kubernetes_version, kubernetes_build_date 매개변수가 Amazon S3의 바이너리 경로와 일치하는지 확인합니다.
AWS 공식
AWS 공식업데이트됨 6달 전
댓글 없음

관련 콘텐츠