Amazon EKS 시작하기 - AWS Management Console 및 AWS CLI - Amazon EKS

Amazon EKS 시작하기 - AWS Management Console 및 AWS CLI

이 가이드는 AWS Management Console 및 AWS CLI를 사용하여 Amazon Elastic Kubernetes Service(Amazon EKS)를 시작할 때 필요한 모든 리소스를 생성하는 데 도움이 됩니다. 이 가이드에서는 수동으로 각 리소스를 만듭니다. 이 자습서의 마지막에서는 애플리케이션을 배포할 수 있는 Amazon EKS에 클러스터를 실행하게 됩니다.

이 안내서의 절차를 통해 각 리소스가 만들어지는 방식과 리소스가 상호 작용하는 방식을 완벽하게 파악할 수 있습니다. 대부분의 리소스를 자동으로 생성하려는 경우 eksctl CLI를 사용하여 클러스터 및 노드를 생성합니다. 자세한 내용은 Amazon EKS 시작하기 - eksctl 섹션을 참조하세요.

Prerequisites

이 자습서에서는 Amazon EKS 클러스터를 생성하고 관리할 때 필요한 다음 도구 및 리소스를 설치하고 구성해야 합니다.

  • AWS CLI - Amazon EKS를 비롯한 AWS 서비스를 사용한 작업을 위한 명령줄 도구입니다. 이 가이드에서는 버전 2.2.22 이상 또는 1.20.6 이상을 사용해야 합니다. 자세한 내용은 AWS Command Line Interface 사용 설명서에서 AWS CLI 설치, 업데이트 및 제거를 참조하세요. AWS CLI 설치 후, 구성 작업도 수행하는 것이 좋습니다. 자세한 내용은 AWS Command Line Interface사용 설명서에서 aws configure를 사용한 빠른 구성 섹션을 참조하세요.

  • kubectl - Kubernetes 클러스터 작업을 위한 명령줄 도구입니다. 이 가이드에서는 버전 1.21 이상을 사용해야 합니다. 자세한 내용은 kubectl 설치 섹션을 참조하세요.

  • 필요한 IAM 권한 - 사용하는 IAM 보안 주체에는 Amazon EKS IAM 역할 및 서비스 연결 역할, AWS CloudFormation, VPC 및 관련 리소스를 사용할 수 있는 권한이 있어야 합니다. 자세한 내용은 IAM 사용 설명서에서 Amazon Elastic Container Service for Kubernetes에 사용되는 작업, 리소스 및 조건 키서비스 연결 역할 사용 섹션을 참조하세요. 이 가이드의 모든 단계를 동일한 사용자로 완료해야 합니다.

1단계: Amazon EKS 클러스터 생성

Amazon EKS 클러스터를 생성합니다.

중요

이 주제에는 가능한 한 간단하고 빠르게 시작하기 위해 기본 설정으로 클러스터와 노드를 생성하는 단계가 포함되어 있습니다. 프로덕션 용도로 클러스터 및 노드를 생성하기 전에 모든 설정을 숙지하고 요구 사항을 충족하는 설정으로 클러스터와 노드를 배포하는 것이 좋습니다. 자세한 내용은 Amazon EKS 클러스터 생성Amazon EKS 노드 단원을 참조하십시오.

