本文档介绍了如何在 Google Distributed Cloud(在 VMware 上或在 Bare Metal 上)中创建的本地集群上安装 Kf 及其依赖项。
如果您已熟悉通过 Google Cloud 在 GKE 集群上安装 Kf 的过程,则本地过程的主要区别如下:
- 您无需为本地安装 Config Connector。
- 本地过程使用 Docker 凭据而不是 Workload Identity。
准备工作
Google Distributed Cloud 要求
满足 Cloud Service Mesh 要求的用户集群。
已配置为进行日志记录和监控。
已注册到舰队:
Kf 要求
Tekton:供 Kf 使用。这不是面向用户的服务。
专用 Google 服务账号。
准备新的本地集群和相关服务
设置环境变量
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 执行读取/写入操作。如果您使用不同的容器注册表,则此步骤会有所不同,因为它可以通过不同的方式来获取访问注册表的凭据。
创建 Kf 使用的服务账号:
gcloud beta iam service-accounts create ${SA_NAME} \ --project=${CLUSTER_PROJECT_ID} \ --description="gcr.io admin for ${CLUSTER_NAME}" \ --display-name="${CLUSTER_NAME}"
为服务账号分配对 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"
创建服务账号密钥:
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}
在集群上安装软件依赖项
安装 Cloud Service Mesh。
按照 Cloud Service Mesh 安装指南安装 Cloud Service Mesh。
如果是在 Google Distributed Cloud 上,请按照为 Google Distributed Cloud 配置外部 IP 地址中所述,将
loadBalancerIP
设置为分配给集群的 IP。
安装 Tekton:
kubectl apply -f "https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.47.1/release.yaml"
安装 Kf
安装 Kf CLI:
Linux
此命令会为系统上的所有用户安装 Kf CLI。请按照 Cloud Shell 标签页中的说明自行安装。
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
此命令会为系统上的所有用户安装
kf
。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
如果您使用
bash
,此命令会在 Cloud Shell 实例上安装kf
;您可能需要为其他 Shell 修改说明。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
此命令会将
kf
下载到当前目录。如果要从当前目录以外的任何位置调用,请将其添加到路径中。gcloud storage cp gs://kf-releases/v2.11.21/kf-windows.exe kf.exe
安装 operator:
kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.11.21/operator.yaml"
为 Kf 配置 operator:
kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.11.21/kfsystem.yaml"
为 Docker 凭据创建 Kubernetes Secret
在 Kf 命名空间中,为您在上面的服务账号设置中创建的 Docker 凭据创建 Kubernetes Secret。然后,将 Kubernetes Secret 修补到 subresource-apiserver
部署以上传来源。
启用并更新 Kf operator,以将 Container Registry 用作容器注册表。
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}'}}}]"
验证 Kf 运算符是否已创建
kf
命名空间。此操作可能需要几分钟时间才能完成。kubectl get namespace kf
创建用于 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}"
更新 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