eksctl을 통한 Amazon EKS 배포

SummerToday·2024년 8월 22일
0

Amazon EKS 기본 강의

목록 보기
5/6
post-thumbnail
post-custom-banner

eksctl에서 Amazon EKS 배포

출처: 인프런, Ongja_CloudNet@, ⌜CloudNet@와 함께하는 Amazon EKS 기본 강의⌟

  • 다양한 옵션을 정의해야 하지만 eksctl 명령만으로도 손쉽게 클러스터를 생성하거나 삭제가 가능하다.

  • myeks-host에서 eksctl create cluster 형태의 명령어 수행 시 EKS 클러스터를 생성하는 작업을 진행한다.

  • 옵션에 따라 다르지만, 명령어 한번에 EKS 클러스터 생성과 노드 그룹까지 생성할 수도 있다.

  • eksctl create cluster 명령으로 EKS 클러스터를 생성하기 위한 IAM 역할을 만든 뒤 Control Plane을 구성하며 Kubeconfig 정보를 업데이트 한다.

  • EKS 노드 그룹 생성을 위한 IAM 역할을 만들어 노드 그룹 구성까지 한 번에 진행할 수 있다.

  • eksctl이 EKS 클러스터 생성을 위한 다양한 자원을 동적으로 만들 수 있는 이유는 CloudFormation을 활용하기 때문이다.

    • 요청에 의해 CloudFormation 스택을 생성하고 스택에 정의된 자원을 동적으로 생성하게 된다.

    • 즉, EKS 클러스터 IAM 역할과 노드 IAM 역할이 생성되고 EKS 클러스터를 구성하는 Control Plane과 노드 그룹이 동적으로 생성된다.

    • myeks-host에 kubeconfig 정보를 동적으로 업데이트하여 kubectl 명령도 수행할 수 있게 처리된다.


eksctl 설치

curl -sL "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_Linux_amd64.tar.gz" | tar xz -C /tmp

sudo mv /tmp/eksctl /usr/local/bin

eksctl version
  • curl -sL "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_Linux_amd64.tar.gz" | tar xz -C /tmp
    최신 버전의 eksctl 압축 파일을 GitHub에서 다운로드하고, 바로 /tmp 디렉터리에 압축을 푸는 작업을 수행한다.

    • curl
      파일을 다운로드할 때 사용하는 명령어.

    • -s
      출력 메시지를 숨기고 조용히(silent) 다운로드하는 옵션.

    • -L
      URL이 리다이렉트될 경우, 최종 위치까지 따라가서 다운로드하도록 하는 옵션.

    • | (파이프 연산자)
      이 연산자는 앞의 curl 명령어의 출력을 다음 명령어인 tar로 전달하는 역할을 한다. 즉, 다운로드된 압축 파일을 tar로 직접 전달한다.

    • tar
      압축 파일을 다루는 명령어로, 파일의 압축을 풀거나 묶을 때 사용한다.

    • xz
      tar의 옵션으로, x는 압축을 푼다는 의미(Extract), z는 gzip 형식의 압축을 해제한다는 뜻이다.

    • -C /tmp
      압축을 풀 때 결과 파일을 /tmp 디렉터리에 저장하라는 의미다. /tmp는 임시 디렉터리로, 사용자가 임시로 파일을 보관할 때 자주 쓰는 위치다.


  • sudo mv /tmp/eksctl /usr/local/bin
    eksctl 바이너리를 시스템이 실행 가능한 경로에 옮기는 명령어이다.

    • /usr/local/bin은 리눅스 시스템에서 실행 파일들을 저장하는 디렉터리 중 하나로, 사용자가 명령어를 입력할 때 자동으로 검색되는 경로다. 해당 경로에 파일을 옮겨야 명령어를 어디서든 쉽게 실행할 수 있다.

    • 일반 사용자 권한으로는 파일을 옮길 수 없기 때문에, sudo를 사용해서 관리자 권한으로 파일을 이동해야 한다.


eksctl에 활용할 변수 확인

echo $AWS_DEFAULT_REGION

echo $CLUSTER_NAME

echo $VPCID

echo $PubSubnet1

echo $PubSubnet2
  • 위 명령어들을 통해 미리 설정해두었던 변수 값들을 확인한다.

eksctl 명령어

  • 기본 명령어
// eksctl 명령어 확인
eksctl

// eksctl create 명령어
eksctl create

// eksctl create cluster or nodegroup 명령어 (--help)
eksctl create cluster -h

eksctl create nodegroup -h

