一、背景介绍
上篇文章介绍了KubeSphere的安装,采用一台master加四台work节点搭建,没有高可用。不出意外的崩了,console起不来了。
随后安装官方文档VMware vSphere安装KubeSphere,地址:在 VMware vSphere 安装 KubeSphere。使用 ./kk 生成config-sample.yaml文件需要按照链接内容更改。
KubeSphere官方文档中,没有vSAN CSI安装教程,本篇采用VMware官方方法,如果有更好方法欢迎留言。VMware vSphere Container Storage Plug-in 3.0官方地址:vSphere Container Storage Plug-in Deployment (vmware.com)
环境介绍:Kubernetes:v1.23.10、vSAN:8.0.2
任务目标:kubeSphere上安装VMware vSphere Container Storage Plug-in 3.0,并创建PVC。
二、准备工作
1、虚拟机高级参数设置
在上篇提到过的打开虚拟机硬盘UUID。
参考官方文档按需配置(CPI、FileServices):Preparing for Installation of vSphere Container Storage Plug-in (vmware.com)
2、下载相应的文档
因为网络原因,我们无法抓取镜像。先将相应的yaml下载,找出所需的image,使用魔法下载后上传至私有镜像仓库。
namespace.yaml
wget https://raw.githubusercontent.com/kubernetes-sigs/vsphere-csi-driver/v3.0.0/manifests/vanilla/namespace.yaml
该文件只是创建命名空间,无需更改。
kubectl apply -f namespace.yaml
csi-vsphere.conf
此文件需要创建。
文件地址:Create a Kubernetes Secret for vSphere Container Storage Plug-in (vmware.com)
vsphere-csi-driver.yaml
wget https://raw.githubusercontent.com/kubernetes-sigs/vsphere-csi-driver/v3.0.0/manifests/vanilla/vsphere-csi-driver.yaml
该文件里有image需要更改。
3、下载镜像并上传至镜像仓库
(1)、 打开vsphere-csi-driver.yaml,找出所有image,并记录记录位置。
247 k8s.gcr.io/sig-storage/csi-attacher:v4.2.0
265 k8s.gcr.io/sig-storage/csi-resizer:v1.7.0
284 gcr.io/cloud-provider-vsphere/csi/release/driver:v3.0.0
335 k8s.gcr.io/sig-storage/livenessprobe:v2.9.0
343 gcr.io/cloud-provider-vsphere/csi/release/syncer:v3.0.0
381 k8s.gcr.io/sig-storage/csi-provisioner:v3.4.0
397 k8s.gcr.io/sig-storage/csi-snapshotter:v6.2.1
403 k8s.gcr.io/sig-storage/csi-snapshotter:v6.2.1
457 k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.7.0
480 gcr.io/cloud-provider-vsphere/csi/release/driver:v3.0.0
542 k8s.gcr.io/sig-storage/livenessprobe:v2.9.0
604 k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.7.0
627 gcr.io/cloud-provider-vsphere/csi/release/driver:v3.0.0
684 k8s.gcr.io/sig-storage/livenessprobe:v2.9.0
(2)、配置docker proxy并pull镜像
新建一台虚拟机
mkdir -p /etc/systemd/system/docker.service.d
vim http-proxy.conf
[Service]
Environment="HTTP_PROXY=192.168.0.10:7890"
Environment="HTTPS_PROXY=192.168.0.10:7890"
退出文件后,
systemctl daemin-reload
systemctl restart docker
打开代理服务后就可以pull镜像了。
docker pull gcr.io/cloud-provider-vsphere/csi/release/syncer:v2.0.0
docker pull gcr.io/cloud-provider-vsphere/csi/release/driver:v2.0.0
docker pull quay.io/k8scsi/csi-resizer:v0.3.0
docker pull quay.io/k8scsi/csi-provisioner:v1.4.0
docker pull quay.io/k8scsi/csi-attacher:v2.0.0
docker pull quay.io/k8scsi/csi-node-driver-registrar:v1.2.0
docker pull quay.io/k8scsi/livenessprobe:v1.1.0
docker pull k8s.gcr.io/sig-storage/csi-snapshotter:v6.2.1
(3)、将镜像push至私有仓库
harbor的创建过程就省略了。
使用docker tag 更改镜像名
使用docker push 上传镜像
4、更改配置文件
(1)csi-vsphere.conf
下载vCenter 根证书
wget https:192.167.2.10/certs/download.zip
unzip download.zip
cp /crets/lin/dbad4059.0 /etc/ssl/certs/
cd /etc/ssl/certs/
kubectl create configmap vc-root-ca-cert --from-file=dbad4059.0 --namespace=vmware-system-csi
编辑csi-vsphere.conf文件
详细文件说明:Create a Kubernetes Secret for vSphere Container Storage Plug-in (vmware.com)
打开csi-vsphere.conf文件
[Global]
cluster-id = "vsan01" # 唯一标识
cluster-distribution = "CSI" # 描述
#ca-file = <ca file path> # optional, use with insecure-flag set to false
#thumbprint = "<cert thumbprint>" # optional, use with insecure-flag set to false without providing ca-file
[VirtualCenter "192.167.2.10"] # vcenter地址
insecure-flag = "false"
ca-file = "/etc/ssl/certs/dbad4059.0" # 下载的vcenter证书地址
user = "**************" # 用户名
password = "**********" # 密码
port = "443"
datacenters = "Datacenter" # 数据中心名称
#[Snapshot]
#global-max-snapshots-per-block-volume = 3
#[Labels]
#topology-categories = "k8s-zone"
修改上述的信息
(2)vsphere-csi-driver.yaml
将vsphere-csi-driver.yaml中的镜像地址,替换为私有仓库中的镜像地址。
将vcenter证书挂载给vsphere-csi-controller和vsphere-syncer
三、安装CSI
创建密钥
kubectl create secret generic vsphere-config-secret --from-file=csi-vsphere.conf --namespace=vmware-system-csi
查看密钥是否成功创建
kubectl get secret vsphere-config-secret --namespace=vmware-system-csi
给所有master打污点
kubectl taint nodes master01 node-role.kubernetes.io/control-plane=:NoSchedule
kubectl taint nodes master02 node-role.kubernetes.io/control-plane=:NoSchedule
kubectl taint nodes master03 node-role.kubernetes.io/control-plane=:NoSchedule
部署CSI
kubectl apply -f vsphere-csi-driver.yaml
四、创建存储类和PVC
vim storageclass.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: vsan
annotations:
storageclass.kubernetes.io/is-default-class: "true" #默认使用
provisioner: csi.vsphere.vmware.com
parameters:
storagepolicyname: "vSAN Default Storage Policy" #Optional Parameter
# datastoreurl: "ds:///vmfs/volumes/vsan:52cdfa80721ff516-ea1e993113acfc77/" #Optional Parameter
# # csi.storage.k8s.io/fstype: "ext4" #Optional Parameter
也可以使用KubeSphere console创建,注意provisioner为csi.vsphere.vmware.com。
vim pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
storageClassName: vsan
五、验证
从vCenter vSAN 容器卷中查看持久卷
卷名和容量大小,在vCenter和KubeSphere查看完全对应。