Google Kubernetes Engine에서 Jenkins 설정

이 가이드에서는 소프트웨어 제공 파이프라인을 조정하기 위해 GKE에서 Jenkins를 설정하는 방법을 보여줍니다.

목표

  • GKE에서 Kubernetes 클러스터를 만듭니다.
  • Helm을 사용하여 Jenkins를 설치합니다.
  • Jenkins에 연결합니다.

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud Platform 구성요소를 사용합니다.

  • Compute Engine
  • Google Kubernetes Engine
  • Cloud Build

가격 계산기를 사용하면 예상 사용량을 기준으로 예상 비용을 산출할 수 있습니다. 새 GCP 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

  1. Google 계정에 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Google Cloud Platform 프로젝트를 선택하거나 만듭니다.

    리소스 관리 페이지로 이동

  3. Google Cloud Platform 프로젝트에 결제가 사용 설정되어 있는지 확인하세요.

    결제 사용 설정 방법 알아보기

  4. Compute Engine, GKE, and Cloud Build APIs를 사용 설정합니다.

    APIs 사용 설정

환경 준비

먼저 배포 환경을 준비합니다.

  1. Cloud Shell을 활성화합니다. Cloud Shell은 GCP Console의 명령줄에 대한 액세스를 제공하며 GCP 개발에 필요한 Cloud SDK 및 기타 도구를 포함합니다. Cloud Shell은 프로비저닝하는 데 몇 분 정도 걸릴 수 있습니다.

    Cloud Shell 활성화

    프로세스가 완료되면 다음 출력이 표시됩니다.

    Welcome to Cloud Shell! For help, visit https://cloud.google.com/cloud-shell/help.
    
  2. 기본 Compute Engine 영역을 us-east1-d로 설정합니다.

    gcloud config set compute/zone us-east1-d
    
  3. 샘플 코드를 복제하거나 zip 파일을 다운로드합니다.

    git clone https://github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes.git
    

    Git 저장소에는 Jenkins를 배포하기 위해 사용할 Kubernetes 매니페스트가 포함됩니다. 매니페스트 및 해당 설정은 GKE를 위한 Jenkins 구성을 참조하세요.

  4. 샘플 코드 디렉토리로 이동합니다.

    cd continuous-deployment-on-kubernetes
    

Kubernetes 클러스터 만들기

GKE를 사용하여 Kubernetes 클러스터를 만들고 관리할 수 있습니다.

  1. GKE를 사용해서 Kubernetes 클러스터를 프로비저닝합니다. 이 단계를 완료하려면 몇 분 정도 걸릴 수 있습니다.

    gcloud container clusters create jenkins-cd \
      --machine-type n1-standard-2 --num-nodes 2 \
      --scopes "https://www.googleapis.com/auth/projecthosting,cloud-platform"
    

    추가 범위를 사용하면 Jenkins가 Cloud Source Repositories 및 Container Registry에 액세스할 수 있습니다.

  2. 클러스터가 실행 중인지 확인합니다.

    gcloud container clusters list
    

    STATUS 열에서 RUNNING을 찾습니다.

    NAME        LOCATION    MASTER_VERSION  MASTER_IP    MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
    jenkins-cd  us-east1-d  1.9.7-gke.3     35.231.8.57  n1-standard-2  1.9.7-gke.3   2          RUNNING
    
  3. 클러스터에 연결할 수 있는지 확인합니다.

    kubectl cluster-info
    

    클러스터에 성공적으로 연결할 수 있으면 Kubernetes 구성요소 URL이 표시됩니다.

    Kubernetes master is running at https://130.211.178.38
    GLBCDefaultBackend is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/default-http-backend
    Heapster is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/heapster
    KubeDNS is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/kube-dns
    kubernetes-dashboard is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard
    

Helm 설치

