Amazon EKS용 사용자 지정 Amazon Linux AMI를 생성하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 2월 6일

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

간략한 설명

Amazon EKS용 사용자 지정 Linux AMI를 생성하려면 다음을 사용해야 합니다.

참고: Packer는 AWS CloudFormation 스택을 사용하여 작동합니다. 스택은 m4.large 또는 a1.large Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 실행합니다(대상 AMI 아키텍처에 따라 다름). 이 인스턴스는 Packer에서 프로비저닝됩니다. 인스턴스에 패키지와 바이너리가 프로비저닝되면 Packer는 실행 중인 인스턴스에서 AMI를 생성합니다.

​해결 방법

Packer 설치 및 구성

1.    Packer를 설치합니다.

2.    Packer가 사용자를 대신하여 AWS API 작업을 호출할 수 있도록 AWS 계정 자격 증명을 구성합니다. 정적 자격 증명(보안 키 및 보안 액세스 키), 환경 변수, 공유 자격 증명 파일 또는 Amazon EC2 역할을 사용할 수 있습니다.

참고: Packer용 AWS 자격 증명 구성에 대한 자세한 내용은 인증IAM 작업 또는 인스턴스 역할을 참조하십시오.

Amazon EKS AMI 리포지토리 복제

Amazon EKS AMI 리포지토리를 워크스테이션에 복제하려면 다음 명령을 실행합니다.

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

참고: Packer는 eks-worker-al2.json을 빌드 사양으로 사용하여 일련의 makefile 대상에 대해 차례로 실행됩니다. 빌드 프로세스는 amazon-ebs Packer 빌더를 사용하고 인스턴스를 시작합니다. Packer 셸 프로비저너는 인스턴스에서 install-worker.sh 스크립트를 실행하여 소프트웨어를 설치하고 다른 구성 작업을 수행합니다. 그런 다음 Packer는 인스턴스에서 AMI를 생성하고 AMI가 생성된 후 인스턴스를 종료합니다.

사용자 지정 소스 AMI 제공

사용자 지정 소스 AMI를 구성하려면 Packer 구성 파일 eks-worker-al2.json에서 source_ami_id, source_ami_owneraws_region 변수를 설정합니다. 다음 예제를 참조하십시오.

"source_ami_id": "SOURCE_AMI_ID",      # Enter the ID of your source image
"source_ami_owners": "AWS_ACCOUNT_ID", # Enter the account where this image is stored
"aws_region": "AWS_DEFAULT_REGION",    # Enter the AWS Region of the source AMI

사용자 지정 작업자 바이너리를 제공하려면 (선택 사항) 자체 Kubernetes 바이너리 제공 섹션의 단계를 완료합니다.

AWS의 기본 Kubernetes 바이너리를 사용하여 이미지를 빌드하려면 기본 바이너리를 사용하여 Amazon EKS 작업자 AMI 빌드 섹션의 단계를 완료합니다.

(선택 사항) 자체 Kubernetes 바이너리 제공

Packer가 인스턴스를 프로비저닝하면 us-west-2의 Amazon EKS 퍼블릭 Amazon Simple Storage Service(Amazon S3) 버킷 amazon-eks로부터 바이너리가 기본적으로 다운로드됩니다. 자세한 내용은 install-worker.sh 파일을 참조하십시오.

1.    기본 버킷에 제공된 사용 가능한 바이너리를 검사하려면 다음 AWS 명령줄 인터페이스(AWS CLI) 명령을 실행합니다.

$ 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_datearch를 사용자 값으로 바꿉니다.

중요: 프로비저닝 중에 작업자 노드에 자체 바이너리를 다운로드하려면 install-worker.sh 스크립트에 사용된 amazon-eks 버킷 폴더 구조를 미러링해야 합니다.

2.    자체 빌드 프로세스를 통해 바이너리를 준비한 후 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_datearch를 사용자 값으로 바꿉니다.

중요: 특정 kubernetes_version, kubernetes_build_datearch 조합에 대해 기본 amazon-eks 버킷에 나열된 모든 바이너리를 제공해야 합니다. 이러한 바이너리는 HashiCorp Packer 설치 및 구성 섹션에 구성된 AWS Identity and Access Management(IAM) 자격 증명을 통해 액세스할 수 있어야 합니다.

사용자 지정 바이너리를 사용하여 Amazon EKS 작업자 AMI 구축

빌드 프로세스를 시작하려면 eks-worker-al2.json에 구성된 소스 AMI를 사용하여 파라미터와 함께 make를 호출합니다. 다음 예제를 참조하십시오.

$ make k8s \
    binary_bucket_name=my-custom-bucket \
    binary_bucket_region=eu-west-1 \
    kubernetes_version=1.14.9 \
    kubernetes_build_date=2020-01-22

참고: binary_bucket_name, binary_bucket_region, kubernetes_versionkubernetes_build_date 파라미터가 Amazon S3의 바이너리 경로와 일치하는지 확인합니다.

기본 바이너리를 사용하여 Amazon EKS 작업자 AMI 구축

1.    사용자 지정 기본 AMI 및 기본(최신) Kubernetes 바이너리를 사용하여 Amazon EKS 작업자 AMI를 빌드하려면 eks-worker-al2.json 파일이 올바른 기본 AMI로 업데이트되었는지 확인합니다.

2.    Kubernetes 버전을 파라미터로 제공하여 빌드 프로세스를 트리거하려면 다음 명령을 실행합니다.

$ make k8s 1.14  # Build a Amazon EKS Worker AMI for k8s 1.14

참고: 고급 구성의 경우 빌드를 트리거하기 전에 amazon-eks-ami AWS GitHub 리포지토리에서 구성 파일을 수정해야 합니다.

팁: Packer 구성을 사용하여 사용자 지정 AMI를 구축할 때 발생하는 일반적인 문제는 AWS GitHub에서 확인하십시오.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?