Kubernetes使用vSphere存储 - vSphere-CSI
vSphere 云原生 k8s 存储
k8s version:1.27.2
vCenter version:7.0.3
一、先决条件
- 集群配置
如果你已经初始化了集群,但是忘记了添加 kubeletExtraArgs: cloud-provider: external 这个字段,你可以通过修改 kubelet 的配置文件来添加这个字段。kubelet 的配置文件通常位于 /var/lib/kubelet/config.yaml。
首先,你需要使用 root 权限打开这个文件:
sudo vim /var/lib/kubelet/config.yaml
然后在文件中找到 kubeletExtraArgs 字段,如果没有这个字段,你需要添加它。添加 cloud-provider: external,如下所示:
位置放在 kind: KubeletConfiguration 下面,启用第三方存储扩展
kubeletExtraArgs:
cloud-provider: external
- 前期配置 vSphere
权限配置参考(必须配置完再继续):准备安装 vSphere Container Storage 插件 (vmware.com)
- 安装 VMTools;
1、关机设置客户机操作系统版本
2、增加配置虚拟机高级参数 disk.EnableUUID=TRUE;
3、配置虚拟机高级参数 disk.EnableUUID=TRUE;如果没有手动添加
4、调整虚拟机硬件版本至 15 以上;,右键虚拟机-兼容性-升级虚拟机兼容性(如果已经是15以上忽略此步骤)
5、添加 VMware 准 SCSI 存储控制器到 VM,使用 VMware 准虚拟类型。
6、开机安装 vm tools
进入虚拟机执行 mount /dev/cdrom /mnt
cd /mnt
cp VMwareTools-10.3.21-14772444.tar.gz /tmp
cd /tmp
./vmware-install.pl
至此前期准备完成!
二、k8s 部署相关插件
在安装 CPI 之前,请验证所有节点(包括控制平面节点)是否都受到 node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule 污染。
要污染节点,请使用 kubectl 污点节点<节点名称> node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule 命令。
当 kubelet 与外部云提供商一起启动时,会在节点上设置此污点以将其标记为不可用。在来自云控制器管理器的控制器初始化此节点后,kubelet 会删除此污点。(如未自动删除,操作手动删除)
验证 kubectl describe nodes | egrep “Taints:|Name:”
1、部署 vSphere Cloud Provider Interface(CPI) 插件
下载配置 vsphere-cloud-controller-manager.yaml
https://github.com/kubernetes/cloud-provider-vsphere/blob/release-1.26/releases/v1.26/vsphere-cloud-controller-manager.yaml (版本依赖看官网)
下载之后修改两处位置
---
# 填写 vCenter 配置账号密码
stringData:
192.123.123.123.username: "管理用户" #192.123.123.123 修改为自己的vCenter IP 地址
192.123.123.123.password: "管理密码"
---
# vcenter 配置
vcenter:
vCenter域名xxx.xxx.com: #填写 vCenter 域名
server: 192.123.123.123 #vCenter IP
user: 用户 #vCenter 管理账号
password: 密码 #vCenter 管理账号密码
datacenters:
- 数据中心 #数据中心
数据中心名称位置
2、部署 vSphere Container Storage 插件
- 创建 namespace
apiVersion: v1
kind: Namespace
metadata:
name: vmware-system-csi
- 编辑 csi-vsphere.conf CSI的配置文件为一个secret对象
[Global]
cluster-id = "k8s-20230712" #名称随意
[VirtualCenter "192.123.123.123"] #vCenter IP
insecure-flag = "true"
user = "管理用户"
password = "管理密码"
port = "443"
datacenters = "数据中心名称,多数据中心请用逗号分隔"
3、创建 vsphere-csi-driver.yaml
https://raw.githubusercontent.com/kubernetes-sigs/vsphere-csi-driver/v3.0.0/manifests/vanilla/vsphere-csi-driver.yaml
下载执行 kubectl create -f vsphere-csi-driver.yaml
部署完成就可以在 k8s 创建 storageClass ,先拿到存储 URL
- 创建 vsphere-sc.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: example-block-sc
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: csi.vsphere.vmware.com
parameters:
storagepolicyname: "vSAN Default Storage Policy" #使用存储策略定义
datastoreurl: "存储URL写这里" #使用指定的数据存储定义,可以是挂载给ESXi的NFS,FC/IP SAN,本地存储等
csi.storage.k8s.io/fstype: "ext4" #设定格式化文件类型
执行 kubectl apply -f vsphere-sc.yaml
在 k8s 内就可以使用 vSphere 持久化存储类了
更多推荐
所有评论(0)