Kf 빠른 시작

이 빠른 시작에서는 GKE 클러스터를 설정하고, Kf 및 해당 종속 항목을 설치한 후 샘플 Cloud Foundry 앱을 배포합니다.

시작하기 전에

개요

  • GKE 클러스터는 다음 요구사항을 충족해야 합니다.

삭제 섹션에는 클러스터 삭제 방법이 나와 있습니다.

Compute Engine 지원 사용 설정

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

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

    API 사용 설정

GKE 사용 설정 및 구성

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

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

새 GKE 클러스터 만들기 및 준비하기

환경 변수 설정

Linux

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}
export NODE_COUNT=4
export MACHINE_TYPE=e2-standard-4
export NETWORK=default
export KF_VERSION=v2.1.0
export TEKTON_VERSION=v0.19.0

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
Set-Variable -Name NODE_COUNT -Value 4
Set-Variable -Name MACHINE_TYPE -Value e2-standard-4
Set-Variable -Name NETWORK -Value default
Set-Variable -Name KF_VERSION -Value v2.1.0
Set-Variable -Name TEKTON_VERSION -Value v0.19.0

서비스 계정 설정

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

  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. 서비스 계정이 자체 정책을 수정할 수 있도록 허용합니다. Kf 컨트롤러는 이를 사용하여 새(이름) 공간을 정책에 추가하여 워크로드 아이덴티티에 재사용하도록 허용합니다.

    gcloud iam service-accounts add-iam-policy-binding ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com \
      --project=${CLUSTER_PROJECT_ID} \
      --role="roles/iam.serviceAccountAdmin" \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"
  3. 모니터링 측정항목 역할에 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"
  4. 로깅 역할에 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} \
  --network=${NETWORK} \
  --addons=HttpLoadBalancing,HorizontalPodAutoscaling,NetworkPolicy \
  --enable-stackdriver-kubernetes \
  --enable-ip-alias \
  --enable-network-policy \
  --enable-autorepair \
  --enable-autoupgrade \
  --scopes=https://www.googleapis.com/auth/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 \
  "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
  --project=${CLUSTER_PROJECT_ID} \
  --role="roles/iam.workloadIdentityUser" \
  --member="serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[kf/controller]"

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} \
      --repository-format=docker \
      --location=${COMPUTE_REGION}
  2. Artifact Registry 저장소에 서비스 계정 권한을 부여합니다.

    gcloud artifacts repositories add-iam-policy-binding ${CLUSTER_NAME} \
      --location=${COMPUTE_REGION} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role='roles/artifactregistry.writer'
  3. 로컬 인증을 구성합니다.

    gcloud auth configure-docker ${COMPUTE_REGION}-docker.pkg.dev

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

  1. 서비스 메시를 설치합니다.

  2. Tekton 설치:

    kubectl apply -f "https://github.com/tektoncd/pipeline/releases/download/${TEKTON_VERSION}/release.yaml"

Kf 설치

  1. Kf를 실행할 준비가 된 클러스터를 만들려면 Kf용 GKE 클러스터 만들기 및 준비하기를 참조하세요.

  2. 원하는 Kf 출시 버전을 선택하고 기록합니다. 사용 가능한 버전은 Kf 다운로드 페이지를 참조하세요.

  3. CLI 설치:

    Linux

    시스템의 모든 사용자에게 kf가 설치됩니다. Cloud Shell 탭의 안내에 따라 직접 설치합니다.

    gsutil cp gs://kf-releases/${KF_VERSION}/kf-linux /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf
    

    Mac

    시스템의 모든 사용자에게 kf가 설치됩니다.

    gsutil cp gs://kf-releases/${KF_VERSION}/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
    gsutil cp gs://kf-releases/${KF_VERSION}/kf-linux ~/bin/kf
    chmod a+x ~/bin/kf
    echo "export PATH=$HOME/bin:$PATH" >> ~/.bashrc
    source ~/.bashrc
    

    Windows

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

    gsutil cp gs://kf-releases/${KF_VERSION}/kf-windows.exe kf.exe
    
  4. 서버 구성요소 설치:

    Linux 및 Mac

    현재 디렉터리에 kf.yaml이 다운로드됩니다.

    gsutil cp gs://kf-releases/${KF_VERSION}/kf.yaml /tmp/kf.yaml
    kubectl apply -f /tmp/kf.yaml
    

    Windows

    현재 디렉터리에 kf.yaml이 다운로드됩니다.

    gsutil cp gs://kf-releases/${KF_VERSION}/kf.yaml kf.yaml
    kubectl apply -f kf.yaml
    
  5. 보안 비밀 설정:

    export WI_ANNOTATION=iam.gke.io/gcp-service-account=${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
    
    kubectl annotate serviceaccount controller ${WI_ANNOTATION} \
    --namespace kf \
    --overwrite
    
    echo "{\"apiVersion\":\"v1\",\"kind\":\"ConfigMap\",\"metadata\":{\"name\":\"config-secrets\", \"namespace\":\"kf\"},\"data\":{\"wi.googleServiceAccount\":\"${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com\"}}" | kubectl apply -f -
  6. Kf 기본값을 설정합니다. 이 값은 나중에 변경할 수 있습니다. 아래 예시에서는 와일드 카드 DNS 제공업체와 함께 도메인 템플릿을 사용하여 각 공간에 고유 도메인 이름을 제공합니다.

    export CONTAINER_REGISTRY=${COMPUTE_REGION}-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME}
    export DOMAIN='$(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io'
    
    kubectl patch configmaps config-defaults \
    -n=kf \
    -p="{\"data\":{\"spaceContainerRegistry\":\"${CONTAINER_REGISTRY}\",\"spaceClusterDomains\":\"- domain: ${DOMAIN}\"}}"
  7. 설치 유효성 검증:

    kf doctor --retries 10

애플리케이션 푸시

기본 요건

이 섹션을 완료하려면 다음이 요구됩니다.

  1. 호환되는 GKE 클러스터에 Kf가 설치되어 있어야 합니다. 자세한 내용은 Kf 설치를 참조하세요.
  2. Kf 클러스터를 타겟팅하는 .kubeconfig. 이 문서의 안내에 따라 클러스터를 만들었다면 이 부분은 이미 완료되었을 것입니다. gcloud container clusters get-credentials ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}를 사용하여 구성을 명시적으로 생성할 수 있습니다.
  3. kf CLI가 설치되어 경로에 있을 것. 자세한 내용은 Kf 설치를 참조하세요.
  4. git CLI가 설치되어 경로에 있을 것.

공간 준비

  1. 새로운 공간 만들기:

    kf create-space test-space
  2. 공간 타겟팅하기:

    kf target -s test-space

Cloud Foundry 테스트 앱 푸시

  1. test-app 저장소를 클론합니다.

    git clone https://github.com/cloudfoundry-samples/test-app go-test-app
    cd go-test-app
  2. 앱 푸시:

    kf push test-app
  3. 애플리케이션의 URL 찾기:

    1. 출력 형식을 사용하여 경로만 검색합니다.

      kf app test-app --output 'jsonpath={.status.urls[0]}'

    2. 또는 기존 CF 접근 방식에 이를 사용합니다.

      kf apps

  4. 브라우저에서 URL을 엽니다.

삭제

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

  1. GKE 클러스터 삭제:

    gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}
  2. Google 서비스 계정 삭제:

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

    gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/storage.admin"
    
    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"
  4. 컨테이너 이미지 저장소를 삭제합니다.

    gcloud artifacts repositories delete ${CLUSTER_NAME} \
      --location=${COMPUTE_REGION}