Amazon EKS 클러스터 생성

Amazon Elastic Kubernetes Service (EKS)에서 클러스터를 생성할 수 있습니다. 이 프로세스는 AWS 및 Kubernetes Terraform 공급자를 사용하여 EKS 클러스터를 생성합니다. EKS 클러스터를 GitLab에 연결하려면 GitLab 쿠버네티스 에이전트를 사용합니다.

필수 조건:

  • 구성된 보안 자격 증명이 있는 Amazon Web Services (AWS) 계정.
  • GitLab CI/CD 파이프라인을 실행하는 데 사용할 수 있는 런너.

단계:

  1. 예제 프로젝트 가져오기.
  2. 쿠버네티스 에이전트 등록.
  3. 프로젝트 구성.
  4. 클러스터 프로비저닝.

예제 프로젝트 가져오기

IaC(Infrastructure as Code)를 사용하여 GitLab에서 클러스터를 생성하려면 해당 클러스터를 관리할 프로젝트를 생성해야 합니다. 이 자습서에서는 예제 프로젝트를 활용하여 시작하고 필요에 따라 수정합니다.

다음을 수행하여 프로젝트를 가져옵니다:

  1. GitLab에서 왼쪽 사이드바에서 검색 또는 이동을 선택합니다.
  2. 내 모든 프로젝트 보기를 선택합니다.
  3. 페이지 오른쪽에서 새 프로젝트를 선택합니다.
  4. 프로젝트 가져오기를 선택합니다.
  5. URL에 의한 저장소를 선택합니다.
  6. Git 저장소 URLhttps://gitlab.com/gitlab-org/configure/examples/gitlab-terraform-eks.git을 입력합니다.
  7. 필드를 작성하고 프로젝트 생성을 선택합니다.

이 프로젝트는 다음을 제공합니다:

에이전트 등록

플래그: GitLab 14.10에서 certificate_based_clusters라는 플래그가 에이전트보다 인증서에 중점을 둔 작업 메뉴로 변경되었습니다. 이 플래그는 GitLab.com, GitLab Dedicated 및 Self-Managed에서 활성화됩니다.

쿠버네티스를 위한 GitLab 에이전트를 생성하려면:

  1. 왼쪽 사이드바에서 운영 > 쿠버네티스 클러스터를 선택합니다.
  2. 클러스터 연결 (에이전트)를 선택합니다.
  3. 에이전트 선택 드롭다운 목록에서 eks-agent를 선택하고 에이전트 등록을 선택합니다.
  4. GitLab은 에이전트를 위한 등록 토큰을 생성합니다. 나중에 필요하므로 이 비밀 토큰을 안전하게 저장하세요.
  5. GitLab은 에이전트 서버(KAS)의 주소도 제공하는데, 나중에 필요합니다.

AWS 자격 증명 설정

AWS 자격 증명을 설정하여 GitLab과 AWS를 인증하려면 다음을 수행합니다.

  1. IAM 사용자 또는 IAM 역할을 생성합니다.
  2. IAM 사용자 또는 역할이 프로젝트에 적합한 권한을 갖고 있는지 확인합니다. 이 예제 프로젝트에서는 아래 권한이 있어야 합니다. 나만의 프로젝트를 설정할 때 이를 확장할 수 있습니다.

    // IAM 사용자 정의 정책 정의
    {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Sid": "VisualEditor0",
              "Effect": "Allow",
              "Action": [
                  "ec2:*",
                  "eks:*",
                  "elasticloadbalancing:*",
                  "autoscaling:*",
                  "cloudwatch:*",
                  "logs:*",
                  "kms:DescribeKey",
                  "iam:AddRoleToInstanceProfile",
                  "iam:AttachRolePolicy",
                  "iam:CreateInstanceProfile",
                  "iam:CreateRole",
                  "iam:CreateServiceLinkedRole",
                  "iam:GetRole",
                  "iam:ListAttachedRolePolicies",
                  "iam:ListRolePolicies",
                  "iam:ListRoles",
                  "iam:PassRole",
                  // destroy 단계에 필요
                  "iam:DetachRolePolicy",
                  "iam:ListInstanceProfilesForRole",
                  "iam:DeleteRole"
              ],
              "Resource": "*"
          }
      ]
    }
    
  3. 사용자나 역할에게 액세스 키를 생성합니다.
  4. 액세스 키와 비밀을 저장합니다. 이 정보는 GitLab과 AWS를 인증하는 데 필요합니다.

