k8s RKE2 vSphere 存储配置

k8s RKE2 vSphere 存储配置

背景

在 RKE2 中配置单节点并使用 vSphere 作为底层云提供商(CPI 提供节点网络与元数据,CSI 提供存储类)是一个非常标准的生产级方案。
RKE2 内置了 rancher-vsphere-cpi 和 rancher-vsphere-csi 的 Helm Chart。你只需要在主配置文件中声明云提供商名称,并通过 HelmChartConfig 将你的 vCenter 凭证注入给这些自动部署的组件。

修改 vsphere 参数

在安装之前,你必须在 vCenter 中修改这台节点虚拟机的高级设置,否则 CSI 将无法挂载存储卷:

  1. 关闭虚拟机,右键选择 编辑设置 (Edit Settings)。
  2. 转到 虚拟机选项 (VM Options) > 高级 (Advanced) > 编辑配置 (Edit Configuration)。
  3. 添加参数:键为 disk.EnableUUID,值为 TRUE。
  4. 保存并开启虚拟机。

vsphere-1

配置 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-cpirancher-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 界面查看该磁盘的 属性。
确认它的 “所在数据存储”