Amazon Web Services 한국 블로그

Amazon ECS for Kubernetes (EKS) – 정식 출시

지난 re:Invent 2017에서 Amazon Elastic Container Service for Kubernetes(EKS)를 출시하고, 고객용 미리 보기로 시작하였습니다. 이제 Amazon EKS를  정식 출시합니다. EKS는 Kubnernetes 준수를 인증 받았으며 기존 Kubernetes 워크로드의 실행에 필요한 모든 준비를 마쳤습니다.

Cloud Native Computing Foundation최신 데이터를 보면 Kubernetes를 실행하는 전체 회사 중 57%가 AWS를 선택함에 따라 Kubernetes용 환경에서 AWS가 선두를 지키고 있음을 알 수 있습니다. AWS 고객은 Kubernetes가 회사 IT 전략의 핵심이며 이미 수억 개의 컨테이너를 매주 AWS에서 실행하고 있다고 말합니다. Amazon EKS는 Kubernetes 클러스터의 구축, 보안, 운영 및 유지 관리를 간소화하며 컨테이너 기반 컴퓨팅의 이점을 제공하여 Kubernetes 클러스터를 처음부터 설정하는 복잡함 없이 애플리케이션을 구축하는 데 집중할 수 있도록 합니다.

AWS 서비스 활용
Amazon EKSAWS Cloud에서 실행되므로 Kubernetes에 대해 이미 알고 있는 모든 지식을 적용하고 유용하게 사용하면서 다수의 AWS 서비스 및 기능을 활용할 수 있습니다. 다음 개요를 참조하십시오.

다중 AZ – Kubernetes 제어 영역(API 서버 및 etcd 데이터베이스)은 세 개의 AWS 가용 영역에서 고가용성 방식으로 실행됩니다. 마스터 노드가 모니터링되고 장애가 발생할 경우 대체되며 패치 및 업데이트가 자동으로 적용됩니다.

IAM 통합Amazon EKSHeptio 인증자를 인증에 사용합니다. IAM 역할을 사용할 수 있으므로 다른 자격 증명 세트의 관리에서 비롯되는 문제를 방지할 수 있습니다.

로드 밸런서 지원 – AWS Network Load Balancer, AWS Application Load Balancer 또는 일반(Classic) Elastic Load Balancer를 사용하여 작업자 노드의 트래픽을 라우팅할 수 있습니다.

EBS – Kubernetes PersistentVolumes(클러스터 스토리지로 사용됨)는 Amazon Elastic Block Store(EBS) 볼륨으로 구현됩니다.

Route 53외부 DNS가 보호되므로 Route 53 DNS 레코드를 통해 Kubernetes 클러스터의 서비스에 액세스할 수 있습니다. 따라서 서비스 검색이 간소화되고 로드 밸런싱이 지원됩니다.

Auto Scaling – 클러스터에서 Auto Scaling을 활용하여 로드 변경에 따라 확장하고 축소할 수 있습니다.

컨테이너 인터페이스 – Kubernetes의 컨테이너 네트워크 인터페이스탄력적 네트워크 인터페이스를 사용하여 Kubernetes Pod를 위한 정적 IP 주소를 제공합니다.

이러한 기능에 대한 자세한 내용은 Amazon Elastic Container Service for Kubernetes를 참조하십시오.

Amazon EKS는 공동 책임 모델을 중심으로 설계되었습니다. 즉, AWS가 제어 영역 노드를 관리하고 고객은 작업자 노드를 실행합니다. 이는 고가용성을 보장하고, 기존 워크로드를 EKS로 이동하는 프로세스를 간소화합니다. 아주 간략하게 설명하면 다음과 같습니다.

Amazon EKS 클러스터 생성
클러스터를 생성하기 위해 제어 영역을 프로비저닝하고, 작업자 클러스터를 프로비저닝 및 연결하고, 컨테이너를 시작합니다. 아래의 예에서는 작업자 클러스터에 사용할 새 VPC를 생성하지만, Kubernetes 클러스터 이름을 사용하여 원하는 서브넷에 태그를 지정하기만 하면 기존 VPC를 사용해도 됩니다.

Amazon EKS Getting Started Guide의 지침에 따라 IAM 역할을 생성하는 작업부터 시작합니다. Kubernetes는 이 역할을 가정하고 이 역할을 사용하여 Elastic Load Balancer 같은 AWS 리소스를 생성합니다. 역할을 생성한 후에는 모든 클러스터에서 이 역할을 사용할 수 있습니다. Getting Started Guide에 설명된 템플릿을 사용하여 CloudFormation 스택을 생성합니다.

스택에서 역할이 생성된다는 내용의 메시지를 확인하고 [Create]를 클릭하여 계속합니다.

몇 초 만에 역할이 생성되고 ARN이 스택의 [Output] 탭에 표시됩니다(나중에 필요).

다음으로, Getting Started Guide의 샘플 템플릿과 다음 매개 변수를 사용하여 VPC(가상 프라이빗 클라우드)를 생성합니다.

이 템플릿은 서브넷 2개와 필요한 모든 라우팅 테이블, 게이트웨이 및 보안 그룹이 포함된 VPC를 생성합니다.

ARN을 사용하는 사례의 경우 나중에 보안 그룹의 ID가 필요합니다.