클러스터를 생성하려면

  1. Amazon EKS 요구 사항을 충족하는 퍼블릭 및 프라이빗 서브넷이 있는 Amazon VPC PC를 생성합니다. 값 예시를 원하는 값으로 바꿀 수 있지만 이 자습서의 값 예시를 사용하는 것이 좋습니다.

    aws cloudformation create-stack \ --region us-west-2 \ --stack-name my-eks-vpc-stack \ --template-url https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml
  2. 클러스터 IAM 역할을 생성하고 필요한 Amazon EKS IAM 관리형 정책을 연결합니다. Amazon EKS에서 관리하는 Kubernetes 클러스터는 사용자 대신 다른 AWS 서비스를 호출하여 서비스에 사용하는 리소스를 관리합니다.

    1. 다음 콘텐츠를 cluster-role-trust-policy.json라는 파일에 복사합니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 역할을 생성합니다.

      aws iam create-role \ --role-name myAmazonEKSClusterRole \ --assume-role-policy-document file://"cluster-role-trust-policy.json"
    3. 필요한 Amazon EKS 관리형 IAM 정책을 역할에 연결합니다.

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy \ --role-name myAmazonEKSClusterRole
  3. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

    콘솔의 오른쪽 상단에서 선택한 리전이 오레곤인지 확인합니다. 그렇지 않은 경우 리전 이름 옆에 있는 드롭다운을 선택하고 미국 서부(오레곤) us-west-2을 선택합니다. 모든 Amazon EKS 지원 리전에 클러스터를 생성할 수 있지만, 이 자습서에서는 미국 서부(오레곤) us-west-2에 생성합니다.

  4. [클러스터 생성(Create cluster)]을 선택합니다. 이 옵션이 표시되지 않으면 [EKS 클러스터 생성(Create EKS cluster)] 상자에 my-cluster와 같은 클러스터 이름을 입력하고 [다음 단계(Next step)]를 선택합니다.

  5. [클러스터 구성(Configure cluster)] 페이지에서 my-cluster와 같은 클러스터 이름을 입력하고 [클러스터 서비스 역할(Cluster Service Role)]에서 myAmazonEKSClusterRole을 선택합니다. 나머지 설정을 기본값으로 두고 [다음(Next)]을 선택합니다.

  6. [네트워킹 지정(Specify networking)] 페이지의 [VPC] 드롭다운 목록에서 vpc-00x0000x000x0x000 | my-eks-vpc-stack-VPC를 선택합니다. 나머지 설정을 기본값으로 두고 [다음(Next)]을 선택합니다.

  7. [로깅 구성(Configure logging)] 페이지에서 [다음(Next)]을 선택합니다.

  8. [검토 및 생성(Review and create)] 페이지에서 [생성(Create)]을 선택합니다.

    클러스터 이름 오른쪽에 있는 클러스터 상태는 클러스터 프로비저닝 프로세스가 완료될 때까지 몇 분 동안 [생성 중(Creating)]으로 표시됩니다. 상태가 [활성(Active)]이 되면 다음 단계를 진행합니다.

    참고

    요청의 가용 영역 중 하나에 Amazon EKS 클러스터를 생성하는 데 충분한 용량이 없다는 오류가 표시될 수 있습니다. 이 경우 오류 출력에는 새 클러스터를 지원할 수 있는 가용 영역이 포함됩니다. 사용자 계정의 지원 가용 영역에 있는 2개 이상의 서브넷을 사용하여 클러스터를 다시 생성합니다. 자세한 내용은 용량 부족 섹션을 참조하세요.

2단계: 클러스터와 통신하도록 컴퓨터 구성

이 섹션에서는 클러스터에 대해 kubeconfig 파일을 생성합니다. 이 파일의 설정을 사용하면 kubectl CLI를 사용하여 클러스터와 통신할 수 있습니다.

클러스터와 통신하도록 컴퓨터를 구성하려면

  1. 클러스터에 대해 kubeconfig 파일을 생성 또는 업데이트합니다. 필요한 경우 us-west-2를 클러스터를 생성한 리전으로 바꿉니다.

    aws eks update-kubeconfig \ --region us-west-2 \ --name my-cluster

    기본적으로 config 파일이 ~/.kube에 생성되거나 새 클러스터의 구성이 ~/.kube의 기존 config 파일에 추가됩니다.

  2. 구성을 테스트합니다.

    kubectl get svc
    참고

    권한 부여 또는 리소스 유형 오류가 표시되는 경우 문제 해결 단원에서 권한이 없거나 액세스가 거부됨(kubectl)을 참조하십시오.

    결과

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

3단계: IAM OpenID Connect(OIDC) 공급자 생성

