제로(無)에서 EKS Cluster 구축까지

4riend·2024년 4월 16일
1

CodeMind 프로젝트

목록 보기
12/20
post-thumbnail

AWS 환경에서 쿠버네티스를 사용하고 싶었다👀
EKS라는 단어는 많이 들어 보았지만 구축은 처음이었다. 그 과정을 공유한다 🔥🔥🔥


준비과정

AWS User 생성

나의 경우 개발용으로 계속 사용하던 루트 권한이 부여된 IAM User를 그대로 사용했다.

Bastion 서버 생성

배스천 호스트에 대해 처음 알게 되었다.
외부에서 내부 네트워크에 접근할 수 있는 유일한 통로인 셈이다 🤔
AWS 환경에서는 Bastion 서버를 EC2 인스턴스로 설정하고, 이를 통해 VPC 내의 다른 EC2 인스턴스, 데이터베이스, 애플리케이션 서버 등에 안전하게 접근 가능하다.

나의 경우 RHEL 환경으로 인스턴스를 만들었다.

인스턴스 유형은 t3.small 추천한다.
프리티어는 라이브러리 몇 개 설치하다 보면 용량이 꽉 차서 못쓴다 🤣

kubectl 설치

curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.28.5/2024-01-04/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
kubectl version --client

aws cli 설치

eksctl을 사용하려면 AWS user의 credential 설정이 필요하다.
설정을 위해선 aws cli가 필요하다.

sudo yum install unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

aws cli configuration 설정

위에서 만들었던 IAM User을 등록하자

$ aws configure
AWS Access Key ID [None]: 당신의 Access Key
AWS Secret Access Key [None]: 당신의 Secret Key
Default region name [None]: ap-northeast-2
Default output format [None]: json

eksctl cli 설치

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version

eksctl? 🔥

  • Amazon EKS (Elastic Kubernetes Service) 클러스터를 생성, 관리, 삭제하는 데 사용되는 명령줄 도구
  • Weaveworks에서 개발했으며, AWS에서 공식적으로 지원
  • Kubernetes 클러스터를 간편하게 관리할 수 있게 해주는 데 초점
  • 사용자가 복잡한 클러스터 관리 작업을 몇 개의 간단한 명령어로 수행

EKS Cluster

생성 방법 1: 명령어 입력

eksctl create cluster \
--version 1.28 \
--name eks-demo \
--vpc-nat-mode HighlyAvailable \
--region ap-northeast-2 \
--node-type t3.small \
--nodes 1 \
--with-oidc \
--ssh-access \
--ssh-public-key k8s_test \
--managed
  • --version : 클러스터에서 사용할 k8s 버전 (kubectl의 버전과 맞춰야 클러스터 생성이 되는 것 같음)
  • --vpc-nat-mode :  kubernetes의 모든 outbound는 nat gateway를 통해 나가게 되는게 default option 은 single 이라 하나만 생성된다. 개발 환경에서는 상관없을거 같지만 운영에서는 각 subnet 마다 하나씩 만드는 HighAvailable 옵션을 사용한다.
  • node-type: 생성될 node의 instance 타입
  • nodes: 생성 될 node의 갯수
  • -with-oidc: OpenID Connect (OIDC) 공급자를 클러스터와 함께 생성하도록 설정한다. OIDC는 AWS 리소스에 대한 액세스를 관리하기 위해 Kubernetes 서비스 어카운트와 IAM 역할을 연결하는 데 사용될 수 있다.
  • -ssh-access: 클러스터의 노드에 대한 SSH 접근을 허용한다. 이를 통해 관리자는 노드에 대한 접근 및 트러블슈팅 작업을 수행할 수 있다.
  • -ssh-public-key: 클러스터 노드에 대한 SSH 접근을 위해 사용할 공개 키의 이름을 지정한다. (나의 경우 k8s_test라는 이름의 키를 AWS에 미리 등록한 상태)
  • -managed: 이 옵션을 사용하면 Amazon EKS에서 관리하는 노드 그룹을 생성한다. 관리형 노드 그룹은 AWS가 노드의 프로비저닝, 스케일링, 업데이트를 자동으로 관리한다.

생성 방법 2: yaml 파일 작성

eks-cluster.yaml

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: eks-dev
  region: ap-northeast-2
  version: "1.28"

vpc:
  nat:
    gateway: HighlyAvailable

iam:
  withOIDC: true

managedNodeGroups:
  - name: managed-ng-1
    instanceType: t3.small
    desiredCapacity: 1
    ssh:
      allow: true
      publicKeyName: k8s_test

kubectl apply -f eks-cluster.yaml 명령을 통해 eks cluster를 생성 👍

노드 확인

$ kubectl get nodes -o wide
NAME                                                 STATUS   ROLES    AGE   VERSION               INTERNAL-IP       EXTERNAL-IP   OS-IMAGE         KERNEL-VERSION                  CONTAINER-RUNTIME
ip-192-168-105-142.ap-northeast-2.compute.internal   Ready    <none>   10m   v1.28.5-eks-5e0fdde   192.168.105.142   <none>        Amazon Linux 2   5.10.210-201.855.amzn2.x86_64   containerd://1.7.11

설정한 노드의 갯수에 따라 노드를 확인할 수 있다 🔥🔥🔥

EC2에서도 생성된 노드 확인 가능!


참고 문헌

profile
날씨의 아이, 진격의 거인, 로스트 아크, Java Spring

0개의 댓글