Installer Kf en dehors de Google Cloud

Ce document explique comment installer Kf et ses dépendances sur un cluster sur site créé dans le cadre de Google Distributed Cloud, sur VMware ou sur Bare Metal.

Si vous connaissez déjà le processus d'installation de Kf sur un cluster GKE dans Google Cloud, les principales différences avec la procédure sur site sont les suivantes :

  • Vous n'avez pas besoin d'installer Config Connector pour une installation sur site.
  • La procédure sur site utilise les identifiants Docker au lieu de Workload Identity.

Avant de commencer

Exigences concernant Google Distributed Cloud

Prérequis pour Kf

  • Cloud Service Mesh.

  • Tekton, pour une utilisation par Kf. Il ne s'agit pas d'un service destiné aux utilisateurs.

  • Un compte de service Google dédié.

Configurer des variables d'environnement

Linux et 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
export CLUSTER_PROJECT_ID=YOUR_PROJECT_ID
export CLUSTER_NAME=kf-cluster
export DOCKER_SERVER=YOUR_DOCKER_SERVER_URL
export SA_NAME=${CLUSTER_NAME}-sa
export SA_EMAIL=${SA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com

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
Set-Variable -Name CLUSTER_PROJECT_ID -Value YOUR_PROJECT_ID
Set-Variable -Name CLUSTER_NAME -Value kf-cluster
Set-Variable -Name DOCKER_SERVER -Value YOUR_DOCKER_SERVER_URL
Set-Variable -Name SA_NAME -Value ${CLUSTER_NAME}-sa
Set-Variable -Name SA_EMAIL -Value ${SA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com

Configurer un compte de service

Créez le compte de service Google Cloud (GSA) et la clé de compte de service utilisés pour les lectures et les écritures à partir de Container Registry. Cette étape est différente si vous utilisez un autre registre de conteneurs, car la procédure permettant d'obtenir des identifiants pour accéder au registre peut être différente.

  1. Créez le compte de service utilisé par Kf :

    gcloud beta iam service-accounts create ${SA_NAME} \
        --project=${CLUSTER_PROJECT_ID} \
        --description="gcr.io admin for ${CLUSTER_NAME}" \
        --display-name="${CLUSTER_NAME}"
  2. Attribuez au compte de service le rôle storage.admin requis pour lire/écrire à partir de Container Registry :

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${SA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role="roles/storage.admin"
  3. Créez la clé du compte de service :

    temp_dir=$(mktemp -d)
    key_path=${temp_dir}/key.json
    gcloud iam service-accounts keys create --iam-account ${SA_EMAIL} ${key_path}
    key_json=$(cat ${key_path})
    rm -rf ${temp_dir}

Installer des dépendances logicielles sur le cluster

  1. Installez Cloud Service Mesh.

    1. Suivez le guide d'installation de Cloud Service Mesh pour installer Cloud Service Mesh.

    2. Si vous utilisez Google Distributed Cloud, définissez loadBalancerIP sur une adresse IP allouée au cluster, comme décrit dans la section Configurer des adresses IP externes pour Google Distributed Cloud.

  2. Installez Tekton :

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

Installer Kf

  1. Installez la CLI Kf :

    Linux

    Cette commande installe la CLI Kf 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/v2.11.21/kf-linux /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Mac

    Cette commande installe kf pour tous les utilisateurs du système.

    gcloud storage cp gs://kf-releases/v2.11.21/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 utilisez bash, et vous devrez peut-être modifier les instructions pour les autres interfaces système.

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

    Windows

    Cette commande télécharge kf dans 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/v2.11.21/kf-windows.exe kf.exe
  2. Installez l'opérateur :

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.11.21/operator.yaml"
  3. Configurez l'opérateur pour Kf :

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.11.21/kfsystem.yaml"

Créer un secret Kubernetes pour les identifiants Docker

Créez un secret Kubernetes dans l'espace de noms Kf pour les identifiants Docker que vous avez créés plus haut dans la section Configurer un compte de service. Appliquez ensuite le secret Kubernetes au déploiement subresource-apiserver pour les importations sources.

  1. Activez et mettez à jour l'opérateur Kf pour utiliser Container Registry en tant que registre de conteneurs.

    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}'}}}}}]"
    
    export CONTAINER_REGISTRY=gcr.io/${CLUSTER_PROJECT_ID}
    kubectl patch kfsystem kfsystem \
      --type='json' \
      -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': true, 'config': {'spaceContainerRegistry':'${CONTAINER_REGISTRY}'}}}]"
    
  2. Vérifiez que l'espace de noms kf a été créé par l'opérateur Kf. Cette opération peut prendre quelques minutes.

    kubectl get namespace kf
  3. Créez un secret Kubernetes à utiliser avec les registres Docker.

    export secret_name=kf-gcr-key-${RANDOM}
    kubectl -n kf create secret docker-registry ${secret_name} \
       --docker-username=_json_key --docker-server ${DOCKER_SERVER} \
       --docker-password="${key_json}"
    
  4. Mettez à jour l'opérateur Kf pour spécifier le secret contenant les identifiants Docker.

    kubectl patch kfsystem kfsystem \
      --type='json' \
      -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'config': {'secrets':{'build':{'imagePushSecrets':'${secret_name}'}}}}}]"
    

Valider l'installation

kf doctor --retries=20