프로젝트 구성

CI/CD 환경 변수를 사용하여 프로젝트를 구성합니다.

필수 구성:

  1. 왼쪽 사이드바에서 설정 > CI/CD를 선택합니다.
  2. 변수를 확장합니다.
  3. 변수 AWS_ACCESS_KEY_ID를 AWS 액세스 키 ID로 설정합니다.
  4. 변수 AWS_SECRET_ACCESS_KEY를 AWS 비밀 액세스 키로 설정합니다.
  5. 변수 TF_VAR_agent_token을 이전 작업에서 표시된 에이전트 토큰으로 설정합니다.
  6. 변수 TF_VAR_kas_address를 이전 작업에서 표시된 에이전트 서버 주소로 설정합니다.

선택적 구성:

variables.tf 파일에는 필요에 따라 재정의할 수 있는 다른 변수가 포함되어 있습니다:

  • TF_VAR_region: 클러스터의 지역을 설정합니다.
  • TF_VAR_cluster_name: 클러스터의 이름을 설정합니다.
  • TF_VAR_cluster_version: Kubernetes의 버전을 설정합니다.
  • TF_VAR_instance_type: Kubernetes 노드의 인스턴스 유형을 설정합니다.
  • TF_VAR_instance_count: Kubernetes 노드의 수를 설정합니다.
  • TF_VAR_agent_namespace: GitLab 에이전트의 Kubernetes 네임스페이스를 설정합니다.

추가 리소스 옵션에 대한 자세한 정보는 AWS Terraform providerKubernetes Terraform provider 문서를 참조하세요.

클러스터 프로비저닝

프로젝트를 구성한 후에는 클러스터 프로비저닝을 수동으로 트리거합니다. GitLab에서:

  1. 왼쪽 사이드바에서 빌드 > 파이프라인으로 이동합니다.
  2. 재생 () 옆에서 드롭다운 목록 아이콘 ()을 선택합니다.
  3. 수동으로 배포 작업을 트리거하기 위해 배포를 선택합니다.

파이프라인이 성공적으로 완료되면 새로운 클러스터를 확인할 수 있습니다:

  • AWS에서: EKS 콘솔에서 Amazon EKS > 클러스터를 선택합니다.
  • GitLab에서: 왼쪽 사이드바에서 운영 > Kubernetes 클러스터를 선택합니다.

클러스터 사용

클러스터를 프로비저닝한 후에 GitLab에 연결되어 배포 준비가 된 상태입니다. 연결을 확인하려면:

  1. 왼쪽 사이드바에서 운영 > Kubernetes 클러스터를 선택합니다.
  2. 목록에서 연결 상태 열을 확인합니다.

연결의 기능에 대한 자세한 정보는 Kubernetes 문서용 GitLab 에이전트를 참조하세요.

클러스터 제거

기본적으로 파이프라인에는 정리 작업이 포함되어 있지 않습니다. 생성된 모든 리소스를 제거하려면 정리 작업을 실행하기 전에 GitLab CI/CD 템플릿을 수정해여야 합니다.

모든 리소스를 제거하려면 다음을 수행합니다:

  1. 다음을 .gitlab-ci.yml 파일에 추가합니다:

    stages:
      - init
      - validate
      - test
      - build
      - deploy
      - cleanup
    
    destroy:
      extends: .terraform:destroy
      needs: []
    
  2. 왼쪽 사이드바에서 빌드 > 파이프라인을 선택하고 가장 최근 파이프라인을 선택합니다.
  3. destroy 작업에서 재생 ()을 선택합니다.