Google Cloud에 Kf 설치(프리뷰)

이 문서에서는 GKE 클러스터를 설정한 후 미리보기에서 새 기능을 사용하여 Kf 및 해당 종속 항목을 설치하는 방법을 설명합니다.

  • Kf는 새로운 v2 래핑 스택을 사용하여 기존 애플리케이션에 클라우드 기반 빌드팩 이점을 제공합니다.
  • Config Connector를 종속 항목에서 삭제합니다.
  • serviceAccountUpdater 커스텀 IAM 역할을 삭제합니다.

시작하기 전에

GKE 클러스터 요구사항

Kf 요구사항

Kf 종속 항목 및 아키텍처 페이지에서 Kf의 구성요소에 대한 액세스 권한을 검토하고 이해합니다.

종속 항목 매트릭스는 특정 버전을 나열합니다.

Compute Engine 지원 사용 설정

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Compute Engine API를 사용 설정합니다.

    API 사용 설정

Artifact Registry 지원 사용 설정

  1. Artifact Registry API를 사용 설정합니다.

    Artifact Registry API 사용 설정

GKE 사용 설정 및 구성

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

환경 변수 설정

Linux 및 Mac

export PROJECT_ID=YOUR_PROJECT_ID
export CLUSTER_PROJECT_ID=YOUR_PROJECT_ID
export CLUSTER_NAME=kf-cluster
export COMPUTE_ZONE=us-central1-a
export COMPUTE_REGION=us-central1
export CLUSTER_LOCATION=${COMPUTE_ZONE} # Replace ZONE with REGION to switch
export NODE_COUNT=4
export MACHINE_TYPE=e2-standard-4
export NETWORK=default

Windows PowerShell

Set-Variable -Name PROJECT_ID -Value YOUR_PROJECT_ID
Set-Variable -Name CLUSTER_PROJECT_ID -Value YOUR_PROJECT_ID
Set-Variable -Name CLUSTER_NAME -Value kf-cluster
Set-Variable -Name COMPUTE_ZONE -Value us-central1-a
Set-Variable -Name COMPUTE_REGION -Value us-central1
Set-Variable -Name CLUSTER_LOCATION -Value $COMPUTE_ZONE # Replace ZONE with REGION to switch
Set-Variable -Name NODE_COUNT -Value 4
Set-Variable -Name MACHINE_TYPE -Value e2-standard-4
Set-Variable -Name NETWORK -Value default

서비스 계정 설정

워크로드 아이덴티티를 통해 Kubernetes 서비스 계정과 연결되는 Google Cloud 서비스 계정을 만듭니다. 이렇게 하면 서비스 계정 키를 만들고 삽입할 필요가 없습니다.

  1. Kf에서 사용할 서비스 계정을 만듭니다.

    gcloud iam service-accounts create ${CLUSTER_NAME}-sa \
    --project=${CLUSTER_PROJECT_ID} \
    --description="GSA for Kf ${CLUSTER_NAME}" \
    --display-name="${CLUSTER_NAME}"
  2. 서비스 계정에 Cloud Monitoring에 쓰기 액세스 권한을 위한 모니터링 측정항목 역할을 부여합니다.

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/monitoring.metricWriter"
  3. 서비스 계정에 Cloud Logging에 쓰기 액세스 권한을 위한 로깅 역할을 부여합니다.

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"

GKE 클러스터 만들기

gcloud container clusters create ${CLUSTER_NAME} \
  --project=${CLUSTER_PROJECT_ID} \
  --zone=${CLUSTER_LOCATION} \
  --num-nodes=${NODE_COUNT} \
  --machine-type=${MACHINE_TYPE} \
  --disk-size "122" \
  --network=${NETWORK} \
  --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver \
  --enable-dataplane-v2 \
  --enable-stackdriver-kubernetes \
  --enable-ip-alias \
  --enable-autorepair \
  --enable-autoupgrade \
  --scopes cloud-platform \
  --release-channel=regular \
  --workload-pool="${CLUSTER_PROJECT_ID}.svc.id.goog" \
  --service-account="${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"

방화벽 규칙 설정

Kf를 사용하려면 일부 방화벽 포트를 열어야 합니다. 마스터 노드는 포트 80, 443, 8080, 8443, 6443의 포드와 통신할 수 있어야 합니다.

워크로드 아이덴티티 사용 설정

이제 서비스 계정과 GKE 클러스터가 준비되었으므로 클러스터의 ID 네임스페이스를 클러스터에 연결합니다.

gcloud iam service-accounts add-iam-policy-binding \
  --project=${CLUSTER_PROJECT_ID} \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[kf/controller]" \
  "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"

gcloud iam service-accounts add-iam-policy-binding \
  --project=${CLUSTER_PROJECT_ID} \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[cnrm-system/cnrm-controller-manager]" \
  "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"

타겟 GKE 클러스터

다음 명령어를 실행하여 kubectl 명령줄 액세스를 구성합니다.

