在 Google Cloud 外部安装 Kf

本文档介绍如何在 GKE on VMwareGKE on Bare Metal 本地集群上安装 Kf 及其依赖项。

如果您已熟悉通过 Google Cloud 在 GKE 集群上安装 Kf 的过程,则本地过程的主要区别如下:

  • 您无需为本地安装 Config Connector。
  • 本地过程使用 Docker 凭据而不是 Workload Identity。

准备工作

GKE on VMware 要求

Kf 要求

请参阅 Kf 依赖项和架构页面,查看并了解 Kf 中的组件的访问权限。

设置环境变量

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

设置服务账号

创建 Google Cloud 服务账号 (GSA) 和服务账号密钥,用于进行构建以对 Container Registry 执行读取/写入操作。如果您使用不同的容器注册表,则此步骤会有所不同,因为它可以通过不同的方式来获取访问注册表的凭据。

  1. 创建 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. 为服务账号分配对 Container Registry 执行读取/写入操作所需的 storage.admin 角色:

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${SA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role="roles/storage.admin"
  3. 创建服务账号密钥:

    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}

在集群上安装软件依赖项

  1. 安装 Anthos Service Mesh。

    1. 按照 Anthos Service Mesh 安装指南来安装 Anthos Service Mesh。

    2. 在 GKE on VMware 上,按照为 GKE on VMware 配置外部 IP 地址中的说明,将 loadBalancerIP 设置为分配给集群的 IP 地址。

  2. 安装 Tekton:

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

安装 Kf

  1. 安装 Kf CLI:

    Linux

    此命令会为系统上的所有用户安装 Kf CLI。请按照 Cloud Shell 标签页中的说明自行安装。

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

    Mac

    此命令会为系统上的所有用户安装 kf

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

    Cloud Shell

    如果您使用 bash,此命令会在 Cloud Shell 实例上安装 kf;您可能需要为其他 Shell 修改说明。

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

    Windows

    此命令会将 kf 下载到当前目录。如果要从当前目录以外的任何位置调用,请将其添加到路径中。

    gsutil cp gs://kf-releases/v2.6.1/kf-windows.exe kf.exe
  2. 安装 operator:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.6.1/operator.yaml"
  3. 为 Kf 配置 operator:

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

为 Docker 凭据创建 Kubernetes Secret

在 Kf 命名空间中,为您在上面的服务账号设置中创建的 Docker 凭据创建 Kubernetes Secret。然后,将 Kubernetes Secret 修补到 subresource-apiserver 部署以上传来源。

  1. 启用并更新 Kf operator,以将 Container Registry 用作容器注册表。

    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. 验证 Kf 运算符是否已创建 kf 命名空间。此操作可能需要几分钟时间才能完成。

    kubectl get namespace kf
  3. 创建用于 Docker 注册表的 Kubernetes Secret。

    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. 更新 Kf operator 以指定包含 Docker 凭据的 Secret。

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

验证安装

kf doctor --retries=20