背景
在 RKE2 中配置单节点并使用 vSphere 作为底层云提供商(CPI 提供节点网络与元数据,CSI 提供存储类)是一个非常标准的生产级方案。
RKE2 内置了 rancher-vsphere-cpi 和 rancher-vsphere-csi 的 Helm Chart。你只需要在主配置文件中声明云提供商名称,并通过 HelmChartConfig 将你的 vCenter 凭证注入给这些自动部署的组件。
修改 vsphere 参数
在安装之前,你必须在 vCenter 中修改这台节点虚拟机的高级设置,否则 CSI 将无法挂载存储卷:
- 关闭虚拟机,右键选择 编辑设置 (Edit Settings)。
- 转到 虚拟机选项 (VM Options) > 高级 (Advanced) > 编辑配置 (Edit Configuration)。
- 添加参数:键为 disk.EnableUUID,值为 TRUE。
- 保存并开启虚拟机。

配置 RKE2 主配置文件 (config.yaml)
首先,创建 RKE2 配置目录并编写主配置文件。这个文件告诉 RKE2 启用内置的 vSphere 插件。
1sudo mkdir -p /etc/rancher/rke2
创建 /etc/rancher/rke2/config.yaml 并写入以下内容:
1# /etc/rancher/rke2/config.yaml
2write-kubeconfig-mode: "0644"
3cloud-provider-name: "rancher-vsphere"
配置 CPI 和 CSI 的 vCenter 凭证
由于你使用了 rancher-vsphere 作为云提供商,RKE2 启动时会自动触发 Helm 部署 CPI 和 CSI。你需要提前在 manifests 目录中放置 HelmChartConfig 文件,以覆盖默认的空凭证。
1sudo mkdir -p /var/lib/rancher/rke2/server/manifests
创建 /var/lib/rancher/rke2/server/manifests/vsphere-cpi-csi.yaml,并根据你的实际环境替换 vCenter 相关信息:
1# /var/lib/rancher/rke2/server/manifests/vsphere-cpi-csi.yaml
2apiVersion: helm.cattle.io/v1
3kind: HelmChartConfig
4metadata:
5 name: rancher-vsphere-cpi
6 namespace: kube-system
7spec:
8 valuesContent: |-
9 vCenter:
10 host: "10.0.0.10" # vCenter 的 IP 或 FQDN
11 port: 443
12 insecureFlag: true # 如果是自签证书,请保持为 true
13 datacenters: "MyDatacenter" # vSphere 数据中心名称
14 username: "administrator@vsphere.local"
15 password: "MySecretPassword"
16 credentialsSecret:
17 generate: true
18
19---
20apiVersion: helm.cattle.io/v1
21kind: HelmChartConfig
22metadata:
23 name: rancher-vsphere-csi
24 namespace: kube-system
25spec:
26 valuesContent: |-
27 vCenter:
28 host: "10.0.0.10"
29 datacenters: "MyDatacenter"
30 clusterId: "MyCluster" # vSphere 集群 (Cluster) 的名称
31 username: "administrator@vsphere.local"
32 password: "MySecretPassword"
33 insecureFlag: true
安装与启动 RKE2
配置文件就绪后,通过标准脚本安装并启动 RKE2 Server
1# 运行安装脚本
2curl -sfL https://get.rke2.io | sh -
3
4# 启动 RKE2 服务
5sudo systemctl enable --now rke2-server.service
启动过程需要几分钟。你可以通过 watch kubectl get pods -A 观察 kube-system 命名空间下 rancher-vsphere-cpi 和 rancher-vsphere-csi 相关的 Pod 是否成功处于 Running 状态。
验证与定义默认存储类 (StorageClass)
当 CSI 驱动成功运行后,你需要创建一个 StorageClass 并将其设为默认,这样集群中的工作负载就可以直接通过 PVC 动态申请 vSphere 存储。
创建一个名为 vsphere-sc.yaml 的文件:
1# vsphere-sc.yaml
2apiVersion: storage.k8s.io/v1
3kind: StorageClass
4metadata:
5 name: vsphere-csi-sc
6 annotations:
7 storageclass.kubernetes.io/is-default-class: "true"
8provisioner: csi.vsphere.vmware.com
9# 如果你想使用特定的数据存储 (Datastore),取消下面的注释并填入 datastoreurl (格式类似于 ds:///vmfs/volumes/xxx-xxx/)
10# parameters:
11# datastoreurl: "ds:///vmfs/volumes/YOUR-DATASTORE-ID/"
12# 如果不指定 datastoreurl,它将回退使用 vSphere SPBM (存储策略) 或集群默认存储
应用该配置:
1kubectl apply -f vsphere-sc.yaml
验证节点状态
1kubectl get node -o custom-columns=NAME:.metadata.name,ID:.spec.providerID
验证PV是否生效
建议创建一个新的 StorageClass(或者修改现有的),将你提供的数据中心路径填入 parameters 字段。
保存以下内容为 vsphere-sata-sc.yaml
1apiVersion: storage.k8s.io/v1
2kind: StorageClass
3metadata:
4 name: vsphere-sata-sc
5 annotations:
6 # 如果想让它成为默认存储类,取消下面这行的注释
7 # storageclass.kubernetes.io/is-default-class: "true"
8provisioner: csi.vsphere.vmware.com
9reclaimPolicy: Delete
10allowVolumeExpansion: true # 允许以后在线扩容
11volumeBindingMode: Immediate
12parameters:
13 # 重点:这里指定你提供的 Datastore URL
14 datastoreurl: "ds:///vmfs/volumes/xxxxxxxxxxxxxxxxxxxxx/"
应用
1kubectl apply -f vsphere-sata-sc.yaml
创建 test-sata-pvc.yaml
1apiVersion: v1
2kind: PersistentVolumeClaim
3metadata:
4 name: sata-test-pvc
5spec:
6 accessModes:
7 - ReadWriteOnce
8 resources:
9 requests:
10 storage: 2Gi
11 storageClassName: vsphere-sata-sc # 指向你刚才创建的 SC
应用
1kubectl apply -f test-sata-pvc.yaml
待状态变为 Bound 后,去 vCenter 界面查看该磁盘的 属性。
确认它的 “所在数据存储”