워크로드가 사용하는 Kubernetes 서비스 계정이 AWS 리소스에 액세스할 수 있도록 클러스터에 대한 IAM OpenID Connect(OIDC) 공급자를 생성합니다. 클러스터에 대해 이 단계를 한 번만 수행하면 됩니다.

  1. [구성(Configuration)] 탭을 선택합니다.

  2. [세부 정보(Details)] 섹션에서 [OpenID Connect 공급자 URL(OpenID Connect provider URL)]의 값을 복사합니다.

  3. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  4. 탐색 창에서 [자격 증명 공급자(Identity Providers)]를 선택합니다.

  5. [공급자 추가(Add Provider)]를 선택합니다.

  6. [공급자 유형(Provider Type)]에서 [OpenID 연결(OpenID Connect)]을 선택합니다.

  7. [공급자 URL(Provider URL)]에 2단계에서 복사한 클러스터의 OIDC 공급자 URL을 붙여넣고 [지문 가져오기(Get thumbprint)]를 선택합니다.

  8. [대상(Audience)에서 sts.amazonaws.com을 입력하고 [공급자 추가(Add provider)]를 선택합니다.

4단계: 노드 만들기

다음 노드 유형 중 하나를 사용하여 클러스터를 생성할 수 있습니다. 각 유형에 대한 자세한 내용은 Amazon EKS 노드 섹션을 참조하세요. 클러스터를 배포한 후에 다른 노드 유형을 추가할 수 있습니다.

  • Fargate – Linux - AWS Fargate에서 Linux 애플리케이션을 실행하려는 경우 이 유형을 선택합니다.

  • 관리형 노드 — Linux - Amazon EC2 인스턴스에서 Amazon Linux 애플리케이션을 실행하려면 이 유형을 선택합니다. 이 가이드에서는 다루지 않지만 Windows 자체 관리형Bottlerocket 노드를 클러스터에 추가할 수도 있습니다. 모든 워크로드에서 Windows에서 실행되는 경우에도 클러스터에는 하나 이상의 Linux 노드가 포함되어 있어야 합니다.

생성하려는 노드 유형 이름이 있는 탭을 선택합니다.

Fargate – Linux

Fargate 프로필을 생성합니다. 프로필에 정의된 기준과 일치하는 기준을 사용하여 Kubernetes 포드를 배포하면 포드가 Fargate 에 배포됩니다.

Fargate 프로필을 생성하려면

  1. IAM 역할을 생성하고 필요한 Amazon EKS IAM 관리형 정책을 연결합니다. 클러스터가 Fargate 인프라에 포드를 생성하는 경우 Fargate 인프라에서 실행 중인 구성 요소는 사용자를 대신해 AWS API를 호출하여 Amazon ECR에서 컨테이너 이미지를 가져오거나 로그를 다른 AWS 서비스로 라우팅하는 등의 작업을 수행해야 합니다. Amazon EKS 포드 실행 역할은 이 작업을 수행할 수 있는 IAM 권한을 제공합니다.

    1. 다음 콘텐츠를 pod-execution-role-trust-policy.json라는 파일에 복사합니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks-fargate-pods.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 포드 실행 IAM 역할을 생성합니다.

      aws iam create-role \ --role-name myAmazonEKSFargatePodExecutionRole \ --assume-role-policy-document file://"pod-execution-role-trust-policy.json"
    3. 필요한 Amazon EKS 관리형 IAM 정책을 역할에 연결합니다.

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy \ --role-name myAmazonEKSFargatePodExecutionRole
  2. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

  3. Fargate 프로필을 생성할 클러스터를 선택하고 [구성(Configuration)] 탭을 클릭한 다음 [컴퓨팅(Compute)] 탭을 선택합니다.

  4. [Fargate 프로필(Fargate profiles)]을 선택하고 [Fargate 프로필 추가(Add Fargate profile)]를 선택합니다.

  5. [Fargate 프로필 구성(Configure Fargate profile)] 페이지에서 다음 정보를 입력하고 [다음(Next)]을 선택합니다.

    1. [이름(Name)]에 Fargate 프로필(예: my-profile)의 고유한 이름을 입력합니다.

    2. [포드 실행 역할(Pod execution role)]에서 1단계에서 생성한 myAmazonEKSFargatePodExecutionRole 역할을 선택합니다.

    3. [서브넷(Subnets)] 드롭다운을 선택하고 이름에 Public이 포함된 서브넷을 모두 선택 취소합니다. Fargate에서 실행되는 포드에는 프라이빗 서브넷만 지원됩니다.

  6. 포드 선택 구성 페이지에서 다음 정보를 입력하고 다음을 선택합니다.

    1. 네임스페이스default를 입력합니다.

  7. [검토 및 생성(Review and create)] 페이지에서 Fargate 프로필에 대한 정보를 검토하고 [생성(Create)]을 선택합니다.

Managed nodes – Linux

이전 단계에서 생성한 서브넷과 노드 IAM 역할을 지정하여 관리형 노드 그룹을 생성합니다.

Amazon EC2 Linux 관리형 노드 그룹을 생성하려면

  1. Amazon VPC CNI 플러그인에 대해 IAM 역할을 생성하고 필요한 Amazon EKS IAM 관리형 정책을 연결합니다. Amazon EKS Amazon VPC CNI 플러그인은 클러스터에 기본적으로 설치됩니다. 이 플러그인은 VPC IP 주소를 각 포드에 할당합니다.

    1. 다음 콘텐츠를 cni-role-trust-policy.json라는 파일에 복사합니다. <111122223333>(<> 포함)을 실제 계정 ID로 바꾸고, <XXXXXXXXXX45D83924220DC4815XXXXX>OpenID Connect 공급자 URL의 마지막 / 뒤에 있는 값으로 바꿉니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<111122223333>:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.us-west-2.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:aws-node" } } } ] }
    2. Amazon VPC CNI 플러그인에 대한 IAM 역할을 생성합니다.

      aws iam create-role \ --role-name myAmazonEKSCNIRole \ --assume-role-policy-document file://"cni-role-trust-policy.json"
    3. 필요한 Amazon EKS 관리형 IAM 정책을 역할에 연결합니다.

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name myAmazonEKSCNIRole
  2. VPC CNI 플러그인에 사용되는 Kubernetes 서비스 계정을 IAM 역할에 연결합니다. <111122223333>(<> 포함)을 계정 ID로 바꿉니다.

    aws eks update-addon \ --cluster-name my-cluster \ --addon-name vpc-cni \ --service-account-role-arn arn:aws:iam::<111122223333>:role/myAmazonEKSCNIRole
  3. 노드 IAM 역할을 생성하고 필요한 Amazon EKS IAM 관리형 정책을 연결합니다. Amazon EKS 노드 kubelet 데몬은 사용자를 대신하여 AWS API를 호출합니다. 노드는 IAM 인스턴스 프로파일 및 연결 정책을 통해 이 API 호출에 대한 권한을 수신합니다.

    1. 다음 콘텐츠를 node-role-trust-policy.json라는 파일에 복사합니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 노드 IAM 역할을 생성합니다.

      aws iam create-role \ --role-name myAmazonEKSNodeRole \ --assume-role-policy-document file://"node-role-trust-policy.json"
    3. 필요한 Amazon EKS 관리형 IAM 정책을 역할에 연결합니다.

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \ --role-name myAmazonEKSNodeRole aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \ --role-name myAmazonEKSNodeRole
  4. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

  5. 1단계: Amazon EKS 클러스터 생성에서 생성한 클러스터의 이름을 선택합니다(예: my-cluster).

  6. [구성(Configuration)] 탭을 선택합니다.

  7. [컴퓨팅(Compute)] 탭에서 [컴퓨팅(Compute)] 탭을 선택한 다음 [노드 그룹 추가(Add Node Group)]를 선택합니다.

  8. [노드 그룹 구성(Configure node group)] 페이지에서 파라미터를 입력하고 나머지 값을 수락한 후 [다음(Next)]을 선택합니다.

    • 이름 - 관리형 노드 그룹(예: my-nodegroup)의 고유한 이름을 입력합니다.

    • 노드 IAM 역할 이름 - myAmazonEKSNodeRole을 선택합니다. 이 시작 가이드에서 이 역할은 이 노드 그룹에만 사용해야 하며 다른 노드 그룹에 사용해서는 안 됩니다.

  9. [컴퓨팅 및 크기 조정 구성 설정(Set compute and scaling configuration)] 페이지에서 기본값으로 두고 [다음(Next)]을 선택합니다.

  10. [네트워킹 지정(Specify networking)] 페이지에서 SSH key pair에 사용할 기존 키 페어를 선택한 후 [다음(Next)]을 선택합니다. 키 페어가 없는 경우 다음 명령을 사용하여 생성할 수 있습니다. 필요한 경우 us-west-2를 클러스터를 생성한 리전으로 변경합니다. 반환 출력을 로컬 컴퓨터의 파일에 저장해야 합니다. 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서에서 키 페어 생성 또는 가져오기 섹션을 참조하세요. 이 가이드에서는 키가 필요하지 않지만, 사용할 키는 노드 그룹을 생성할 경우에만 지정할 수 있습니다. 키를 지정하면 생성된 노드에 SSH로 연결할 수 있습니다.

    aws ec2 create-key-pair --region us-west-2 --key-name myKeyPair
  11. 검토 및 생성 페이지에서 관리형 노드 그룹 구성을 검토하고 생성을 선택합니다.

  12. 몇 분 후 [노드 그룹 구성(Node Group configuration)] 섹션의 [상태(Status)]가 [생성 중(Creating)]에서 [활성(Active)]으로 바뀝니다. 상태가 [활성(Active)]이 되면 다음 단계를 진행합니다.

5단계: 리소스 보기

노드 및 Kubernetes 워크로드를 볼 수 있습니다.

노드를 보려면

  1. 왼쪽 창에서 [클러스터(Clusters)]를 선택한 다음 [클러스터(Clusters)] 목록에서 생성한 클러스터의 이름(예: my-cluster)을 선택합니다.

  2. [개요(Overview)] 탭에 클러스터에 대해 배포된 [노드(Nodes)] 목록이 표시됩니다. 노드 이름을 선택하면 노드에 대한 자세한 정보를 볼 수 있습니다. 여기에 표시되는 항목에 대한 자세한 정보는 노드 보기 섹션을 참조하세요.

  3. 클러스터의 [워크로드(Workloads)] 탭에는 Amazon EKS 클러스터에 기본적으로 배포되는 워크로드의 목록이 표시됩니다. 워크로드 이름을 선택하면 워크로드에 대한 자세한 정보를 볼 수 있습니다. 여기에 표시되는 항목에 대한 자세한 정보는 워크로드 보기 섹션을 참조하세요.

6단계: 클러스터 및 노드 삭제

이 자습서용으로 생성한 클러스터와 노드의 사용을 끝낸 후에는 클러스터와 노드를 삭제하여 정리해야 합니다. 정리하기 전에 이 클러스터로 추가 작업을 수행하려면 다음 단계 섹션을 참조하세요.

클러스터와 노드를 삭제하려면

  1. 모든 노드 그룹 및 Fargate 프로필을 삭제합니다.

    1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

    2. 왼쪽 탐색 창에서 [클러스터(Clusters)]를 선택한 다음 클러스터 목록에서 삭제할 클러스터의 이름을 선택합니다.

    3. [구성(Configuration)] 탭을 선택합니다. [컴퓨팅(Compute)] 탭에서 다음을 선택합니다.

      • 이전 단계에서 생성한 노드 그룹을 선택하고 [삭제(Delete)]를 선택합니다. 노드 그룹의 이름을 입력한 다음 [삭제(Delete)]를 선택합니다.

      • 이전 단계에서 생성한 [Fargate 프로필(Fargate Profile)]을 선택하고 [삭제(Delete)]를 선택합니다. 프로필의 이름을 입력한 다음 [삭제(Delete)]를 선택합니다.

  2.  클러스터를 삭제하십시오.

    1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

    2. 삭제할 클러스터를 선택하고 삭제를 선택합니다.

    3. 클러스터 삭제 확인 화면에서 삭제를 선택합니다.

  3. 이 가이드에서 생성한 VPC AWS CloudFormation 스택을 삭제합니다.

    1. AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation)을 엽니다.

    2. 삭제할 VPC 스택을 선택하고 [삭제(Delete)]를 선택합니다.

    3. [스택 삭제(Delete Stack)] 확인 화면에서 [스택 삭제(Delete stack)]를 선택합니다.

  4. 생성한 IAM 역할을 삭제합니다.

    1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

    2. 왼쪽 탐색 창에서 [역할(Roles)]을 선택합니다.

    3. 목록에서 myAmazonEKSClusterRole을 선택합니다. [역할 삭제(Delete role)]를 선택한 다음 [예, 삭제합니다.(Yes, Delete)]를 선택합니다. 생성한 myAmazonEKSFargatePodExecutionRole 또는 myAmazonEKSNodeRole을 삭제하고, myAmazonEKSCNIRole 역할을 생성한 경우 이 역할도 삭제합니다.

다음 단계

정상 작동하는 Amazon EKS 클러스터와 노드가 있으므로, Kubernetes 애드온을 설치하고 클러스터에 애플리케이션 배포를 시작할 준비가 되었습니다. 다음은 클러스터의 기능을 확장하는 데 도움이 되는 설명서 주제입니다.