다음으로, kubectl을 다운로드하고 Heptio 인증자를 사용하도록 설정합니다. 이 인증자를 사용하면 kubectl에서 Kubernetes 클러스터에 액세스할 때 IAM 인증을 사용할 수 있습니다. 지금 제가 따르는 다운로드 및 설정 지침은 Getting Started Guide에 나와 있습니다.

설정 프로세스를 마무리하는 과정에서 최신 버전의 AWS CLI(명령줄 인터페이스)가 실행되고 있는지 확인합니다. 이전 버전을 실행하고 있었다면 eks 명령을 사용할 수 없었을 것입니다.

IAM 역할, VPC 및 필요한 도구를 모두 갖추었으니 이제 첫 번째 Amazon EKS 클러스터를 생성할 수 있습니다.

관리자 권한이 있는 IAM 역할(Heptio 인증자의 작동 방식으로 인해 루트 자격 증명은 사용할 수 없음)을 사용하여 EKS 콘솔에 로그인하고 [Create cluster]를 클릭합니다.

클러스터 이름(Kubernetes는 서브넷의 태깅을 사용하므로 VPC를 생성할 때 입력한 이름과 일치해야 함)과 함께 VPC에 사용할 서브넷 ID 및 보안 그룹 ID를 입력하고 [Create]를 클릭합니다.

제어 영역 클러스터가 [CREATING] 상태로 시작되고 10분 내에 [ACTIVE] 상태로 전환됩니다.

이제 클러스터에 액세스할 수 있도록 kubectl를 구성해야 합니다. 그 전에 CLI를 사용하여 인증 기관 데이터를 검색해야 합니다.

$ aws eks describe-cluster --region us-west-2 --cluster-name jeff1 --query cluster.certificateAuthority.data

이 명령은 잠시 후 사용하게 될 긴 문자열 데이터를 반환합니다.

이제 콘솔에서 클러스터 엔드포인트를 검색합니다.

홈 디렉터리에 있는지 확인하고 하위 디렉터리 .kube를생성한 다음 그 안에 config-jeff1을 생성합니다. 그런 다음 config-jeff1을 편집기에서 열고, Getting Started Guide에서 템플릿으로 작성된 구성 파일을 복사한 다음 클러스터 엔드포인트, 인증서 및 클러스터 이름을 입력합니다. 파일은 다음과 같습니다.

apiVersion: v1
clusters:
- cluster:
    server: https://FDA1964D96C9EEF2B76684C103F31C67.sk1.us-west-2.eks.amazonaws.com
    certificate-authority-data: "...."
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: heptio-authenticator-aws
      args:
        - "token"
        - "-i"

이제 kubectl을테스트하기 전에, 클러스터 생성을 위해 콘솔에 로그인할 때 사용한 것과 동일한 IAM 사용자를 사용하도록 CLI가 구성되었는지 확인해야 합니다.

이제 간단한 테스트를 실행하여 모든 항목이 예상대로 작동하는지 확인할 수 있습니다.

저는 여기서 마스터 VPC와 Kubernetes 제어 영역을 설정했습니다. 이제 작업자 노드(EC2 인스턴스)를 생성할 준비가 되었습니다. 마찬가지로 이 작업도 CloudFormation 템플릿을 사용하여 수행됩니다.

몇 분 내에 스택이 생성되고 IAM 역할, 보안 그룹 및 Auto Scailing이 설정됩니다.

이제 작업자 노드의 클러스터 가입 방법을 설명하는 구성기 맵을 설정해야 합니다. 맵을 다운로드하고 스택에서 NodeInstanceRole의 ARN을 추가한 다음 구성을 적용합니다.

그런 다음 노드가 준비되었는지 확인합니다.

Guest Book 샘플 실행
Kubnernetes 클러스터에 필요한 모든 준비를 마쳤으므로 Guest Book 애플리케이션을 사용하여 클러스터를 테스트할 수 있습니다. Kubernetes 복제 컨트롤러 및 서비스를 생성합니다.

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-master-controller.json
replicationcontroller "redis-master" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-master-service.json
service "redis-master" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-slave-controller.json
replicationcontroller "redis-slave" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/redis-slave-service.json
service "redis-slave" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/guestbook-controller.json
replicationcontroller "guestbook" created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.0/examples/guestbook-go/guestbook-service.json
service "guestbook" created

실행 중인 서비스를 나열하고 외부 IP 주소 및 포트를 캡처합니다.

웹 브라우저의 주소를 방문합니다.

알아야 할 사항
AWS는 Kubernetes 리포지토리CNI 플러그인, Heptio AWS 인증자가상 Kubelet에 업스트림 방식의 기여를 제공합니다.

Amazon EKS는 오늘부터 미국 동부(버지니아 북부)미국 서부(오레곤) 리전에서 제공되며 다른 지역에서도 곧 제공될 것입니다. AWS는 금년에 다수의 추가 기능을 발표할 세부적인 로드맵과 계획을 가지고 있습니다.

EKS 제어 영역은 시간당 0.20 USD의 요금으로 제공됩니다. 계정에서 실행되는 리소스에 대한 EC2, EBS 및 로드 밸런싱에는 일반 요금이 적용됩니다. 자세한 내용은 EKS 요금 페이지를 참조하십시오.

Jeff