Amazon EKS 클러스터 생성
Amazon Elastic Kubernetes Service (EKS)에서 클러스터를 생성할 수 있습니다. 이 과정은 AWS 및 Kubernetes Terraform 공급자를 사용하여 EKS 클러스터를 생성합니다. GitLab 에이전트를 사용하여 클러스터를 GitLab에 연결합니다.
전제 조건:
절차:
예제 프로젝트 가져오기
GitLab을 사용하여 IaC(Infrastructure as Code)를 통해 클러스터를 만들려면 클러스터를 관리할 프로젝트를 만들어야 합니다. 이 튜토리얼에서는 샘플 프로젝트를 시작점으로 삼고 필요에 따라 수정합니다.
다음을 수행하여 프로젝트를 가져옵니다:
- GitLab에서 왼쪽 사이드바에서 검색 또는 이동을 선택합니다.
- 내 모든 프로젝트 보기를 선택합니다.
- 페이지 오른쪽에서 새 프로젝트를 선택합니다.
- 프로젝트 가져오기를 선택합니다.
- URL로 리포지토리 가져오기를 선택합니다.
-
Git 저장소 URL란에
https://gitlab.com/gitlab-org/configure/examples/gitlab-terraform-eks.git
을 입력합니다. - 필드를 작성한 후 프로젝트 생성을 선택합니다.
이 프로젝트는 다음을 제공합니다:
- Amazon Virtual Private Cloud (VPC).
- Amazon Elastic Kubernetes Service (EKS) 클러스터.
- 클러스터에 설치된 GitLab 에이전트 for Kubernetes.
에이전트 등록
certificate_based_clusters
는 Actions 메뉴를 인증서가 아닌 에이전트로 변경했습니다. 해당 플래그는 GitLab.com, GitLab 전용, 자체 관리형에서 사용 가능합니다.Kubernetes를 위해 GitLab 에이전트를 생성하려면 다음을 수행합니다:
- 왼쪽 사이드바에서 운영 > Kubernetes 클러스터를 선택합니다.
- 클러스터 연결(에이전트)를 선택합니다.
-
에이전트 선택 드롭다운 목록에서
eks-agent
를 선택하고 에이전트 등록을 선택합니다. - GitLab이 에이전트에 대한 등록 토큰을 생성합니다. 이 보안 토큰을 안전하게 보관해야 합니다. 나중에 사용해야 합니다.
- GitLab은 나중에 필요한 에이전트 서버(KAS) 주소를 제공합니다.
AWS 자격 증명 설정
GitLab과 AWS를 인증하려면 AWS 자격 증명을 설정합니다.
- IAM 사용자 또는 IAM 역할을 생성합니다.
-
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": "*" } ] }
- 사용자 또는 역할에 대한 액세스 키를 생성합니다.
- 액세스 키 및 비밀을 저장합니다. 이는 AWS를 GitLab과 인증하는 데 사용합니다.
프로젝트 구성
프로젝트를 구성하려면 CI/CD 환경 변수를 사용합니다.
필수 구성:
- 왼쪽 사이드바에서 설정 > CI/CD를 선택합니다.
- 변수를 확장합니다.
- 변수
AWS_ACCESS_KEY_ID
를 AWS 액세스 키 ID로 설정합니다. - 변수
AWS_SECRET_ACCESS_KEY
를 AWS 비밀 액세스 키로 설정합니다. - 변수
TF_VAR_agent_token
을 이전 작업에 표시된 에이전트 토큰으로 설정합니다. - 변수
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 공급자 문서와 Kubernetes Terraform 공급자 문서를 참조하세요.
클러스터 프로비저닝
프로젝트를 구성한 후 클러스터를 수동으로 프로비저닝(trigger)합니다. GitLab에서 다음 단계를 따르세요:
- 왼쪽 사이드바에서 빌드 > 파이프라인으로 이동합니다.
- Play() 옆에 있는 드롭다운 목록 아이콘()을 선택합니다.
- 수동으로 배포 작업을 트리거(trigger)하기 위해 Deploy를 선택합니다.
파이프라인이 성공적으로 완료되면 새 클러스터를 확인할 수 있습니다:
- AWS의 경우: EKS 콘솔에서 Amazon EKS > 클러스터를 선택합니다.
- GitLab의 경우: 왼쪽 사이드바에서 운영 > 쿠버네티스 클러스터를 선택합니다.
클러스터 사용
클러스터를 프로비저닝한 후 GitLab에 연결되어 배포(deploy)에 준비가 되었습니다. 연결 상태를 확인하려면:
- 왼쪽 사이드바에서 운영 > 쿠버네티스 클러스터를 선택합니다.
- 목록에서 연결 상태(Connection status) 열을 확인합니다.
연결의 기능에 대한 자세한 정보는 쿠버네티스 문서에서 확인하세요.
클러스터 제거
기본적으로 파이프라인에 정리(clean-up) 작업은 포함되어 있지 않습니다. 모든 생성된 리소스를 제거하려면 정리(clean-up) 작업을 실행하기 전에 GitLab CI/CD 템플릿을 수정해야 합니다.
모든 리소스를 제거하려면:
-
.gitlab-ci.yml
파일에 다음을 추가합니다:stages: - init - validate - test - build - deploy - cleanup destroy: extends: .terraform:destroy needs: []
- 왼쪽 사이드바에서 빌드 > 파이프라인을 선택한 후 가장 최근 파이프라인을 선택합니다.
-
destroy
작업에서 Play()을 선택합니다.