Google GKE 클러스터 생성

새 Google Cloud Platform (GCP) 계정은 $300 크레딧을 받습니다. 또한 Google과 제휴하여 GitLab은 Google Kubernetes Engine과 통합을 시작하는 새 GCP 계정에 추가 $200를 제공할 수 있습니다. 크레딧을 신청하려면 이 링크를 따르세요.

Google Kubernetes Engine (GKE)에서 새 클러스터를 만드는 방법을 Infrastructure as Code (IaC)를 통해 알아보세요. 이 프로세스는 Google 및 Kubernetes Terraform 공급 업체를 사용하여 GKE 클러스터를 만듭니다. 이 클러스터를 GitLab에 연결하려면 GitLab 에이전트를 사용하세요.

준비 사항: - Google Cloud Platform (GCP) 서비스 계정 - GitLab CI/CD 파이프라인을 실행할 수 있는 러너

단계: 1. 예제 프로젝트 가져오기. 1. Kubernetes용 에이전트 등록. 1. GCP 자격 증명 생성. 1. 프로젝트 구성. 1. 클러스터 프로비저닝.

예제 프로젝트 가져오기

GitLab을 사용하여 Infrastructure as Code를 이용해서 클러스터를 생성하려면 클러스터를 관리할 프로젝트를 만들어야 합니다. 이 튜토리얼에서는 샘플 프로젝트를 시작하여 필요에 맞게 수정하는 작업으로 진행합니다.

다음 링크를 통해 프로젝트를 가져옵니다: URL에 따라 예제 프로젝트 가져오기.

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

이 프로젝트는 다음과 같은 것을 제공합니다: - 기본값으로 이름, 위치, 노드 수 및 Kubernetes 버전이 설정된 Google Cloud Platform (GCP) 클러스터. - 클러스터에 설치된 GitLab Kubernetes용 에이전트.

에이전트 등록

GitLab 14.10에서 ‘certificate_based_clusters’라는 플래그Actions 메뉴를 인증서보다는 에이전트에 초점을 맞추도록 변경했습니다. 이 플래그는 GitLab.com, GitLab Dedicated, self-managed에서 활성화되어 있습니다.

다음과 같이 실행하여 Kubernetes용 GitLab 에이전트를 생성하세요: 1. 왼쪽 사이드바에서 운영 > Kubernetes 클러스터를 선택합니다. 1. 클러스터 연결(에이전트)를 선택합니다. 1. 기존 에이전트 선택 또는 새 이름 입력 드롭다운 목록에서 에이전트 이름을 선택하고 등록을 선택합니다. 1. GitLab은 에이전트에 대한 등록 토큰을 생성합니다. 나중에 사용할 예정이므로 이 비밀 토큰을 안전하게 보관하세요. 1. 선택 사항. Helm을 사용하는 경우, GitLab이 나중에 필요한 주소와 함께 에이전트 서버 (KAS)에 대한 Helm 명령 예제를 제공합니다.

GCP 자격 증명 생성

GCP와 GitLab API로 프로젝트를 통신하도록 설정하려면 다음과 같이 진행하세요: 1. GCP를 GitLab과 인증하려면 GCP 서비스 계정을 생성하고 다음 역할을 부여하세요: Compute Network Viewer, Kubernetes Engine Admin, Service Account User, Service Account Admin. 사용자 및 관리자 서비스 계정이 모두 필요합니다. 사용자 역할은 기본 서비스 계정노드 풀 생성할 때 사용합니다. 관리자 역할은 kube-system 네임스페이스에 서비스 계정을 생성합니다. 1. 이전 단계에서 생성한 서비스 계정 키를 JSON 파일로 다운로드합니다. 1. 컴퓨터에서 다음과 같이 JSON 파일을 base64로 인코딩하세요 (/path/to/sa-key.json을 키 경로로 바꿉니다):

MacOS
   base64 -i /path/to/sa-key.json | tr -d \\n
Linux
   base64 /path/to/sa-key.json | tr -d \\n
  1. 이 명령어의 출력을 다음 단계에서 환경 변수 BASE64_GOOGLE_CREDENTIALS로 사용하세요.

프로젝트 구성

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

필수 구성:

  1. 왼쪽 사이드바에서 설정 > CI/CD를 선택합니다.
  2. 변수를 확장합니다.
  3. 변수 BASE64_GOOGLE_CREDENTIALS를 방금 만든 base64로 인코딩된 JSON 파일로 설정합니다.
  4. 변수 TF_VAR_gcp_project를 GCP 프로젝트 ID로 설정합니다.
  5. 변수 TF_VAR_agent_token을 이전 작업에서 표시된 에이전트 토큰으로 설정합니다.
  6. 변수 TF_VAR_kas_address를 이전 작업에서 표시된 에이전트 서버 주소로 설정합니다.

선택적 구성:

variables.tf 파일에는 다음과 같은 다른 변수가 포함되어 있습니다. 이를 필요에 따라 덮어쓸 수 있습니다.

  • TF_VAR_gcp_region: 클러스터의 지역을 설정합니다.
  • TF_VAR_cluster_name: 클러스터의 이름을 설정합니다.
  • TF_VAR_cluster_description: 클러스터에 대한 설명을 설정합니다. 이 경우 $CI_PROJECT_URL로 설정하여 GitLab 프로젝트를 GCP 클러스터 세부 페이지에 참조로 만드는 것이 좋습니다. 이렇게 하면 GCP 대시보드에서 보는 클러스터를 프로비저닝한 프로젝트를 알 수 있습니다.
  • TF_VAR_machine_type: Kubernetes 노드의 머신 유형을 설정합니다.
  • TF_VAR_node_count: Kubernetes 노드의 수를 설정합니다.
  • TF_VAR_agent_namespace: GitLab 에이전트의 Kubernetes 네임스페이스를 설정합니다.

더 많은 리소스 옵션에 대해서는 Google Terraform providerKubernetes Terraform provider 문서를 참조하십시오.

Kubernetes Engine API 활성화

Google Cloud 콘솔에서 Kubernetes Engine API를 활성화합니다.

클러스터 프로비저닝

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

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

파이프라인이 성공적으로 완료되면 새로운 클러스터를 다음 위치에서 볼 수 있습니다:

클러스터 사용

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

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

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

클러스터 제거

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

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

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

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