eksctl YAML 명세 작성

>다음의 내용을 참고하여 생성할 EKS 클러스터의 YAML 명세를 작성하고 적절한 위치에 저장합니다.

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: $CLUSTER_NAME
  version: "1.30"
  region: ap-northeast-2

iam:
  withOIDC: true

vpc:
  clusterEndpoints:
    publicAccess: true
    privateAccess: true

addons:
  - name: vpc-cni
    version: 1.18.1
    attachPolicyARNs:
    - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
    configurationValues: |-
      enableNetworkPolicy: "true"
  - name: coredns
  - name: kube-proxy

managedNodeGroups:
  - name: node-group-01
    amiFamily: AmazonLinux2
    instanceType: t3.large
    minSize: 2
    desiredCapacity: 2
    maxSize: 4
    privateNetworking: true
    disableIMDSv1: true
    volumeSize: 100
    labels:
      purpose: system
    iam:
      withAddonPolicies:
        albIngress: true
        ebs: true
        efs: true
        externalDNS: true

EKS 클러스터 및 노드 그룹 생성

>다음의 명령어를 실행하여 EKS 클러스터를 생성하세요.

envsubst < [1번에서 생성한 yaml 파일명] | eksctl create cluster -f -
# 로컬에 저장한 매니페스트 YAML 파일 사용

Nginx Ingress Controller

>Helm으로 Nginx Ingress Controller를 설치합니다.

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --version 4.11.2 \
  --namespace ingress-nginx --create-namespace \
  --set controller.service.type=LoadBalancer \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-type"="nlb" \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-scheme"="internet-facing" \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/aws-load-balancer-nlb-target-type"="ip" \
  --set controller.allowSnippetAnnotations=true \
  --set controller.admissionWebhooks.enabled=false

Cert manager

>Helm으로 Cert manager를 설치합니다.

helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install \
      cert-manager jetstack/cert-manager \
      --namespace cert-manager \
      --create-namespace \
      --version v1.15.3 \
      --set crds.enabled=true

Storage

>AWS에서는 다양한 스토리지 옵션을 제공하며, ale의 기본 스토리지로 Amazon Elastic File System (EFS)과 Elastic Block Store (EBS) 중 사용 목적에 맞게 선택해서 사용할 수 있습니다.

Kubernetes Metrics Server

>클러스터 내 컨테이너 리소스 정보를 수집하기 위한 Metrics Server를 설치합니다.

Kubernetes Metrics Server를 설치하기 위해 다음의 명령어를 실행합니다.

helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm repo update
helm install metrics-server metrics-server/metrics-server -n kube-system --set "args={--kubelet-insecure-tls}"

Metrics Server가 정상적으로 작동하는지 확인하기 위해 다음의 명령어를 실행합니다.

kubectl get pods -n kube-system -l app.kubernetes.io/name=metrics-server