EKS를 통한 kubernetes 운영 환경 구성 Part 3

 

번개장터 / 19. 12. 18. 오후 6:21

안녕하세요. 번개장터 백엔드 엔지니어 박상조입니다.

아래 링크의 AWS에서 제공하는 EKS구성 강의를 참고하였습니다. https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/getting-started.html

구성하기에 앞서 VPC와 subnet은 생성되어 있다고 가정하겠습니다.

EKS 클러스터 생성

1. IAM 서비스 역할 생성

  1. IAM 콘솔을 엽니다. (https://console.aws.amazon.com/iam/)
  2. Roles를 선택하고 Create role을 선택합니다.
  3. 역할 중 EKS를 선택 합니다.
  4. Role name에 사용할 이름을 지정합니다.
  5. 개인적으로 설정할 내용이 없다면 Next와 Create role로 역할을 생성합니다.

2. EKS 클러스터 보안그룹 생성

EKS 클러스터가 사용할 보안그룹을 생성합니다.

3. EKS 클러스터 생성

  1. EKS 콘솔을 엽니다. (https://console.aws.amazon.com/eks/)
  2. Create cluster를 선택합니다.
  3. Cluster name을 설정합니다. 이 Cluster name은 나중에 노드를 연결할 때 사용됩니다.
  4. Kubernetes version에서 클러스터에서 사용할 k8s의 버전을 선택합니다.
  5. 위에서 생성한 역할을 Role name으로 사용합니다.
  6. VPC에서 사용할 VPC를 선택 합니다.
  7. Subnets에서 사용할 서브넷을 사용합니다. (2개 이상 선택하셔야 합니다.)
  8. Security group에서 사용할 보안그룹을 선택합니다.
  9. Create를 선택합니다.

생성이 시작되면 Status가 CREATING이 되며 생성이 완료될 때 까지 기다립니다.

4. AWS CLI를 설치합니다.

필수 사항은 아니지만, AWS CLI를 이용하면 kubeconfig 생성이 쉬워지기 때문에 설치하시기를 권장합니다. 아래 링크를 참조하시기 바랍니다.

https://docs.aws.amazon.com/cli/latest/userguide/installing.html

아래 명령어를 통해 AWS CLI의 버전을 확인합니다.

aws --version

1.16.18버전 이하라면 kubeconfig를 생성할 수 없습니다.

5. kubectl 마스터에 연결

kubectl이란 k8s를 운영하기 위한 CLI 도구 입니다.

  1. 운영체제에 맞게 kubectl을 설치 합니다. 공식 문서는 여기를 참고하세요.

  2. aws-iam-authenticator를 설치합니다.
    아래 링크에서 운영체제에 맞춰 다운로드합니다.
    Linux  
    https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-07-26/bin/linux/amd64/aws-iam-authenticator  
    MacOS  
    https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-07-26/bin/darwin/amd64/aws-iam-authenticator  
    Windows  
    https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-07-26/bin/windows/amd64/aws-iam-authenticator.exe
    
  3. 아래 명령어로 실행 권한을 적용합니다.
    chmod +x ./aws-iam-authenticator
    
  4. /usr/local/bin으로 파일을 옮겨 터미널에서 사용할 수 있게합니다.

  5. aws-iam-authenticator가 잘 동작하는지 확인합니다.

    aws-iam-authenticator help
    
  6. 생성한 EKS 클러스터에 대한 kubectl의 kubeconfig를 생성합니다.
    aws eks update-kubeconfig --name 
    

    ClusterName에는 EKS 마스터 클러스터를 만들 때 썼던 이름을 사용합니다.

  7. 연결을 테스트합니다.

    실행:

    kubectl get svc
    

    결과:

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

    결과가 위처럼 나오면 성공입니다.

6. Worker Node 생성

이제 쿠버네티스 마스터 클러스터를 구성하고 kubectl까지 연결해 운영할 수 있게 만들었습니다. 이제 작업자 노드를 만들고 연결해 실제로 k8s 환경을 구성해 보겠습니다. 작업자 노드는 CloudFormation을 통해 만들어집니다.

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

  2. Create stack을 선택 합니다.

  3. 템플릿을 정해야 하는데 기존 템플릿에 수정사항이 있으면 다운로드 후 설정해서 사용합니다.

    기본 템플릿:
    https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2018-11-07/amazon-eks-nodegroup.yaml

  4. 세부사항을 설정합니다.

    1. Stack name에 사용할 Stack name을 설정합니다.
    2. EKS Cluster에 EKS 마스터 클러스터를 만들 때 사용했던 이름을 사용합니다.

      다른 이름을 사용하면 마스터 클러스터에 연결이 되지 않습니다.

    3. 공식 AMI가 아직 서울 region에 없기 때문에 빌드해서 사용해야 합니다.

      https://github.com/awslabs/amazon-eks-ami

      위 프로젝트를 보고 빌드하시면 되는데 클론하신 후 eks-worker-al2.json 파일에서 aws_region을 ap-northeast-2로 바꿔주셔야 빌드가 됩니다.

    4. NodeImageId에 방금 빌드한 AMI의 ID를 입력합니다.
    5. 그 외 **VPC, Subnets**등은 자신의 환경에 맞게 설정하고 Next를 눌러 줍니다.

    6. I acknowledge that AWS CloudFormation might create IAM resources.를 체크하고 Create stack을 선택하면 작업자 노드가 생성됩니다.

7. Worker Node를 마스터에 연결

작업자 노드는 마스터에 연결해야 제대로 동작할 수 있습니다. 그럼 마스터에서 노드에 연결을 해 보도록 하겠습니다.

  1. 아래 링크에서 구성 맵을 다운로드합니다.

    https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2018-11-07/aws-auth-cm.yaml

  2. 스택이 생성되면 Outputs에 NodeInstanceRole이라는 키로 arn이 나와 있습니다. 이 arn을 복사해 위의 yaml의 rolearn에 복사합니다.
  3. 아래 명령어를 통해 연결해 줍니다.

    kubectl apply -f aws-auth-cm.yaml
    

    그 후

    kubectl get nodes -w
    

    로 방금 연결한 노드가 Ready 상태가 될 때까지 기다립니다.


이제 기본적인 k8s환경 구성이 끝났습니다. 이제 k8s를 사용해서 각자 운영환경을 구축해 나갈 수 있습니다. 다음 포스팅은 helm과 ingress, 배포환경 구성에 대해 다룰 생각입니다.

읽어주셔서 감사합니다.

기업문화 엿볼 때, 더팀스

로그인

/