해당 실습을 서울(ap-northeast-2) 및 오레곤(us-west-2) 리전에서 정상 동작하는것을 확인하였습니다. 다른 리전에서 실습을 진행할때 문제가 발생하는 경우에는 해당 깃헙 리포지토리 https://github.com/youngwjung/eks-adv-workshop에 이슈를 생성해주시기 바랍니다.

환경 설정

  1. AWS Workshop Studio 또는 각자 사용 가능한 AWS 계정으로 AWS 관리콘솔에 로그인

  2. CloudShell 실행

    image.png

    image.png

  3. 바이너리를 저장할 디렉토리 생성

    {
      mkdir ~/bin
      echo export PATH="$HOME/bin:$PATH" >> ~/.bashrc
      export PATH="$HOME/bin:$PATH"
    }
    
  4. Terraform 설치

    {
      wget <https://releases.hashicorp.com/terraform/1.9.4/terraform_1.9.4_linux_amd64.zip>
      unzip terraform_1.9.4_linux_amd64.zip terraform -d $HOME/bin
      rm terraform_1.9.4_linux_amd64.zip
      terraform --version
    }
    
  5. Helm 설치

    curl <https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3> | HELM_INSTALL_DIR=$HOME/bin bash
    
  6. 실습에서 사용할 Terraform 코드 다운로드

    git clone <https://github.com/youngwjung/eks-adv-workshop.git> \\
    && cd eks-adv-workshop
    

Terraform으로 EKS 클러스터 생성

  1. EC2 Spot 서비스 역할 생성

    aws iam create-service-linked-role --aws-service-name spot.amazonaws.com
    
  2. 실습에 사용할 Terraform 코드가 있는 브랜치로 이동

    git checkout cluster
    
  3. EKS 클러스터 생성

    {
      terraform init
      terraform apply --auto-approve \\
      --target module.vpc \\
      --target random_string.domain_prefix \\
      --target aws_route53_zone.this \\
      --target aws_route53_record.ns \\
      --target module.eks \\
      --target aws_eks_addon.coredns \\
      --target module.karpenter \\
      --target kubernetes_namespace.karpenter \\
      --target helm_release.karpenter-crd \\
      --target helm_release.karpenter
    }
    
  4. 쿠버네티스 필수 라이브러리 설치

    terraform apply --refresh=false --auto-approve
    
  5. 특정 리소스 생성(e.g. aws-ebs-csi-driver)에 실패하는 경우에는 위의 명령어 재실행

  6. Ingress-NGINX 차트 설치에 실패하는 경우에는 AWS Load Balancer Controller 재생성 후 위의 명령어 재실행

    {
      kubectl -n kube-system scale deploy aws-load-balancer-controller --replicas=0
      kubectl -n kube-system scale deploy aws-load-balancer-controller --replicas=1
    }
    
  7. kubeconfig 파일 생성

    $(terraform output --raw update_kubeconfig)
    
  8. 생성된 노드 확인

    kubectl get node
    
  9. 생성된 노드 유형 확인

    kubectl get nodeclaim
    
  10. 생성된 Pod 확인

    kubectl get pod -A
    

AWS CodeBuild + ArgoCD로 배포 파이프라인 구축