초기 설정 글에 이어서 EKS를 구성하는 방법에 대해 상세히 기록한다.
✔️ Deploy EKS Cluster
만약 쿠버네티스의 Cluster와 내부 구조에 대한 개념이 없다면 다음 글을 읽고와도 좋다.
빠르게 훑고 싶다면 !
쿠버네티스에는 Cluster라는 개념이 있다. 클러스터 내부 구성은 다음과 같다.
Master Node - 클러스터 전체를 관리하고 통제하는 역할을 수행
- API Server - 클러스터의 API를 사용할 수 있도록 하는 컨트롤 플레인 컴포넌트
- Scheduler - 노드가 배정되지 않은 새로 생성된 파드를 감지하고, 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트
- Controller Manager - 구성 요소 복제, 워커 노드 추적, 노드 장애 처리 등 클러스터 수준의 파드들을 관리하는 컨트롤러 매니저
- etcd - 클러스터 구성을 지속적으로 키-값 형태로 저장하는 분산 데이터 스토리지
Worker Node - 컨테이너가 배포되는 물리적인 머신 실제 배포하고자 하는 어플리케이션의 실행을 담당
- Kubelet : 클러스터 안 모든 노드에서 실행되는 에이전트
- Kube-proxy : 쿠버네티스는 클러스터 안에서 별도의 가상 네트워크를 생성하고 관리하게 되는데, 이런 가상 네트워크의 동작을 관리하는 컴포넌트
- Container Runtime : 실제로 컨테이너를 실행시키는 소프트웨어 (Docker를 주로 사용)
- Pod : 컨테이너 어플리케이션의 기본 단위 (Pod 내의 컨테이너는 IP와 Port를 공유, Pod 내에 배포된 컨테이너 간에는 디스크 볼륨을 공유할 수 있다.
kubenetes는 사용자가 kubectl을 통해 API을 Kubernetes Mater Node에 call하게 되면,
마스터노드는 yaml 파일을 가지고 정의된 대로 Object를 생성하고 Worker Node에 이를 구축하게 되는 형태이다.
따라서 EKS 배포를 위한 구성 정보 파일(.yaml 형식)을 작성해줘야 한다.
클러스터를 생성하는 방식은 다음과 같은 방식이 있다.
1. Default 클러스터 생성 (.yaml 파일을 알아서 작성해주는 것이라 생각하면 된다.)
2. 직접 작성한 구성 파일(.yaml)을 사용하여 클러스터 생성
3. CLI를 이용하여 생성
📌 Default 클러스터 생성
다음 명령을 사용해 간단한 클러스터를 만든다.
eksctl create cluster
그러면 2개의 m5.large 노드가 포함된 하나의 관리형 노드 그룹이 있는 기본 리전(초기 설정 글에서 CLI 초기 설정에서 지정했던 그대로)에 EKS 클러스터가 생성된다.
클러스터가 생성되면 적절한 kubernetes 구성이 kubeconfig 파일에 추가된다. 이것은 환경 변수 KUBECONFIG또는 ~/.kube/config 기본적으로 구성한 파일이다. kubeconfig 파일의 경로는 --kubeconfig플래그를 사용하여 재정의할 수 있다.
📌 구성 파일(.yaml)을 사용하여 클러스터 생성
yaml 파일의 작성 방법에 대해 완벽하게 이해할 수록 좋다.
하단의 링크들에는 yaml 파일의 작성 방법에 대한 내용이 기술되어 있다.
Kubernetes Deployment를 위한 필수 필드와 오브젝트 spec을 보여주는 .yaml 파일 예시
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
간단하게라도 yaml에서 핵심 요소들이 무엇을 의미하는지 알아보도록 하자
- apiVersion
이 오브젝트를 생성하기 위해 사용하고 있는 Kubernetes API version이 어떤 것인지? - kind
어떤 종류의 오브젝트를 생성하고자 하는지 - metadata
이름 문자열, UID, 그리고 선택적인 네임스페이스를 포함해 오브젝트를 유일하게 구분지어 줄 데이터 - spec
오브젝트에 대해 어떤 상태를 의도하는지- replicas
띄워놓을 Pod 수를 정의하는 것이며, 파드가 죽더라도 이 Replicas 수에 맞게 다시 살아나게 된다.
- replicas
나는 구성 파일을 이용해 클러스터를 생성할 것이다. EKS 배포를 위한 .yaml 파일을 작성해본다.
파일 명을 정하고 .yaml 형식으로 만들어 원하는 내용을 작성해준다.
eksctl create cluster -f ./eks-cluster-config.yml
작성을 마쳤다면 위의 명령줄을 이용해 클러스터를 생성한다.
Cluster 구성까지 약 10~15분 정도의 시간이 소요되므로 waiting for CloudFormation stack "eksctl-cloud-eks-cluster-nodegroup-cloud-eks-workers" 과 같은 메세지가 계속 반복적으로 떠도 당황하지 말자
클러스터를 정상적으로 생성 중이라는 것을 알려주는 메세지이다.
📌 CLI를 이용해 클러스터 생성
eksctl create cluster \
--name cloud-eks-01 \
--version 1.18 \
--region ap-northeast-2 \
--zones=ap-northeast-2a,ap-northeast-2c \
--nodegroup-name cloud-eks-workers \
--nodes 1 \
--nodes-min 1 \
--nodes-max 3 \
--with-oidc \
--managed \
--alb-ingress-access \
--spot \
--instance-types=c4.large,c5.large
✔️ EKS Cluster 접속 확인
위 이미지와 같은 결과가 출력된다면 클러스터가 정상적으로 생성된 것이다.
kubectl get nodes
다음 명령줄을 통해 추가된 node를 확인할 수 있다.
참고
'Public Cloud > AWS' 카테고리의 다른 글
[AWS] AWS의 컨테이너 사용/배포 서비스 (0) | 2022.03.18 |
---|---|
AWS EKS로 웹 앱을 배포해보자 ! - 2. Application 배포하기 (0) | 2022.03.16 |
AWS EKS로 웹 앱을 배포해보자 ! - 0. 초기 설정 (0) | 2022.03.16 |
[AWS] AWS EKS란 ? (0) | 2022.03.15 |
[AWS] Amazon Compute Services (0) | 2022.03.02 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!