VMware vSphere 与 K8s 集成:通过 vSphere Cloud Provider 实现 Pod 挂载 vSAN 存储
VMware vSphere 与 Kubernetes 集成:通过 vSphere Cloud Provider 实现 Pod 挂载 vSAN 存储
在 Kubernetes(K8s)环境中,通过 vSphere Cloud Provider 集成 VMware vSphere,可以实现 Pod 动态挂载 vSAN 存储。vSAN 是 VMware 的软件定义存储解决方案,提供高性能、高可用的存储服务。这种集成允许 Kubernetes 自动管理 vSAN 卷的生命周期,简化存储配置。以下是逐步指南,帮助您实现此功能。
1. 前提条件
在开始前,确保满足以下环境要求:
- Kubernetes 集群:版本 1.14 或更高,已部署在 vSphere 环境中。
- vSphere 环境:
- VMware vCenter Server 版本 6.7 或更高。
- vSAN 集群已配置并启用。
- vSphere 用户账户:具有管理员权限,用于 Kubernetes 访问 vCenter。
- 网络:Kubernetes 节点(包括 Master 和 Worker)与 vCenter 网络互通。
- vSphere Cloud Provider 插件:已安装或可配置。通常,在创建 Kubernetes 集群时通过 kubeadm 或类似工具启用。
2. 配置 vSphere Cloud Provider
vSphere Cloud Provider 是 Kubernetes 的云控制器插件,负责与 vSphere 交互。配置步骤如下:
-
创建 vSphere 配置文件:在 Kubernetes Master 节点上,创建或编辑
/etc/kubernetes/vsphere.conf文件。内容示例:[Global] user = "your-vcenter-username" # vCenter 用户名 password = "your-vcenter-password" # vCenter 密码 server = "vcenter-ip-or-fqdn" # vCenter 地址 port = 443 # 默认端口 insecure-flag = "1" # 如果使用自签名证书,设为 "1" [VirtualCenter "vcenter-ip-or-fqdn"] datacenters = "your-datacenter-name" # vCenter 数据中心名称 [Workspace] server = "vcenter-ip-or-fqdn" datacenter = "your-datacenter-name" default-datastore = "vsanDatastore" # 指定 vSAN 存储为默认 -
启用 vSphere Cloud Provider:
- 如果使用 kubeadm 部署集群,在初始化时添加参数:
kubeadm init --cloud-provider=vsphere - 对于现有集群,编辑 kubelet 配置(通常在
/var/lib/kubelet/config.yaml):
然后重启 kubelet 服务:cloudProvider: vspheresudo systemctl restart kubelet
- 如果使用 kubeadm 部署集群,在初始化时添加参数:
-
验证配置:
- 运行命令检查云控制器状态:
应看到类似kubectl get pods -n kube-system | grep vspherevsphere-cloud-controller-manager-xxxx的 Pod 运行中。
- 运行命令检查云控制器状态:
3. 创建 StorageClass 使用 vSAN 存储
StorageClass 定义动态卷的存储后端。这里使用 vSAN 作为提供者。
-
创建 StorageClass YAML 文件:例如
vsan-storageclass.yaml:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: vsan-sc # StorageClass 名称 provisioner: kubernetes.io/vsphere-volume # 指定 vSphere 卷提供者 parameters: datastore: vsanDatastore # vSAN 存储名称 diskformat: thin # 卷格式(thin、thick 等) fstype: ext4 # 文件系统类型 reclaimPolicy: Delete # 回收策略(Delete 或 Retain) volumeBindingMode: Immediate # 卷绑定模式- 关键参数:
datastore: 必须匹配 vSAN 存储名称(在 vCenter 中查看)。diskformat: 推荐thin以节省空间。fstype: 根据需求选择,如ext4或xfs。
- 关键参数:
-
应用 StorageClass:
kubectl apply -f vsan-storageclass.yaml验证:
kubectl get storageclass输出应显示
vsan-sc状态为Available。
4. 创建 PersistentVolumeClaim (PVC)
PVC 是 Pod 请求存储的接口。基于 StorageClass 动态创建 vSAN 卷。
-
创建 PVC YAML 文件:例如
vsan-pvc.yaml:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: vsan-pvc # PVC 名称 spec: storageClassName: vsan-sc # 引用 StorageClass accessModes: - ReadWriteOnce # 访问模式(单节点读写) resources: requests: storage: 5Gi # 请求存储大小,例如 $5\text{Gi}$ -
应用 PVC:
kubectl apply -f vsan-pvc.yaml验证 PVC 状态:
kubectl get pvc输出应显示
vsan-pvc状态为Bound,表示 vSAN 卷已动态创建。
5. 在 Pod 中挂载 PVC
创建 Pod 并使用 PVC 挂载 vSAN 存储。
-
创建 Pod YAML 文件:例如
vsan-pod.yaml:apiVersion: v1 kind: Pod metadata: name: vsan-pod # Pod 名称 spec: containers: - name: nginx-container image: nginx:latest volumeMounts: - name: vsan-volume # 卷挂载点名称 mountPath: /data # 容器内挂载路径 volumes: - name: vsan-volume persistentVolumeClaim: claimName: vsan-pvc # 引用 PVC -
应用 Pod:
kubectl apply -f vsan-pod.yaml验证 Pod 状态:
kubectl get pods vsan-pod输出应显示
Running。
6. 验证存储挂载
确保 Pod 成功挂载 vSAN 存储:
- 检查 Pod 日志:
无错误表示运行正常。kubectl logs vsan-pod - 进入 Pod 测试写入:
kubectl exec -it vsan-pod -- /bin/bash touch /data/testfile # 创建测试文件 exit - 在 vCenter 中验证:登录 vCenter,检查 vSAN 存储中是否生成新卷(名称类似
k8s-volume-xxxx)。
7. 注意事项
- 性能优化:vSAN 卷性能受网络和 vSAN 策略影响。建议在 vCenter 中配置存储策略(如 RAID 级别)。
- 安全:
- 使用 Secret 存储 vCenter 凭据(避免明文密码)。例如,创建 Secret:
然后在apiVersion: v1 kind: Secret metadata: name: vsphere-secret type: Opaque data: username: $(echo -n "your-username" | base64) password: $(echo -n "your-password" | base64)vsphere.conf中引用 Secret。
- 使用 Secret 存储 vCenter 凭据(避免明文密码)。例如,创建 Secret:
- 常见问题:
- 卷未绑定:检查 StorageClass 参数是否正确(如
datastore名称)。 - 权限错误:确保 vSphere 用户有足够权限管理存储。
- 版本兼容性:确认 Kubernetes 和 vSphere 版本兼容(参考 VMware 官方文档)。
- 卷未绑定:检查 StorageClass 参数是否正确(如
- 最佳实践:定期备份 PVC 数据,使用监控工具(如 Prometheus)跟踪存储使用。
通过以上步骤,您可以高效地将 vSAN 存储集成到 Kubernetes Pod 中。如果遇到问题,提供更多细节(如错误日志)以便进一步诊断。
更多推荐
所有评论(0)