Amazon EKS 클러스터 생성
IaC(Infrastructure as Code)를 통해 Amazon Elastic Kubernetes Service(EKS)에 클러스터를 생성할 수 있습니다. GitLab에서 IaC를 사용하여 클러스터를 만들려면 클러스터를 관리할 프로젝트를 만들어야 합니다.
IaC(Infrastructure as Code)를 통해 Amazon Elastic Kubernetes Service(EKS)에 클러스터를 생성할 수 있습니다. 이 프로세스는 AWS와 Kubernetes Terraform 공급자를 사용하여 EKS 클러스터를 생성합니다. GitLab Kubernetes 에이전트를 사용하여 클러스터를 GitLab에 연결합니다.
시작하기 전에:
단계:
예제 프로젝트 임포트#
GitLab에서 IaC를 사용하여 클러스터를 만들려면 클러스터를 관리할 프로젝트를 만들어야 합니다. 이 튜토리얼에서는 샘플 프로젝트로 시작하여 필요에 맞게 수정합니다.
프로젝트를 임포트하려면:
- 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 Kubernetes 에이전트.
에이전트 등록#
히스토리
Kubernetes용 GitLab 에이전트를 만들려면:
- 왼쪽 사이드바에서 운영 > Kubernetes 클러스터를 선택합니다.
- **클러스터 연결(에이전트)**을 선택합니다.
- 에이전트 선택 드롭다운 목록에서
eks-agent를 선택하고 에이전트 등록을 선택합니다. - GitLab이 에이전트의 등록 토큰을 생성합니다. 나중에 필요하므로 이 비밀 토큰을 안전하게 저장합니다.
- GitLab이 에이전트 서버(KAS) 주소를 제공합니다. 이것도 나중에 필요합니다.
AWS 자격 증명 설정#
GitLab으로 AWS를 인증할 때 AWS 자격 증명을 설정합니다.
-
IAM 사용자 또는 역할이 프로젝트에 적합한 권한을 가지고 있는지 확인합니다. 이 예제 프로젝트의 경우 다음 JSON 블록에 나열된 권한이 있어야 합니다. 자체 프로젝트를 설정할 때 이 권한을 확장할 수 있습니다.
// IAM custom Policy definition { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ec2:*", "eks:*", "elasticloadbalancing:*", "autoscaling:*", "cloudwatch:*", "logs:*", "kms:DescribeKey", "kms:TagResource", "kms:UntagResource", "kms:ListResourceTags", "kms:CreateKey", "kms:CreateAlias", "kms:ListAliases", "kms:DeleteAlias", "iam:AddRoleToInstanceProfile", "iam:AttachRolePolicy", "iam:CreateInstanceProfile", "iam:CreateRole", "iam:CreateServiceLinkedRole", "iam:GetRole", "iam:ListAttachedRolePolicies", "iam:ListRolePolicies", "iam:ListRoles", "iam:PassRole", "iam:DetachRolePolicy", "iam:ListInstanceProfilesForRole", "iam:DeleteRole", "iam:CreateOpenIDConnectProvider", "iam:CreatePolicy", "iam:TagOpenIDConnectProvider", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetOpenIDConnectProvider", "iam:DeleteOpenIDConnectProvider", "iam:ListPolicyVersions", "iam:DeletePolicy" ], "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 에이전트의 Kubernetes 네임스페이스를 설정합니다.
추가 리소스 옵션은 AWS Terraform 공급자와 Kubernetes Terraform 공급자 문서를 참조하세요.
클러스터 프로비저닝#
프로젝트를 구성한 후 클러스터 프로비저닝을 수동으로 트리거합니다. GitLab에서:
- 왼쪽 사이드바에서 빌드 > 파이프라인으로 이동합니다.
- Play([play]) 옆에서 드롭다운 목록 아이콘([chevron-lg-down])을 선택합니다.
- Deploy를 선택하여 배포 잡을 수동으로 트리거합니다.
파이프라인이 성공적으로 완료되면 새 클러스터를 볼 수 있습니다:
- AWS에서: EKS 콘솔에서 Amazon EKS > 클러스터를 선택합니다.
- GitLab에서: 왼쪽 사이드바에서 운영 > Kubernetes 클러스터를 선택합니다.
클러스터 사용#
클러스터를 프로비저닝하면 GitLab에 연결되어 배포할 준비가 됩니다. 연결을 확인하려면:
- 왼쪽 사이드바에서 운영 > Kubernetes 클러스터를 선택합니다.
- 목록에서 연결 상태 열을 확인합니다.
연결 기능에 대한 자세한 내용은 GitLab Kubernetes 에이전트 문서를 참조하세요.
클러스터 제거#
기본적으로 파이프라인에 정리 잡이 포함되어 있지 않습니다. 만들어진 모든 리소스를 제거하려면 정리 잡을 실행하기 전에 GitLab CI/CD 템플릿을 수정해야 합니다.
모든 리소스를 제거하려면:
-
.gitlab-ci.yml파일에 다음을 추가합니다:stages: - init - validate - test - build - deploy - cleanup destroy: extends: .terraform:destroy needs: [] -
왼쪽 사이드바에서 빌드 > 파이프라인을 선택하고 가장 최근 파이프라인을 선택합니다.
-
destroy잡에서 Play([play])를 선택합니다.