// 지원하는 Kubernetes 버전 정보
eksctl create cluster -h | grep version

  • EKS 클러스터 기본 생성 확인 명령어

    eksctl create cluster \
       --name $CLUSTER_NAME \
       --region=$AWS_DEFAULT_REGION \
       --dry-run | yh

    --dry-run 명령어를 통해 실제 클러스터를 생성하지 않고, 생성할 때 사용될 설정을 yh를 통해 YAML 형식으로 출력하여 확인할 수 있다.


  • 노드 그룹을 제외한 EKS 클러스터 생성 확인 명령어

    eksctl create cluster \
       --name $CLUSTER_NAME \
       --region=$AWS_DEFAULT_REGION \
       --without-nodegroup \
       --dry-run | yh 
    • 환경 변수로 지정된 클러스터 이름과 리전 정보를 사용하여 노드 그룹 없이 EKS 클러스터를 생성할 준비를 하고, 실제로 생성하지 않고 어떤 작업이 수행될지를 확인하는 명령어이다.(--dry-run 옵션 사용시 실제 자원을 생성하지 않고 생성될 자원을 출력한다.)


  • 노드 그룹을 제외하고 가용 영역 2a, 2c에 EKS 클러스터 생성 확인 명령어

    eksctl create cluster \
      --name $CLUSTER_NAME \
      --region=$AWS_DEFAULT_REGION \
      --without-nodegroup \
      --zones=ap-northeast-2a,ap-northeast-2c \
      --dry-run | yh
    

  • 노드 그룹을 포함하여 EKS 클러스터 생성 확인 명령어

    eksctl create cluster \
      --name $CLUSTER_NAME \
      --region=$AWS_DEFAULT_REGION \
      --nodegroup-name=$CLUSTER_NAME-nodegroup \
      --node-type=t3.medium \
      --node-volume-size=30 \
      --zones=ap-northeast-2a,ap-northeast-2c \
      --vpc-cidr=172.20.0.0/16 \
      --ssh-access \
      --dry-run | yh
    • 서울 리전의 특정 가용 영역(ap-northeast-2a 및 ap-northeast-2c)에 t3.medium 인스턴스 타입과 30GB 볼륨을 갖춘 노드 그룹이 포함된 EKS 클러스터를 생성하는 명령어이다.


EKS 클러스터 & 관리형 노드 그룹 생성

  • EKS 클러스터 및 관리형 노드 그룹 생성 전 정보 확인
eksctl create cluster \
  --name $CLUSTER_NAME \
  --region=$AWS_DEFAULT_REGION \
  --nodegroup-name=$CLUSTER_NAME-nodegroup \
  --node-type=t3.medium \
  --node-volume-size=30 \
  --vpc-public-subnets "$PubSubnet1,$PubSubnet2" \
  --version 1.26 \
  --ssh-access \
  --external-dns-access \
  --dry-run | yh

클러스터 이름과 리전을 지정하고, t3.medium 인스턴스 타입의 노드 그룹을 생성하며, 각 노드에 30GB의 볼륨을 할당한다.

클러스터는 지정된 퍼블릭 서브넷($PubSubnet1, $PubSubnet2)에서 배포되며, Kubernetes 버전 1.26을 사용한다.

또한, SSH 접근과 외부 DNS 접근을 허용하도록 설정합니다. --dry-run 옵션을 사용해 실제 클러스터 생성 없이 설정 내용을 미리 확인하며, 이 설정 결과를 YAML 형식으로 yq를 통해 가독성 있게 출력한다.

  • EKS 클러스터 및 관리형 노드 그룹 생성
eksctl create cluster \
  --name $CLUSTER_NAME \
  --region=$AWS_DEFAULT_REGION \
  --nodegroup-name=$CLUSTER_NAME-nodegroup \
  --node-type=t3.medium \
  --node-volume-size=30 \
  --vpc-public-subnets "$PubSubnet1,$PubSubnet2" \
  --version 1.26 \
  --ssh-access \
  --external-dns-access \
  --verbose 4

verbose 옵션은 eksctl 명령어에서 실행 중에 출력되는 로그의 상세 수준을 제어하는 데 사용된다.

--verbose 0: 거의 로그를 출력하지 않으며, 기본적인 오류와 중요한 메시지만 표시된다.
--verbose 1: 일반적인 정보 메시지가 포함되며, 일반적인 사용에 적합하다.
--verbose 2: 추가적인 디버그 정보가 출력된다.
--verbose 3: 더 상세한 디버그 정보와 더 많은 내부 처리 과정을 볼 수 있다.
--verbose 4: 가장 상세한 로그가 출력되며, 명령어의 내부 동작을 모두 볼 수 있다. 모든 HTTP 요청, API 호출, 내부 상태 등이 포함된다.


EKS 클러스터 배포 자원 구성도

출처: 인프런, Ongja_CloudNet@, ⌜CloudNet@와 함께하는 Amazon EKS 기본 강의⌟

  • EKS 클러스터 IAM과 EKS 노드 IAM이 연결되어 자격 증명을 수행한다.

  • AWS 관리형 VPC에 Control Plane 자원이 생성되고, myeks-VPC에 워커 노드가 구성된다.

  • eksctl 명령으로 서브넷은 서로 다른 가용 영역의 퍼블릭 서브넷 2개만 지정되었다.

  • 워커 노드는 2개의 가용 영역에 퍼블릭 서브넷에만 구성되고, 이에 따라 Control Plane은 2개의 가용 영역에서만 생성된다.

  • 클러스터 엔드포인트 액세스는 별도로 설정하지 않아 기본 값인 퍼블릭으로 구성된다.

  • 이에 따라 myeks-host는 인터넷을 통해 API 서버와 통신할 수 있다.

  • API 서버와 워커 노드 간의 통신을 위해 EKS-owned ENI가 구성된다.




해당 글은 다음 강의의 내용을 참고한 글임을 밝힙니다. 자세한 내용은 다음 강의에서 확인해볼 수 있습니다.
인프런, Ongja_CloudNet@, ⌜CloudNet@와 함께하는 Amazon EKS 기본 강의⌟
profile
IT, 개발 관련 정보들을 기록하는 장소입니다.
post-custom-banner

0개의 댓글