시작하기 전에
개요
GKE 클러스터 요구사항
선택사항이지만 클러스터를 Kf 전용으로 사용하는 것이 좋습니다. 호환성 매트릭스가 유지되도록 Kf 및 종속 항목만 설치하는 것이 좋습니다.
최소 4개 이상의 노드. 노드를 추가해야 하는 경우 클러스터 크기 조절을 참조하세요.
vCPU가 4개 이상 있는 최소 머신 유형(예:
e2-standard-4
). 클러스터의 머신 유형에 4개 미만의 vCPU가 있으면 여러 머신 유형에 워크로드 마이그레이션에 설명된 대로 머신 유형을 변경합니다.선택사항이지만 출시 채널에 클러스터를 등록하는 것이 좋습니다. 정적 GKE 버전이 있는 경우 출시 채널에 기존 클러스터 등록의 안내를 따릅니다.
워크로드 아이덴티티 사용 설정
Kf 요구사항. 종속 항목 매트릭스는 특정 버전을 나열합니다.
Kf에서 사용할 Tekton. 사용자용 서비스가 아닙니다.
전용 Google 서비스 계정입니다.
Compute Engine 지원 사용 설정
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Compute Engine API를 사용 설정합니다.
Artifact Registry 지원 사용 설정
- Artifact Registry API를 사용 설정합니다.
GKE 사용 설정 및 구성
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
새 GKE 클러스터 및 관련 서비스 준비
환경 변수 설정
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 서비스 계정과 연결할 GCP 서비스 계정(GSA)을 만듭니다. 이렇게 하면 서비스 계정 키를 만들고 삽입할 필요가 없습니다.
Kf에서 사용할 서비스 계정을 만듭니다.
gcloud iam service-accounts create ${CLUSTER_NAME}-sa \ --project=${CLUSTER_PROJECT_ID} \ --description="GSA for Kf ${CLUSTER_NAME}" \ --display-name="${CLUSTER_NAME}"
새 커스텀 IAM 역할을 만듭니다.
gcloud iam roles create serviceAccountUpdater \ --project=${CLUSTER_PROJECT_ID} \ --title "Service Account Updater" \ --description "This role only updates members on a GSA" \ --permissions iam.serviceAccounts.get,iam.serviceAccounts.getIamPolicy,iam.serviceAccounts.list,iam.serviceAccounts.setIamPolicy
서비스 계정이 자체 정책을 수정할 수 있도록 허용합니다. Kf 컨트롤러는 이를 사용하여 새(이름) 공간을 정책에 추가하여 워크로드 아이덴티티에 재사용하도록 허용합니다.
gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \ --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \ --role="projects/${CLUSTER_PROJECT_ID}/roles/serviceAccountUpdater"
모니터링 측정항목 역할에 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"
로깅 역할에 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 \ --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 저장소 만들기
저장할 컨테이너 이미지를 위한 Artifact Registry를 만듭니다.
gcloud artifacts repositories create ${CLUSTER_NAME} \ --project=${CLUSTER_PROJECT_ID} \ --repository-format=docker \ --location=${COMPUTE_REGION}
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.9의 Cloud Service Mesh로 설정되었는지 확인합니다.
가이드에 따라 ASM을 설치합니다.
Config Connector를 설치합니다.
필수 구성 커넥터 연산자 tar 파일을 다운로드합니다.
tar 파일의 압축을 풉니다.
tar zxvf release-bundle.tar.gz
클러스터에 구성 커넥터 연산자를 설치합니다.
kubectl apply -f operator-system/configconnector-operator.yaml
구성 커넥터 연산자를 구성합니다.
다음 YAML을
configconnector.yaml
이라는 파일에 복사합니다.# configconnector.yaml apiVersion: core.cnrm.cloud.google.com/v1beta1 kind: ConfigConnector metadata: # the name is restricted to ensure that there is only one # ConfigConnector resource installed in your cluster name: configconnector.core.cnrm.cloud.google.com spec: mode: cluster googleServiceAccount: "KF_SERVICE_ACCOUNT_NAME" # Replace with the full service account resolved from ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
클러스터에 구성을 적용합니다.
kubectl apply -f configconnector.yaml
계속하기 전에 구성 커넥터가 완전히 설치되었는지 확인합니다.
구성 커넥터는
cnrm-system
이라는 네임스페이스에서 모든 구성요소를 실행합니다. 다음 명령어를 실행하여 포드가 준비되었는지 확인합니다.kubectl wait -n cnrm-system --for=condition=Ready pod --all
구성 커넥터가 올바르게 설치된 경우 출력은 다음과 유사합니다.
pod/cnrm-controller-manager-0 condition met pod/cnrm-deletiondefender-0 condition met pod/cnrm-resource-stats-recorder-86858dcdc5-6lqzb condition met pod/cnrm-webhook-manager-58c799b8fb-kcznq condition met pod/cnrm-webhook-manager-58c799b8fb-n2zpx condition met
워크로드 아이덴티티 설정
kubectl annotate serviceaccount \ --namespace cnrm-system \ --overwrite \ cnrm-controller-manager \ iam.gke.io/gcp-service-account=${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
Tekton 설치:
kubectl apply -f "https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.23.0/release.yaml"
Kf 설치
Kf CLI를 설치합니다.
Linux
이 명령어는 시스템의 모든 사용자에 대해 Kf CLI를 설치합니다. Cloud Shell 탭의 안내에 따라 직접 설치합니다.
gcloud storage cp gs://kf-releases/v2.4.1/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.4.1/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.4.1/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.4.1/kf-windows.exe kf.exe
연산자 설치:
kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.4.1/operator.yaml"
Kf에 대한 연산자 구성:
kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.4.1/kfsystem.yaml"
보안 비밀 및 기본값 설정:
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': {'spaceContainerRegistry': '${CONTAINER_REGISTRY}', 'secrets':{'workloadidentity':{'googleserviceaccount':'${CLUSTER_NAME}-sa', 'googleprojectid':'${CLUSTER_PROJECT_ID}'}}}}}]"
설치 유효성 검사
kf doctor --retries=20
삭제
이 단계를 수행하면 새 GKE 클러스터 만들기 및 준비 섹션에서 만든 모든 구성요소가 삭제됩니다.
Google 서비스 계정 삭제:
gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
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"
컨테이너 이미지 저장소를 삭제합니다.
gcloud artifacts repositories delete ${CLUSTER_NAME} \ --location=${COMPUTE_REGION}
GKE 클러스터 삭제:
gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}