Helm을 사용하여 저장소에서 Jenkins를 배포합니다.

  1. Helm 바이너리를 다운로드하고 설치합니다.

    wget https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linux-amd64.tar.gz
    
  2. 로컬 시스템에 파일의 압축을 풉니다.

    tar zxfv helm-v2.9.1-linux-amd64.tar.gz
    cp linux-amd64/helm .
    
  3. 클러스터에서 Jenkins 권한을 부여할 수 있도록 클러스터의 RBAC에 자신을 클러스터 관리자로 추가합니다.

    kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin \
            --user=$(gcloud config get-value account)
    
  4. Helm의 서버 측인 Tiller에 클러스터의 cluster-admin 역할을 부여합니다.

    kubectl create serviceaccount tiller --namespace kube-system
    kubectl create clusterrolebinding tiller-admin-binding --clusterrole=cluster-admin \
        --serviceaccount=kube-system:tiller
    
  5. Helm을 초기화합니다. 그러면 Tiller가 클러스터에 올바르게 설치됩니다.

    ./helm init --service-account=tiller
    ./helm repo update
    
  6. 다음 명령어를 실행하여 Helm이 올바르게 설치되었는지 확인합니다.

    ./helm version
    

    클라이언트 및 서버 모두 버전이 v2.9.1로 표시되는 것을 볼 수 있습니다.

    Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
    

Jenkins 설치

커스텀 값 파일을 사용해서 Jenkins 설치를 구성합니다. 구성에 대한 자세한 내용은 jenkins/values.yaml 파일을 참조하세요.

  1. Helm CLI를 사용해서 해당 구성 집합으로 차트를 배포합니다.

    ./helm install -n cd stable/jenkins -f jenkins/values.yaml --version 0.16.6 --wait
    

    Jenkins 설치 구성에 대한 자세한 내용은 Jenkins 차트의 문서 페이지를 참조하세요.

  2. 명령어가 완료되면 Jenkins pod가 Running 상태가 되고 컨테이너가 READY 상태인지 확인합니다.

    kubectl get pods
    

    READY 열에 1/1이 표시되고 STATUS 열에 Running이 표시됩니다. Jenkins가 초기화를 완료하려면 몇 분 정도 걸릴 수 있습니다.

    NAME                          READY     STATUS    RESTARTS   AGE
    cd-jenkins-7c786475dd-vbhg4   1/1       Running   0          1m
    
  3. Cloud Shell에서 Jenkins UI에 대한 포트 전달을 설정합니다.

    export POD_NAME=$(kubectl get pods -l "component=cd-jenkins-master" -o jsonpath="{.items[0].metadata.name}")
    kubectl port-forward $POD_NAME 8080:8080 >> /dev/null &
    
  4. Jenkins 서비스가 올바르게 생성되었는지 확인합니다.

    kubectl get svc
    

    출력 예:

    NAME               CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
    cd-jenkins         10.35.249.67   <none>        8080/TCP    3h
    cd-jenkins-agent   10.35.248.1    <none>        50000/TCP   3h
    kubernetes         10.35.240.1    <none>        443/TCP     9h
    

Jenkins 설치는 Kubernetes 플러그인을 사용해서 빌더 에이전트를 만듭니다. Jenkins 마스터가 빌드를 실행해야 할 때 필요에 따라 자동으로 시작됩니다. 해당 작업이 완료되면 자동으로 종료되고 리소스가 클러스터의 리소스 풀에 다시 추가됩니다.

Jenkins에 연결

  1. Jenkins Helm 차트에서 자동으로 생성된 관리자 비밀번호를 검색합니다.

    printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
    
  2. Jenkins 사용자 인터페이스를 열려면 Cloud Shell에서 웹 미리보기를 클릭하고 포트 8080에서 미리보기를 클릭합니다.

    port8080

  3. 창 오른쪽 위에서 로그인을 클릭합니다. 사용자 필드에 admin을 입력하고 비밀번호 필드에 이전 단계에서 가져온 비밀번호 값을 입력합니다.

  4. 로그인 버튼을 클릭합니다.

이제 GKE에서 관리되는 Jenkins 및 Kubernetes 클러스터에 액세스할 수 있습니다. 이 솔루션을 더 진행할 경우, 지속적 배포 파이프라인에서 해당 구성요소를 사용할 수 있습니다.

삭제

이 가이드를 완료한 후에는 향후에 요금이 청구되지 않도록 GCP에서 만든 리소스를 삭제합니다.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 프로젝트 페이지로 이동합니다.

    프로젝트 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

디스크 삭제

  1. GCP Console에서 디스크 페이지로 이동합니다.

    디스크 페이지로 이동

  2. 다음 옆에 있는 체크박스를 클릭합니다. jenkins-home 디스크.
  3. 페이지 상단의 삭제 삭제를 클릭하여 디스크를 삭제합니다.

인스턴스 삭제

Compute Engine 인스턴스를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 다음 옆에 있는 체크박스를 클릭합니다. 삭제할 인스턴스
  3. 페이지 상단의 삭제 삭제를 클릭하여 인스턴스를 삭제합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...