Kubernetes使用vSphere存储 - vSphere-CSI

k8s version:1.27.2
vCenter version:7.0.3

一、先决条件

  1. 集群配置

如果你已经初始化了集群,但是忘记了添加 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以上忽略此步骤)
    如果已经是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 持久化存储类了

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值