Avant de commencer
Présentation
Votre cluster GKE doit répondre aux exigences suivantes :
Le cluster doit être dédié à Kf, mais cela n'est pas obligatoire. Nous vous recommandons de n'installer que Kf et ses dépendances pour vous assurer que la matrice de compatibilité est maintenue.
Au moins quatre nœuds. Si vous devez ajouter des nœuds, consultez la page Redimensionner un cluster.
Type de machine minimal comportant au moins quatre processeurs virtuels, tels que
e2-standard-4
. Si le type de machine de votre cluster ne comporte pas au moins quatre processeurs virtuels, modifiez le type de machine comme décrit dans la section Migrer des charges de travail vers différents types de machines.Nous vous recommandons d'inscrire le cluster dans une version disponible, mais cela n'est pas obligatoire. Suivez les instructions de la page Enregistrer un cluster existant dans une version disponible si vous disposez d'une version GKE statique.
Workload Identity activé.
Artifact Registry activé.
Tekton installé. Consultez la matrice de dépendances pour la version.
Un compte de service Google avec la stratégie IAM suivante (instructions de création ci-dessous) :
roles/iam.serviceAccountAdmin
serviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller]
(pour le membreserviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller]
)
La section Effectuer un nettoyage fournit des instructions sur la suppression du cluster.
Activer la compatibilité avec 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.
- Activez l'API Compute Engine.
Activer et configurer GKE
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande
gcloud components update
.
Créer et préparer un cluster GKE
Configurer des variables d'environnement
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
Configurer un compte de service
Créez un compte de service GCP (GSA) qui sera associé à un compte de service Kubernetes via Workload Identity. Cela évite de devoir créer et injecter une clé de compte de service.
Créez le compte de service que Kf utilisera.
gcloud iam service-accounts create ${CLUSTER_NAME}-sa \ --project=${CLUSTER_PROJECT_ID} \ --description="GSA for Kf ${CLUSTER_NAME}" \ --display-name="${CLUSTER_NAME}"
Autorisez le compte de service à modifier sa propre stratégie. Le contrôleur Kf l'utilise pour ajouter de nouveaux espaces (de noms) à la règle, ce qui permet ainsi la réutilisation de 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"
Attribuez un rôle de surveillance des métriques pour l'accès en écriture à 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"
Accordez un rôle de journalisation pour l'accès en écriture à 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"
Créer 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"
Définir des règles de pare-feu
Kf nécessite l'ouverture de certains ports de pare-feu. Le nœud maître doit pouvoir communiquer avec les pods sur les ports 80, 443, 8080, 8443 et 6443.
Activer Workload Identity
Maintenant que vous disposez d'un compte de service et d'un cluster GKE, associez l'espace de noms d'identité du cluster au 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]"
Cibler le cluster GKE
Configurez l'accès à l'outil ligne de commande kubectl en exécutant la commande suivante :
gcloud container clusters get-credentials ${CLUSTER_NAME} \ --project=${CLUSTER_PROJECT_ID} \ --zone=${CLUSTER_LOCATION}
Créer un dépôt Artifact Registry
Créez un dépôt Artifact Registry pour stocker les images de conteneurs.
gcloud artifacts repositories create ${CLUSTER_NAME} \ --repository-format=docker \ --location=${COMPUTE_REGION}
Accordez l'autorisation de compte de service sur le dépôt 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'
Configurez votre authentification locale.
gcloud auth configure-docker ${COMPUTE_REGION}-docker.pkg.dev
Installer des dépendances logicielles sur le cluster
Installez Tekton :
kubectl apply -f "https://github.com/tektoncd/pipeline/releases/download/${TEKTON_VERSION}/release.yaml"
Installer Kf
Consultez la section Créer et préparer un cluster GKE pour Kf afin de créer un cluster prêt à exécuter Kf.
Sélectionnez et notez la version de Kf souhaitée. Consultez la page Téléchargements Kf pour connaître les versions disponibles.
Installez la CLI :
Linux
kf
sera installé pour tous les utilisateurs du système. Suivez les instructions de l'onglet Cloud Shell pour l'installer juste pour vous.gcloud storage 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
sera installé pour tous les utilisateurs du système.gcloud storage 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
kf
sera installé sur votre instance Cloud Shell si vous utilisezbash
, et vous devrez peut-être modifier les instructions pour les autres interfaces système.mkdir -p ~/bin
gcloud storage 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
Cela téléchargera
kf
sur le répertoire actuel. Si vous souhaitez l'appeler depuis un emplacement autre que le répertoire actuel, ajoutez-le au chemin d'accès.gcloud storage cp gs://kf-releases/${KF_VERSION}/kf-windows.exe kf.exe
Installez les composants du serveur :
Linux et Mac
Cela téléchargera le fichier kf.yaml dans le répertoire actuel.
gcloud storage cp gs://kf-releases/${KF_VERSION}/kf.yaml /tmp/kf.yaml
kubectl apply -f /tmp/kf.yaml
Windows
Cela téléchargera le fichier kf.yaml dans le répertoire actuel.
gcloud storage cp gs://kf-releases/${KF_VERSION}/kf.yaml kf.yaml
kubectl apply -f kf.yaml
Secrets de configuration :
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 -
Définissez les valeurs par défaut de Kf. Ces valeurs peuvent être modifiées ultérieurement. L'exemple ci-dessous utilise des modèles de domaine avec un fournisseur DNS générique pour fournir à chaque espace son propre nom de domaine :
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}\"}}"
Validez l'installation :
kf doctor --retries 10
Déployer une application
Prérequis
Pour cette section, les éléments suivants sont requis :
- Kf doit être installé dans un cluster GKE compatible. Consultez la section Installer Kf pour obtenir la marche à suivre.
.kubeconfig
ciblant le cluster Kf. Si vous avez créé le cluster en suivant les instructions de ce document, alors cela est déjà effectué. Vous pouvez générer explicitement la configuration à l'aide de l'optiongcloud container clusters get-credentials ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}
.- La CLI
kf
doit être installée dans votre chemin d'accès. Consultez la section Installer Kf pour obtenir la marche à suivre. - La CLI
git
doit être installée dans votre chemin d'accès.
Préparer l'espace
Créez un espace :
kf create-space test-space
Ciblez l'espace :
kf target -s test-space
Déployer l'application de test Cloud Foundry
Clonez le dépôt test-app :
git clone https://github.com/cloudfoundry-samples/test-app go-test-app cd go-test-app
Déployez l'application :
kf push test-app
Recherchez l'URL de l'application :
Utilisez le format de sortie pour ne récupérer que la route :
kf app test-app --output 'jsonpath={.status.urls[0]}'
Ou pour une approche CF plus classique :
kf apps
Ouvrez l'URL dans votre navigateur.
Effectuer un nettoyage
Cette procédure permet de supprimer tous les composants créés dans la section Créer et préparer un cluster GKE.
Supprimez le cluster GKE :
gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}
Supprimez le compte de service Google :
gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
Supprimez les liaisons de stratégie 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"
Supprimez le dépôt d'images de conteneurs :
gcloud artifacts repositories delete ${CLUSTER_NAME} \ --location=${COMPUTE_REGION}