Instalar 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 Bare Metal.

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

  • No es necesario instalar Config Connector para una instalación local.
  • El procedimiento local usa credenciales de Docker en lugar de Workload Identity.

Antes de empezar

Requisitos de Google Distributed Cloud

Requisitos de Kf

Consulta los permisos de acceso de los componentes de Kf en la página de dependencias y arquitectura de Kf.

  • Cloud Service Mesh.

  • Tekton para usar con Kf. No es un servicio orientado a los usuarios.

  • Una cuenta de servicio de Google específica.

Configurar 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

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

Configurar una cuenta de servicio

Crea la cuenta de servicio (GSA) y la clave de cuenta de servicio que se usan para que las compilaciones lean o escriban en Container Registry. Google Cloud Este paso es diferente si usas otro registro de contenedores, ya que podría tener otra forma de obtener las credenciales para acceder al registro.

  1. Crea la cuenta de servicio que usa 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. Asigna a la cuenta de servicio el rol storage.admin necesario para leer o escribir en 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}

Instalar dependencias de software en un clúster

  1. Instala Cloud Service Mesh v1.23.3-asm.1+config1.

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

    2. Después de instalar Cloud Service Mesh, debes crear una pasarela de entrada siguiendo la guía de instalación de pasarelas.

    3. Si usas Google Distributed Cloud, asigna a loadBalancerIP una IP asignada al clúster, tal como se describe en Configurar direcciones IP externas para Google Distributed Cloud.

  2. Instala Tekton:

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

Instalar Kf

  1. Instala la CLI de Kf:

    Linux

    Este comando instala la CLI de Kf para todos los usuarios del sistema. Sigue las instrucciones de la pestaña Cloud Shell para instalarlo solo para ti.

    gcloud storage cp gs://kf-releases/v2.11.28/kf-linux /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Mac

    Este comando instala kf para todos los usuarios del sistema.

    gcloud storage cp gs://kf-releases/v2.11.28/kf-darwin /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Cloud Shell

    Este comando instala kf en tu instancia de Cloud Shell si usas bash. Si usas otro shell, es posible que tengas que modificar las instrucciones.

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

    Windows

    Este comando descarga kf en el directorio actual. Añádela a la ruta si quieres llamarla desde cualquier otro directorio que no sea el actual.

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

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

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

Crear 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 has creado anteriormente en Configuración de la cuenta de servicio. A continuación, parchea el secreto de Kubernetes en la implementación de subresource-apiserver para subir las fuentes.

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

    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 operador de Kf haya creado el espacio de nombres kf. Este proceso puede tardar unos minutos.

    kubectl get namespace kf
  3. Crea un secreto de Kubernetes para usarlo con 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}'}}}}}]"
    

Validar la instalación

kf doctor --retries=20