Instala Kf fuera de Google Cloud

En este documento, se describe cómo instalar Kf y sus dependencias en un clúster local creado como parte de Google Distributed Cloud, ya sea en VMware o en equipos físicos.

Si ya estás familiarizado con el proceso de instalación de Kf en un clúster de GKE en Google Cloud, las principales diferencias para el procedimiento local son las siguientes:

  • No tienes que instalar Config Connector para una instalación local.
  • En el procedimiento local, se usan credenciales de Docker en lugar de Workload Identity.

Antes de comenzar

Requisitos de Google Distributed Cloud

Requisitos de Kf

  • Cloud Service Mesh.

  • Tekton para que lo use Kf. Este no es un servicio orientado al usuario.

  • Una Cuenta de servicio de Google dedicada.

Configura variables de entorno

Linux y 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

WindowsPowerShell

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

Configura la cuenta de servicio

Crea la cuenta de servicio de Google Cloud (GSA) y la clave de la cuenta de servicio que se usa para que las compilaciones se lean o escriban desde Container Registry. Este paso es diferente si usas un registro de contenedores diferente porque podría tener una forma diferente de obtener las credenciales para acceder al registro.

  1. Crea la cuenta de servicio que Kf usa:

    gcloud beta iam service-accounts create ${SA_NAME} \
        --project=${CLUSTER_PROJECT_ID} \
        --description="gcr.io admin for ${CLUSTER_NAME}" \
        --display-name="${CLUSTER_NAME}"
  2. Asigna a la cuenta de servicio la función storage.admin requerida para leer y escribir desde 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. Crea la clave de la cuenta de servicio:

    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}

Instala dependencias de software en el clúster

  1. Instala Cloud Service Mesh.

    1. Sigue la guía de instalación de Cloud Service Mesh para instalar Cloud Service Mesh.

    2. Si usas Google Distributed Cloud, configura loadBalancerIP en una IP asignada al clúster como se describe en Configura direcciones IP externas para Google Distributed Cloud.

  2. Instala Tekton:

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

Instala Kf

  1. Instala la CLI de Kf:

    Linux

    Con este comando, se instala la CLI de Kf para todos los usuarios del sistema. Sigue las instrucciones de la pestaña de Cloud Shell para instalarlo tú mismo.

    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

    Con este comando, se instala kf para todos los usuarios del sistema.

    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

    Este comando instalará kf en tu instancia de Cloud Shell si usas bash. Es posible que tengas que modificar las instrucciones para otros shells.

    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

    Con este comando, se descarga kf en el directorio actual. Agrégalo a la ruta si deseas llamar desde cualquier otro lugar que no sea el directorio actual.

    gcloud storage cp gs://kf-releases/v2.11.21/kf-windows.exe kf.exe
  2. Instala el operador:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.11.21/operator.yaml"
  3. Configura el operador para Kf:

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

Crea un secreto de Kubernetes para las credenciales de Docker

Crea un secreto de Kubernetes en el espacio de nombres de Kf para las credenciales de Docker que creaste antes en Configuración de la cuenta de servicio. Luego, aplica un parche al secreto de Kubernetes en la implementación de subresource-apiserver para las cargas de origen.

  1. Habilita y actualiza el operador de Kf para que use Container Registry como el registro de contenedores.

    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. Verifica que el espacio de nombres kf que creó el operador Kf. Esto puede tardar unos minutos en completarse.

    kubectl get namespace kf
  3. Crea un secreto de Kubernetes para usar con los registros de 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. Actualiza el operador de Kf para especificar el secreto que contiene las credenciales de Docker.

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

Valida la instalación

kf doctor --retries=20