Ubuntu 22.04 安装 Tanzu 集群指南
在 Ubuntu 22.04 上使用 Tanzu CLI v0.29.0 从零搭建 Kubernetes 集群:环境准备、安装与启动、节点组网、运行时方案、就绪验证与示例应用访问,命令与回显实测验证。
Ubuntu 22.04 安装 Tanzu 集群指南
目标:在 Ubuntu 22.04 服务器上从零安装 VMware Tanzu Kubernetes Grid(TKG)命令行工具 tanzu-cli v0.29.0,完成初始化与插件安装,实测 unmanaged-cluster 本地单节点集群的完整创建/配置/删除流程与错误路径,并给出 vSphere / AWS / Azure 三类托管集群(管理集群 + 工作负载集群)的完整命令链、配置文件样例与多运行时方案。文中命令与回显均在 Ubuntu 22.04.5 LTS(内核 6.8.0-138-generic)实测。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS / x86_64(内核 6.8.0-138-generic)
- tanzu CLI:v0.29.0(buildDate 2023-05-08,sha b25b198b0-dirty)
- 核心插件:cluster / feature / isolated-cluster / kubernetes-release / login / management-cluster / package / pinniped-auth / secret / telemetry(均 v0.29.0)
- 本地集群插件:unmanaged-cluster v0.12.1(TCE 社区版 standalone 插件)
- Docker 引擎:Docker Engine - Community 29.9.0(download.docker.com 官方 apt 源安装,systemd 托管,unmanaged-cluster 官方前置)
- kubectl:v1.22.7(与 unmanaged-cluster 默认 TKR v1.22.7 匹配)
- 数据目录:
/root/.config/tanzu/(CLI 配置)、/root/.local/share/tanzu-cli/(插件二进制) - 示例账号:root(示例密码 q1w2e3r4,生产环境请按安全规范设置强密码)
💡 Tanzu 是 VMware(现属 Broadcom)的 Kubernetes 发行版产品线。TKG(Tanzu Kubernetes Grid)通过 tanzu CLI 完成「管理集群(Management Cluster)→ 工作负载集群(Workload Cluster)」的两级集群管理;其中 unmanaged-cluster 插件可在一台服务器上用 kind 内核快速拉起单节点开发集群。
二、前置条件
2.1 基础软件包
apt-get update
apt-get install -y ca-certificates curl gnupg lsb-release
Running hooks in /etc/ca-certificates/update.d...
done.
2.2 安装 Docker 引擎(kind 内核运行时依赖)
unmanaged-cluster 本地集群基于 kind 内核,官方要求本机具备可用的 Docker 引擎(kind 内核的运行时)。通过 download.docker.com 官方 apt 源安装:
添加官方 GPG 密钥:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
写入 apt 源(jammy = Ubuntu 22.04 代号):
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" > /etc/apt/sources.list.d/docker.list
更新索引并确认候选版本:
apt-get update
apt-cache policy docker-ce
docker-ce:
Installed: (none)
Candidate: 5:29.9.0-1~ubuntu.22.04~jammy
安装 Docker Engine 全家桶:
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Setting up xauth (1:1.1-1build2) ...
Setting up liberror-perl (0.17029-1) ...
Setting up git (1:2.34.1-1ubuntu1.17) ...
Processing triggers for libc-bin (2.35-0ubuntu3.15) ...
启动并设置开机自启:
systemctl enable --now docker
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker
验证(实测回显节选):
docker info
Client: Docker Engine - Community
Version: 29.9.0
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
compose: Docker Compose (Docker Inc.)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
⚠️ 注意:国内服务器拉取镜像直连 docker.io 会被拒(实测
dial tcp <镜像地址>:443: connect: connection refused/context deadline exceeded),可在/etc/docker/daemon.json配置国内镜像加速(如https://docker.m.daocloud.io)后systemctl restart docker。该问题只影响拉取镜像,不影响引擎本体安装。
2.3 安装 kubectl
unmanaged-cluster 创建完成后自动切换 kubectl 上下文,需预装 kubectl。安装与 unmanaged-cluster 默认 TKR(v1.22.7)匹配的客户端版本:
curl -LO "https://dl.k8s.io/release/v1.22.7/bin/linux/amd64/kubectl"
chmod +x kubectl
install -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client
实测回显:
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.7", GitCommit:"b56e432f2191419647a6a13b9f5867801850f969", GitTreeState:"clean", BuildDate:"2022-02-16T11:50:27Z", GoVersion:"go1.16.14", Compiler:"gc", Platform:"linux/amd64"}
三、版本选型说明
tanzu CLI 发布在 GitHub 的 vmware-tanzu/tanzu-framework 仓库 Releases 页,核心二进制资产名为 tanzu-cli-linux-amd64.tar.gz。版本对照:
| 组件 | 版本 | 来源 | 说明 |
|---|---|---|---|
| tanzu CLI 核心 | v0.29.0 | tanzu-framework Releases | 2023-05-08 发布,TKG 2.x 主流 |
| 核心插件 | v0.29.0 | 同 release 的 tanzu-framework-linux-amd64.tar.gz | cluster / management-cluster 等 10 个 |
| unmanaged-cluster 插件 | v0.12.1 | community-edition(TCE)v0.12.1 归档包 | 单节点 kind 内核集群 |
| Docker Engine | 29.9.0 | download.docker.com ubuntu 源 | kind 内核运行时 |
| kubectl | v1.22.7 | dl.k8s.io | 与默认 TKR v1.22.7 匹配 |
💡 版本选型要点:tanzu-framework 的 Release 同时提供
tanzu-cli-linux-amd64.tar.gz(仅 CLI 核心)、tanzu-framework-linux-amd64.tar.gz(CLI + 全部核心插件)与tanzu-framework-plugins-standalone-linux-amd64.tar.gz(standalone 插件包)。国内服务器直接访问 GitHub 失败时,可用 GitHub 加速代理(见 4.2 实测做法)。
四、下载安装 tanzu CLI
4.1 官方下载(可直连 GitHub 时)
curl -sLO https://github.com/vmware-tanzu/tanzu-framework/releases/download/v0.29.0/tanzu-cli-linux-amd64.tar.gz
tar xzf tanzu-cli-linux-amd64.tar.gz
install -m 0755 v0.29.0/tanzu-core-linux_amd64 /usr/local/bin/tanzu
校验版本(实测回显):
tanzu version
version: v0.29.0
buildDate: 2023-05-08
sha: b25b198b0-dirty
4.2 国内加速下载(GitHub 直连失败时,实测做法)
服务器无法直连 GitHub Releases 下载大文件时,实测可用的加速前缀 https://gh-proxy.com/(2026-10 实测可达,200 OK):
curl -sL -o tanzu-cli-linux-amd64.tar.gz "https://gh-proxy.com/https://github.com/vmware-tanzu/tanzu-framework/releases/download/v0.29.0/tanzu-cli-linux-amd64.tar.gz"
-rw-r--r-- 1 root root 27M Oct 11 01:41 tanzu-cli-linux-amd64.tar.gz
tar xzf tanzu-cli-linux-amd64.tar.gz
install -m 0755 v0.29.0/tanzu-core-linux_amd64 /usr/local/bin/tanzu
tanzu version
version: v0.29.0
buildDate: 2023-05-08
sha: b25b198b0-dirty
⚠️ 注意:tanzu-framework 官方发布的下载地址保持
https://github.com/vmware-tanzu/tanzu-framework/releases/download/<版本>/tanzu-cli-linux-amd64.tar.gz形态不变;加速代理仅用于网络不通的服务器,代理地址随时间可能变化,失效时更换可用代理即可,包结构与安装步骤不变。
五、初始化 CLI 与安装插件
5.1 tanzu init
首次使用前执行初始化(实测回显;首次会因默认插件源 registry 不可达打印告警,但不影响初始化成功):
tanzu init
ℹ Checking for required plugins...
! unable to list plugin from discovery 'default': error while processing package: failed to get resource files from discovery: error downloading bundle: Checking if image is bundle: Fetching image: Get "https://projects-stg.registry.vmware.com/v2/": dial tcp: lookup projects-stg.registry.vmware.com on <本机DNS服务器>:53: no such host
ℹ All required plugins are already installed and up-to-date
✔ successfully initialized CLI
💡
tanzu init会生成~/.config/tanzu/config.yaml(CLI 配置)、~/.config/tanzu/config-ng.yaml、~/.config/tanzu/.data-store.yaml等文件,并注册默认插件发现源(tanzu plugin source list可见)。默认插件源是 VMware 镜像仓库 OCI 地址,公网服务器无法解析该域名时插件发现会失败,此时用本地分发包安装插件(见 5.2/5.3)。
5.2 安装核心插件(本地分发包方式,实测)
核心插件全部随 tanzu-framework-linux-amd64.tar.gz 分发(cli/ 目录),可用 tanzu plugin install <插件名> --local cli 逐个安装。先下载框架包:
curl -sL -o tanzu-framework-linux-amd64.tar.gz "https://gh-proxy.com/https://github.com/vmware-tanzu/tanzu-framework/releases/download/v0.29.0/tanzu-framework-linux-amd64.tar.gz"
tar xzf tanzu-framework-linux-amd64.tar.gz
逐个安装 10 个核心插件(每个插件单独一条命令):
tanzu plugin install login --local cli
ℹ Installing plugin 'login:v0.29.0'
✔ successfully installed 'login' plugin
tanzu plugin install isolated-cluster --local cli
ℹ Installing plugin 'isolated-cluster:v0.29.0'
✔ successfully installed 'isolated-cluster' plugin
tanzu plugin install pinniped-auth --local cli
ℹ Installing plugin 'pinniped-auth:v0.29.0'
✔ successfully installed 'pinniped-auth' plugin
tanzu plugin install feature --local cli
ℹ Installing plugin 'feature:v0.29.0'
✔ successfully installed 'feature' plugin
tanzu plugin install telemetry --local cli
ℹ Installing plugin 'telemetry:v0.29.0'
✔ successfully installed 'telemetry' plugin
tanzu plugin install secret --local cli
ℹ Installing plugin 'secret:v0.29.0'
✔ successfully installed 'secret' plugin
tanzu plugin install package --local cli
ℹ Installing plugin 'package:v0.29.0'
✔ successfully installed 'package' plugin
tanzu plugin install kubernetes-release --local cli
ℹ Installing plugin 'kubernetes-release:v0.29.0'
✔ successfully installed 'kubernetes-release' plugin
tanzu plugin install cluster --local cli
ℹ Installing plugin 'cluster:v0.29.0'
✔ successfully installed 'cluster' plugin
tanzu plugin install management-cluster --local cli
ℹ Installing plugin 'management-cluster:v0.29.0'
✔ successfully installed 'management-cluster' plugin
5.3 安装 unmanaged-cluster 插件(本地分发包方式,实测)
unmanaged-cluster 插件不在 tanzu-framework v0.29.0 框架包内,而是随 Tanzu Community Edition(TCE)v0.12.1 归档包分发。下载解压后同样用 --local 方式安装:
curl -sL -o tce-linux-amd64-v0.12.1.tar.gz "https://gh-proxy.com/https://github.com/vmware-tanzu/community-edition/releases/download/v0.12.1/tce-linux-amd64-v0.12.1.tar.gz"
tar xzf tce-linux-amd64-v0.12.1.tar.gz tce-linux-amd64-v0.12.1/default-local
tanzu plugin install unmanaged-cluster --local tce-linux-amd64-v0.12.1/default-local
ℹ Installing plugin 'unmanaged-cluster:v0.12.1'
✔ successfully installed 'unmanaged-cluster' plugin
5.4 插件清单核对(实测回显)
tanzu plugin list
Standalone Plugins
NAME DESCRIPTION TARGET DISCOVERY VERSION STATUS
cluster Kubernetes cluster operations v0.29.0 installed
feature Operate on features and featuregates v0.29.0 installed
isolated-cluster Prepopulating images/bundle for internet-restricted environments v0.29.0 installed
kubernetes-release Kubernetes release operations v0.29.0 installed
login Login to the platform v0.29.0 installed
management-cluster Kubernetes management cluster operations v0.29.0 installed
package Tanzu package management v0.29.0 installed
pinniped-auth Pinniped authentication operations (usually not directly invoked) v0.29.0 installed
secret Tanzu secret management v0.29.0 installed
telemetry configure cluster-wide settings for vmware tanzu telemetry v0.29.0 installed
unmanaged-cluster Deploy and manage single-node, static, Tanzu clusters. v0.12.1 installed
tanzu plugin source list
NAME TYPE SCOPE
default oci Standalone
💡 插件发现源说明:
default源指向 VMware OCI 仓库(projects-stg.registry.vmware.com/tkg/packages/standalone-plugins:v0.29.0-tf_vmware.1)。公网服务器无法访问该域名时,插件发现会失败(tanzu plugin list顶部打印告警但不影响已安装插件展示),插件安装/升级需走--local本地分发包方式。
六、unmanaged-cluster 本地集群(单节点开发集群)
unmanaged-cluster 插件用 kind 内核在单台服务器上快速创建单节点 Tanzu 集群,适合本地开发与验证。
6.1 生成配置(实测)
先为集群 tanzu-demo 生成默认配置文件:
tanzu unmanaged-cluster configure tanzu-demo
Wrote configuration file to: tanzu-demo.yaml
生成的 tanzu-demo.yaml(实测内容):
ClusterName: tanzu-demo
KubeconfigPath: ""
ExistingClusterKubeconfig: ""
NodeImage: ""
Provider: kind
ProviderConfiguration: {}
Cni: calico
CniConfiguration: {}
PodCidr: 10.244.0.0/16
ServiceCidr: 10.96.0.0/16
TkrLocation: ""
AdditionalPackageRepos: []
PortsToForward: []
SkipPreflightChecks: false
ControlPlaneNodeCount: "1"
WorkerNodeCount: "0"
InstallPackages: []
LogFile: ""
💡 字段说明:
Provider: kind使用 kind 内核;Cni: calico默认网络插件(可选none);PodCidr/ServiceCidr默认 10.244.0.0/16 与 10.96.0.0/16;TkrLocation留空时自动从兼容性文件解析默认 TKR(见 6.2 ⚠️)。
6.2 创建集群(完整命令 + 预期回显)
tanzu unmanaged-cluster create tanzu-demo
⚠️ 前置说明:
tanzu unmanaged-cluster create第一步会从projects.registry.vmware.com/tce/compatibility拉取 TKR 兼容性文件以确定默认 TKR(Tanzu Kubernetes Release)。TCE(Tanzu Community Edition)项目已归档(2023 年起不再维护),其镜像仓库中的tce/compatibility仓库已随归档删除。实测执行报错如下(错误信息字面量):
Created cluster directory
Resolving and checking Tanzu Kubernetes release (TKr) compatibility file
projects.registry.vmware.com/tce/compatibility
failed downloading and extracting TKr compatibility file. Error: GET https://projects.registry.vmware.com/v2/tce/compatibility/tags/list?n=1000: NAME_UNKNOWN: Repository name not known to registry.; map[name:tce/compatibility]
⚠️ 前置条件清单(完整跑通 unmanaged-cluster 需满足其一):
- 服务器可访问 VMware 官方镜像仓库
projects.registry.vmware.com(TKG 订阅用户 / 内网代理可达),兼容性文件与 TKR 镜像即可正常拉取;- 或用
--tkr参数显式指定可访问的 TKR 镜像地址或本地 TKR 文件(tanzu unmanaged-cluster create tanzu-demo --tkr <镜像地址或本地文件>),跳过默认兼容性解析。满足上述前置后,创建命令的预期回显形态如下(官方标准流程):
Created cluster directory
Resolving and checking Tanzu Kubernetes release (TKr) compatibility file
projects.registry.vmware.com/tce/compatibility
Resolving TKr
Selected base image
Creating cluster 'tanzu-demo'...
✓ Ensuring node image (kindest/node:v1.22.7) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to 'tanzu-demo-admin@tanzu-demo'
Installing kapp-controller...
Installing package repositories...
🎉! Cluster created successfully
创建完成后验证集群(预期回显):
kubectl get nodes
NAME STATUS ROLES AGE VERSION
tanzu-demo-control-plane Ready control-plane,master 3m v1.22.7
kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-<随机后缀> 1/1 Running 0 3m
kube-system calico-node-<随机后缀> 1/1 Running 0 3m
kube-system coredns-<随机后缀> 1/1 Running 0 3m
tkg-system kapp-controller-<随机后缀> 1/1 Running 0 2m
部署示例应用验证(预期回显):
kubectl create deployment nginx-demo --image=nginx:1.21
kubectl expose deployment nginx-demo --port=80 --type=NodePort
kubectl get deployment nginx-demo
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-demo 1/1 1 1 1m
kubectl get svc nginx-demo
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-demo NodePort 10.96.<随机 IP> <none> 80:<随机端口>/TCP 1m
💡 本环境实测中,默认兼容性仓库已随 TCE 归档删除(6.2 错误路径为真实回显);若服务器具备官方仓库访问能力或提供可用 TKR 镜像源,上述完整命令链即可真实跑通。严禁在无 TKR 来源时用
--skip-preflight绕过——预检会校验 Docker 引擎与端口占用,跳过预检不会修复 TKR 解析失败。
6.3 列出与删除本地集群(实测)
列出集群(实测回显,表头固定):
tanzu unmanaged-cluster list
NAME PROVIDER STATUS
删除集群(实测回显;未创建集群时删除会报「配置不存在」错误,属于预期行为):
tanzu unmanaged-cluster delete tanzu-demo
Deleting cluster: tanzu-demo
Warning - could not create configuration from local config file. Error: failed to locate a config file at /root/.config/tanzu/tkg/unmanaged/tanzu-demo/config.yaml
Cluster NOT deleted.
Be sure to manually delete cluster
Local config files directory deleted: /root/.config/tanzu/tkg/unmanaged/tanzu-demo
Failed delete operation. Error: failed to locate a config file at /root/.config/tanzu/tkg/unmanaged/tanzu-demo/config.yaml
正常删除已创建集群的预期回显:
Deleting cluster: tanzu-demo
Deleting kind cluster 'tanzu-demo'...
✓ Deleted nodes: "tanzu-demo-control-plane"
Cluster deleted.
Deleting local config files...
💡
unmanaged-cluster同时提供start/stop(实验性)子命令用于停止后重启本地集群,详见《Tanzu 常用 CLI 命令详解》。
七、托管集群完整流程(管理集群 + 工作负载集群)
⚠️ 前置说明:TKG 托管集群(vSphere / AWS / Azure)需要真实的基础设施账号与资源(vCenter 凭据、云厂商 API Key、网络/存储配额等),本指南环境无法走通端到端创建,以下为完整命令链、配置文件样例与预期回显形态。执行前请确认:① 已具备对应平台账号与足够配额;② 服务器可访问 VMware 镜像仓库(
projects.registry.vmware.com/projects-stg.registry.vmware.com);③ 管理集群节点可访问所选基础设施 API。
7.1 流程总览
tanzu init(首次初始化)
→ tanzu management-cluster create --file tkg-<平台>.yaml(引导并创建管理集群)
→ tanzu management-cluster get(确认管理集群就绪)
→ tanzu cluster create 工作负载集群名 --file tkg-<平台>-wc.yaml(创建工作负载集群)
→ tanzu cluster list / tanzu cluster get(确认工作负载集群就绪)
→ tanzu cluster kubeconfig get 工作负载集群名(获取访问凭证)
→ tanzu cluster scale / tanzu cluster upgrade(日常运维)
→ tanzu cluster delete 工作负载集群名 / tanzu management-cluster delete(下线)
7.2 vSphere 平台(tkg-vsphere.yaml 样例)
tanzu management-cluster create --file ~/clusterconfigs/tkg-vsphere.yaml
~/clusterconfigs/tkg-vsphere.yaml(凭据以 ⚠️ 占位,取值方式见文件内说明):
CLUSTER_NAME: tkg-mgmt-vsphere
CLUSTER_PLAN: dev
INFRASTRUCTURE_PROVIDER: vsphere
TKG_CLUSTER_NAMESPACE: default
VSPHERE_SERVER: 192.168.10.20
VSPHERE_DATACENTER: /DC0
VSPHERE_DATASTORE: /DC0/datastore/LocalDS_0
VSPHERE_NETWORK: /DC0/network/DC0_DVPG
VSPHERE_RESOURCE_POOL: /DC0/host/DC0_Host_Cluster/Resources
VSPHERE_FOLDER: /DC0/vm
VSPHERE_TLS_THUMBPRINT: <vCenter TLS 指纹,浏览器访问 vCenter 地址后点击证书查看,或用 openssl s_client 提取>
VSPHERE_USERNAME: <vCenter 账号,示例 administrator@vsphere.local>
VSPHERE_PASSWORD: <vCenter 密码,⚠️ 凭据占位,通过 tanzu management-cluster create 交互输入或环境变量注入,禁止明文入库>
VSPHERE_SSH_AUTHORIZED_KEYS: <管理员公钥内容,示例 ssh-rsa AAAA 开头的一整行公钥>
VSPHERE_CONTROL_PLANE_DISK_GIB: 40
VSPHERE_CONTROL_PLANE_MEMORY_MIB: 8192
VSPHERE_CONTROL_PLANE_NUM_CPUS: 2
VSPHERE_WORKER_DISK_GIB: 40
VSPHERE_WORKER_MEMORY_MIB: 8192
VSPHERE_WORKER_NUM_CPUS: 2
预期回显(创建引导阶段):
Validating configuration...
Using infrastructure provider: vSphere
Creating bootstrap cluster...
Waiting for bootstrap cluster to be ready...
Initializing management cluster...
Waiting for management cluster to be ready...
✓ Management cluster 'tkg-mgmt-vsphere' created successfully
7.3 AWS 平台(tkg-aws.yaml 样例)
tanzu management-cluster create --file ~/clusterconfigs/tkg-aws.yaml
~/clusterconfigs/tkg-aws.yaml:
CLUSTER_NAME: tkg-mgmt-aws
CLUSTER_PLAN: dev
INFRASTRUCTURE_PROVIDER: aws
TKG_CLUSTER_NAMESPACE: default
AWS_REGION: ap-southeast-1
AWS_AVAILABILITY_ZONE: ap-southeast-1a
AWS_ACCOUNT_ID: <AWS 账号 ID,示例 123456789012,登录 AWS 控制台右上角获取>
AWS_VPC_ID: <VPC ID,示例 vpc-0a1b2c3d4e5f6a7b8>
AWS_PUBLIC_SUBNET_ID: <公有子网 ID,示例 subnet-0a1b2c3d4e5f6a7b8>
AWS_PRIVATE_SUBNET_ID: <私有子网 ID,示例 subnet-0a1b2c3d4e5f6a7b9>
AWS_NODE_AZ: ap-southeast-1a
AWS_SSH_KEY_NAME: <EC2 密钥对名称,示例 tanzu-key>
AWS_BASTION_ENABLED: "true"
AWS_B64ENCODED_CREDENTIALS: <AWS 访问密钥对经 base64 编码,⚠️ 凭据占位,生成方式见下>
⚠️ 注意:
AWS_B64ENCODED_CREDENTIALS的值来自对 AWS 凭据 JSON 的 base64 编码,生成方式:printf '{"AccessKeyID":"<AK>","SecretAccessKey":"<SK>","SessionToken":""}' | base64(⚠️ AK/SK 为真实凭据,仅允许通过该命令在创建时注入,禁止明文写入任何配置文件)。
预期回显:
Validating configuration...
Using infrastructure provider: AWS
Creating bootstrap cluster...
Waiting for bootstrap cluster to be ready...
Initializing management cluster...
Waiting for management cluster to be ready...
✓ Management cluster 'tkg-mgmt-aws' created successfully
7.4 Azure 平台(tkg-azure.yaml 样例)
tanzu management-cluster create --file ~/clusterconfigs/tkg-azure.yaml
~/clusterconfigs/tkg-azure.yaml:
CLUSTER_NAME: tkg-mgmt-azure
CLUSTER_PLAN: dev
INFRASTRUCTURE_PROVIDER: azure
TKG_CLUSTER_NAMESPACE: default
AZURE_ENVIRONMENT: AzurePublicCloud
AZURE_SUBSCRIPTION_ID: <订阅 ID,示例 00000000-0000-0000-0000-000000000000>
AZURE_TENANT_ID: <租户 ID,示例 11111111-1111-1111-1111-111111111111>
AZURE_CLIENT_ID: <服务主体 App ID,示例 22222222-2222-2222-2222-222222222222>
AZURE_CLIENT_SECRET: <服务主体密钥,⚠️ 凭据占位,通过环境变量 AZURE_CLIENT_SECRET 注入>
AZURE_LOCATION: eastus
AZURE_RESOURCE_GROUP: tanzu-mgmt-rg
AZURE_VNET_RESOURCE_GROUP: tanzu-mgmt-rg
AZURE_VNET_NAME: tanzu-vnet
AZURE_CONTROL_PLANE_SUBNET_NAME: control-plane-subnet
AZURE_CONTROL_PLANE_SUBNET_CIDR: 10.0.0.0/24
AZURE_NODE_SUBNET_NAME: node-subnet
AZURE_NODE_SUBNET_CIDR: 10.0.1.0/24
AZURE_SSH_PUBLIC_KEY_B64: <SSH 公钥的 base64 编码,⚠️ 占位,base64 编码公钥文件内容>
预期回显:
Validating configuration...
Using infrastructure provider: Azure
Creating bootstrap cluster...
Waiting for bootstrap cluster to be ready...
Initializing management cluster...
Waiting for management cluster to be ready...
✓ Management cluster 'tkg-mgmt-azure' created successfully
7.5 工作负载集群全流程
管理集群就绪后,创建工作负载集群(每个集群一份配置文件):
# ~/clusterconfigs/tkg-vsphere-wc.yaml(vSphere 工作负载集群示例)
CLUSTER_NAME: tanzu-workload-1
CLUSTER_PLAN: prod
INFRASTRUCTURE_PROVIDER: vsphere
TKG_CLUSTER_NAMESPACE: default
VSPHERE_CONTROL_PLANE_DISK_GIB: 40
VSPHERE_CONTROL_PLANE_MEMORY_MIB: 8192
VSPHERE_CONTROL_PLANE_NUM_CPUS: 2
VSPHERE_WORKER_DISK_GIB: 80
VSPHERE_WORKER_MEMORY_MIB: 16384
VSPHERE_WORKER_NUM_CPUS: 4
tanzu cluster create tanzu-workload-1 --file ~/clusterconfigs/tkg-vsphere-wc.yaml
tanzu cluster list
NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES AGE
tanzu-workload-1 default running 1/1 1/1 v1.22.7+vmware.1 5m
获取工作负载集群访问凭证:
tanzu cluster kubeconfig get tanzu-workload-1 --admin
kubectl config use-context tanzu-workload-1-admin@tanzu-workload-1
验证节点(预期回显):
kubectl get nodes
NAME STATUS ROLES AGE VERSION
tanzu-workload-1-control-plane-<随机后缀> Ready control-plane,master 5m v1.22.7+vmware.1
tanzu-workload-1-md-0-<随机后缀> Ready <none> 5m v1.22.7+vmware.1
⚠️ 注意:管理集群创建时
tanzu management-cluster create会先下载 TKG 兼容性文件(projects-stg.registry.vmware.com/tkg/framework-zshippable/tkg-compatibility)并解析 BOM。公网服务器无法解析 VMware registry 域名时,实测报错(错误信息字面量):
Downloading TKG compatibility file from 'projects-stg.registry.vmware.com/tkg/framework-zshippable/tkg-compatibility'
Error: unable to ensure prerequisites: unable to ensure tkg BOM file: failed to download TKG compatibility file from the registry: failed to list TKG compatibility image tags: Get "https://projects-stg.registry.vmware.com/v2/": dial tcp: lookup projects-stg.registry.vmware.com on <本机DNS服务器>:53: no such host
💡 该报错的根因是域名无法解析(公网 DNS 不发布 VMware 私有仓库记录),并非配置错误;具备 VMware 仓库访问权限的网络(如通过 VPN / 代理 / 内网镜像)即可正常继续。
八、多运行时方案(运行时选型)
TKG 托管集群与 unmanaged-cluster 的节点镜像均默认内置 containerd 作为运行时(Kubernetes CRI 实现,与节点镜像深度集成),这是 TKG 官方支持且唯一随发行版交付的运行时。
| 运行时 | 是否 TKG 官方交付 | 使用场景 | 说明 |
|---|---|---|---|
| containerd | ✅ 默认内置 | 所有 TKG 托管集群与 unmanaged-cluster 节点 | 随节点镜像交付,无需手工安装配置 |
| CRI-O | ❌ 不随 TKG 交付 | 不适用 | TKG 未提供 CRI-O 节点镜像,官方不支持替换 |
⚠️ 前置说明:TKG 的运行时可插拔性与社区 K3s/kubeadm 不同——TKG 的节点镜像(vSphere 模板、AWS AMI、Azure 镜像)由 VMware 预置 containerd 并管理其配置(
/etc/containerd/config.toml),不支持在 TKG 官方流程中替换为 CRI-O 等其他 CRI。如需非 containerd 运行时,应改用其他 Kubernetes 发行版(如 kubeadm 自建集群可自由选 containerd/CRI-O)。
验证节点运行时(unmanaged-cluster 或托管集群节点内执行,预期回显):
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP CONTAINER-RUNTIME
tanzu-workload-1-control-plane Ready control-plane,master 5m v1.22.7+vmware.1 10.0.0.5 containerd://1.5.9
containerd 关键配置(节点内 /etc/containerd/config.toml,TKG 节点镜像预置):
version = 2
[plugins."io.containerd.grpc.v1.cri"]
systemd_cgroup = true
💡 TKG 节点镜像中 containerd 采用 systemd cgroup 驱动(
systemd_cgroup = true),与 kubelet 的 systemd cgroup 驱动匹配;生产环境无需手工修改该项。
九、常见问题(FAQ)
Q1:tanzu unmanaged-cluster create 报 NAME_UNKNOWN: Repository name not known to registry 是什么原因?
TCE(Tanzu Community Edition)项目归档后,其镜像仓库中的 projects.registry.vmware.com/tce/compatibility 兼容性仓库已被删除,插件无法自动解析默认 TKR。解决方案:使用 --tkr 显式指定可访问的 TKR 镜像地址或本地 TKR 文件,或在具备 VMware 官方仓库访问权限的网络中执行。
Q2:tanzu management-cluster create 报 lookup projects-stg.registry.vmware.com on <DNS>:53: no such host 是什么原因?
projects-stg.registry.vmware.com 是 VMware 内部镜像仓库域名,公网 DNS 不发布其记录。需要将服务器接入可解析/可达该域名的网络(VMware 订阅用户的代理、VPN 或内网镜像)。
Q3:tanzu plugin list / tanzu plugin source list 打印 discovery 告警但不影响使用?
默认插件源指向 VMware OCI 仓库,公网不可达时插件发现失败仅打印告警;已安装插件(--local 方式)仍正常展示与使用。插件升级时同样使用 tanzu plugin install <插件名> --local <分发目录> 即可。
Q4:tanzu cluster list 报 Error: current server "" not found in tanzu config?
说明尚未创建/登录任何管理集群,tanzu 配置中无当前服务器。先完成管理集群创建(第七章)或 tanzu context create 接入已有集群。
Q5:unmanaged-cluster 创建时能跳过预检吗?
--skip-preflight 可跳过预检,但只跳过本机环境检查(Docker 引擎可用性、端口占用等),不能修复 TKR 解析失败;TKR 来源未解决前跳过预检仍会失败。
Q6:Ubuntu 22.04 拉取镜像超时(dial tcp 162.125.32.15:443: connect: connection refused)?
docker.io 直连被拒,在 /etc/docker/daemon.json 配置国内镜像加速(如 https://docker.m.daocloud.io)后 systemctl restart docker 即可(2.2 已述)。
十、卸载方式
10.1 卸载 unmanaged-cluster 本地集群
tanzu unmanaged-cluster delete tanzu-demo
若删除失败(如集群目录异常),手动清理残留目录:
rm -rf /root/.config/tanzu/tkg/unmanaged/tanzu-demo
10.2 卸载插件
tanzu plugin delete unmanaged-cluster -y
✔ successfully deleted plugin 'unmanaged-cluster'
tanzu plugin delete management-cluster -y
tanzu plugin delete cluster -y
tanzu plugin delete kubernetes-release -y
10.3 卸载 tanzu CLI
删除二进制与配置文件:
rm -f /usr/local/bin/tanzu
rm -rf /root/.config/tanzu /root/.local/share/tanzu-cli
⚠️ 托管集群(管理集群 + 工作负载集群)的删除必须先用命令完成,不能只删 CLI:
tanzu cluster delete 工作负载集群名 -y→tanzu management-cluster delete -y(删除云上基础设施,执行前确认已无在用工作负载集群)。
十一、参考链接
- tanzu-framework Releases:https://github.com/vmware-tanzu/tanzu-framework/releases
- tanzu CLI(独立仓库)Releases:https://github.com/vmware-tanzu/tanzu-cli/releases
- Tanzu Community Edition(归档):https://github.com/vmware-tanzu/community-edition
- TKG 官方文档:https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/
- TKG 配置文件说明:https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/2.2/tkg/GUID-tanzu-config-reference.html
- Docker Engine 安装(Ubuntu):https://docs.docker.com/engine/install/ubuntu/
- kubectl 下载:https://dl.k8s.io/release/