Prima di iniziare
Panoramica
Il cluster GKE deve soddisfare i seguenti requisiti:
Facoltativo, ma consigliato, il cluster deve essere dedicato a Kf. Ti consigliamo di installare solo Kf e le relative dipendenze per garantire la manutenzione della matrice di compatibilità.
Almeno quattro nodi. Se devi aggiungere nodi, consulta Ridimensionare un cluster.
Il tipo di macchina minimo che ha almeno quattro vCPU, ad esempio
e2-standard-4. Se il tipo di macchina per il cluster non ha almeno quattro vCPU, modificalo come descritto in Migrare i carichi di lavoro a tipi di macchine diversi.Facoltativo, ma consigliato, registra il cluster in un canale di rilascio. Se hai una versione GKE statica, segui le istruzioni riportate in Registrare un cluster esistente in un canale di rilascio.
Workload Identity abilitata.
Artifact Registry abilitato.
Tekton installato. Per la versione, consulta la matrice delle dipendenze.
Un account di servizio Google con il seguente criterio IAM (le istruzioni per la creazione sono riportate di seguito):
roles/iam.serviceAccountAdminserviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller](per il membroserviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller])
La sezione Pulizia contiene le istruzioni per eliminare il cluster.
Abilitare il supporto per Compute Engine
- Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Abilita l'API Compute Engine.
Abilitare e configurare GKE
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Creare e preparare un nuovo cluster GKE
Impostare le variabili di ambiente
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.2.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.2.0 Set-Variable -Name TEKTON_VERSION -Value v0.19.0
Creazione dell'account di servizio
Crea un account di servizio Google Cloud (GSA) che verrà associato a un account di servizio Kubernetes tramite Workload Identity. In questo modo non è necessario creare e inserire una chiave dell'account di servizio.
Crea il account di servizio che verrà utilizzato da Kf.
gcloud iam service-accounts create ${CLUSTER_NAME}-sa \ --project=${CLUSTER_PROJECT_ID} \ --description="GSA for Kf ${CLUSTER_NAME}" \ --display-name="${CLUSTER_NAME}"Consenti al account di servizio di modificare il proprio criterio. Il controller Kf lo utilizzerà per aggiungere nuovi spazi dei nomi al criterio, consentendone il riutilizzo per Workload Identity.
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"Assegna il ruolo delle metriche di monitoraggio per l'accesso in scrittura a 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"Assegna il ruolo di logging per l'accesso in scrittura a 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"
Creare un cluster 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"Impostare regole firewall
Kf richiede l'apertura di alcune porte del firewall. Il nodo master deve essere in grado di comunicare con i pod sulle porte 80, 443, 8080, 8443 e 6443.
Abilitare Workload Identity
Ora che hai un account di servizio e un cluster GKE, associa lo spazio dei nomi dell'identità del cluster al cluster.
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]"Cluster GKE di destinazione
Configura l'accesso alla riga di comando kubectl eseguendo il comando seguente.
gcloud container clusters get-credentials ${CLUSTER_NAME} \
--project=${CLUSTER_PROJECT_ID} \
--zone=${CLUSTER_LOCATION}Creare un repository Artifact Registry
Crea un repository Artifact Registry in cui archiviare le immagini container.
gcloud artifacts repositories create ${CLUSTER_NAME} \ --repository-format=docker \ --location=${COMPUTE_REGION}Concedi al account di servizio l'autorizzazione sul repository 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'Configura l'autenticazione locale.
gcloud auth configure-docker ${COMPUTE_REGION}-docker.pkg.dev
Installare le dipendenze software sul cluster
Installa Tekton:
kubectl apply -f "https://github.com/tektoncd/pipeline/releases/download/${TEKTON_VERSION}/release.yaml"
Installare Kf
Consulta Creare e preparare un cluster GKE per Kf per creare un cluster preparato per l'esecuzione di Kf.
Seleziona e annota la release di Kf che preferisci. Consulta la pagina Download di Kf per le versioni disponibili
Installa l'interfaccia a riga di comando:
Linux
Verrà installato
kfper tutti gli utenti del sistema. Segui le istruzioni nella scheda Cloud Shell per installarlo solo per te.gcloud storage cp gs://kf-releases/${KF_VERSION}/kf-linux /tmp/kfchmod a+x /tmp/kfsudo mv /tmp/kf /usr/local/bin/kfMac
Verrà installato
kfper tutti gli utenti del sistema.gcloud storage cp gs://kf-releases/${KF_VERSION}/kf-darwin /tmp/kfchmod a+x /tmp/kfsudo mv /tmp/kf /usr/local/bin/kfCloud Shell
Se utilizzi
bash, verrà installatokfsull'istanza Cloud Shell. Le istruzioni potrebbero dover essere modificate per altre shell.mkdir -p ~/bingcloud storage cp gs://kf-releases/${KF_VERSION}/kf-linux ~/bin/kfchmod a+x ~/bin/kfecho "export PATH=$HOME/bin:$PATH" >> ~/.bashrcsource ~/.bashrcWindows
Verrà scaricato
kfnella directory corrente. Aggiungilo al percorso se vuoi chiamarlo da una directory diversa da quella corrente.gcloud storage cp gs://kf-releases/${KF_VERSION}/kf-windows.exe kf.exeInstalla i componenti del server:
Linux e Mac
Verrà scaricato kf.yaml nella directory corrente.
gcloud storage cp gs://kf-releases/${KF_VERSION}/kf.yaml /tmp/kf.yamlkubectl apply -f /tmp/kf.yamlWindows
Verrà scaricato kf.yaml nella directory corrente.
gcloud storage cp gs://kf-releases/${KF_VERSION}/kf.yaml kf.yamlkubectl apply -f kf.yamlConfigura i secret:
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 -Configura i valori predefiniti di Kf. Questi valori possono essere modificati in un secondo momento. L'esempio seguente utilizza modelli di dominio con un provider DNS con caratteri jolly per fornire a ogni spazio il proprio nome di dominio:
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}\"}}"Verifica l'installazione:
kf doctor --retries 10
Eseguire il push di un'applicazione
Prerequisiti
Per completare questa sezione sono necessari i seguenti elementi:
- Kf installato in un cluster GKE compatibile. Per le istruzioni, consulta Installare Kf.
- Un file
.kubeconfigche ha come target il cluster Kf. Se hai creato il cluster seguendo le istruzioni riportate in questo documento, questa operazione è già stata eseguita. Puoi generare esplicitamente la configurazione congcloud container clusters get-credentials ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION} - L'interfaccia a riga di comando
kfinstallata e nel percorso. Per le istruzioni, consulta Installare Kf. - L'interfaccia a riga di comando
gitinstallata e nel percorso.
Preparare lo spazio
Crea un nuovo spazio:
kf create-space test-space
Imposta come target lo spazio:
kf target -s test-space
Eseguire il push dell'app di test di Cloud Foundry
Clona il repository test-app:
git clone https://github.com/cloudfoundry-samples/test-app go-test-app cd go-test-app
Esegui il push dell'app:
kf push test-app
Trova l'URL dell'applicazione:
Utilizza la formattazione dell'output per recuperare solo la route:
kf app test-app --output 'jsonpath={.status.urls[0]}'Oppure questa per un approccio CF più tradizionale:
kf apps
Apri l'URL nel browser.
Libera spazio
Questi passaggi dovrebbero rimuovere tutti i componenti creati nella sezione Creare e preparare un nuovo cluster GKE.
Elimina il cluster GKE:
gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}Elimina l'account di servizio Google:
gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.comElimina le associazioni dei criteri 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"Elimina il repository delle immagini container:
gcloud artifacts repositories delete ${CLUSTER_NAME} \ --location=${COMPUTE_REGION}