gcloud container clusters get-credentials ${CLUSTER_NAME} \
    --project=${CLUSTER_PROJECT_ID} \
    --zone=${CLUSTER_LOCATION}

Artifact Registry 저장소 만들기

  1. 저장할 컨테이너 이미지를 위한 Artifact Registry를 만듭니다.

    gcloud artifacts repositories create ${CLUSTER_NAME} \
      --project=${CLUSTER_PROJECT_ID} \
      --repository-format=docker \
      --location=${COMPUTE_REGION}
  2. Artifact Registry 저장소에 서비스 계정 권한을 부여합니다.

    gcloud artifacts repositories add-iam-policy-binding ${CLUSTER_NAME} \
      --project=${CLUSTER_PROJECT_ID} \
      --location=${COMPUTE_REGION} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role='roles/artifactregistry.writer'

클러스터에 소프트웨어 종속 항목 설치

  1. Cloud Service Mesh를 설치합니다.

    1. Cloud Service Mesh 설치 가이드를 따릅니다.

    2. Cloud Service Mesh를 설치한 후 게이트웨이 설치 가이드를 이용해서 인그레스 게이트웨이를 만들어야 합니다.

  2. Tekton 설치:

    kubectl apply -f "https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.29.0/release.yaml"

Kf 설치

  1. Kf CLI를 설치합니다.

    Linux

    이 명령어는 시스템의 모든 사용자에 대해 Kf CLI를 설치합니다. Cloud Shell 탭의 안내에 따라 직접 설치합니다.

    gcloud storage cp gs://kf-releases/v2.7.3/kf-linux /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Mac

    이 명령어는 시스템의 모든 사용자에 대해 kf를 설치합니다.

    gcloud storage cp gs://kf-releases/v2.7.3/kf-darwin /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Cloud Shell

    이 명령어는 bash를 사용하는 경우 Cloud Shell 인스턴스에 kf를 설치합니다. 다른 셸의 경우 지침을 수정해야 할 수 있습니다.

    mkdir -p ~/bin
    gcloud storage cp gs://kf-releases/v2.7.3/kf-linux ~/bin/kf
    chmod a+x ~/bin/kf
    echo "export PATH=$HOME/bin:$PATH" >> ~/.bashrc
    source ~/.bashrc

    Windows

    이 명령어는 kf를 현재 디렉터리에 다운로드합니다. 현재 디렉터리 이외의 다른 곳에서 호출하려는 경우 경로에 추가합니다.

    gcloud storage cp gs://kf-releases/v2.7.3/kf-windows.exe kf.exe
  2. 연산자 설치:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.7.3/operator.yaml"
  3. Kf AppDevExperience Build(ADX 빌드)를 설치합니다.

    export CONTAINER_REGISTRY=${COMPUTE_REGION}-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME}
    cat << EOF | kubectl apply --filename -
    apiVersion: builds.appdevexperience.dev/v1alpha1
    kind: BuildSystem
    metadata:
        name: buildsystem
    spec:
      secrets:
        workloadidentity:
          googleprojectid: ${CLUSTER_PROJECT_ID}
          googleserviceaccount: ${CLUSTER_NAME}-sa
      containerRegistry: ${CONTAINER_REGISTRY}
      enabled: true
    EOF
  4. 워크로드 아이덴티티용 ADX 빌드를 구성합니다.

    gcloud iam service-accounts add-iam-policy-binding \
      --project=${CLUSTER_PROJECT_ID} \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[adx-builds-system/controller]" \
      "${GSA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"
  5. Kf에 대한 연산자 구성:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.7.3/kfsystem.yaml"
  6. 보안 비밀 및 기본값 설정:

    export CONTAINER_REGISTRY=${COMPUTE_REGION}-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME}
    
    kubectl patch \
    kfsystem kfsystem \
    --type='json' \
    -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': true, 'config': {'featureFlags': {'enable_appdevexperience_builds': true}, 'spaceContainerRegistry': '${CONTAINER_REGISTRY}', 'secrets':{'workloadidentity':{'googleserviceaccount':'${CLUSTER_NAME}-sa', 'googleprojectid':'${CLUSTER_PROJECT_ID}'}}}}}]"
    

설치 유효성 검사

kf doctor --retries=20

삭제

이 단계를 수행하면 새 GKE 클러스터 만들기 및 준비 섹션에서 만든 모든 구성요소가 삭제됩니다.

  1. Google 서비스 계정 삭제:

    gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
  2. IAM 정책 결합 삭제:

    gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountAdmin"
    gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
  3. 컨테이너 이미지 저장소를 삭제합니다.

    gcloud artifacts repositories delete ${CLUSTER_NAME} \
      --location=${COMPUTE_REGION}
  4. Kf 제거:

    kubectl patch kfsystem kfsystem \
      --type='json' \
      -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': false, }}]"
  5. GKE 클러스터 삭제:

    gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}