目录
- 参考文档
- 1、 前置条件
- 2、将虚拟机添加到 VM 目录中:
- 3、 为虚拟机的 vmdk 添加 label
- 4、为 Cloud Provider 创建用户
- 5、Kubernetes 配置
- 6、配置 kubelet 等
- 7、更新 Provider-ID
- 8、创建 Storage Class
- 9、使用 PVC 自动置备
参考文档
https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/index.html
1、 前置条件
1.1 操作系统
- Photon OS - v1.0 GA
- Ubuntu - 16.04, 18.04
- CoreOS - v4.11.2
- Centos - v7.3
- RHEL OS - v7.4
- SLES - v12 SP3
1.2 VMTools
所有安装k8s的虚拟机必须安装 VMTools。
2、将虚拟机添加到 VM 目录中:
登录 vCenter web client,新建一个名为 kubernetes 的虚拟机文件夹,将 k8s 所有虚拟机拖到此文件夹。
3、 为虚拟机的 vmdk 添加 label
通过下列命令下载并安装govc工具:
curl -L $URL_TO_BINARY | gunzip > /usr/local/bin/govc
chmod +x /usr/local/bin/govc
二进制获取地址:
https://github.com/vmware/govmomi/releases
参考链接:
https://github.com/vmware/govmomi/tree/master/govc#govc
安装完成后运行下列命令:
#填写相应的 vCenter IP、用户名和密码。
export GOVC_URL='vCenter IP OR FQDN'
export GOVC_USERNAME='vCenter User'
export GOVC_PASSWORD='vCenter Password'
export GOVC_INSECURE=1
#将vm name here 替换成 k8s vm 的名称,每个虚拟机都需要执行
govc vm.change -e="disk.enableUUID=1" -vm='vm name here'
4、为 Cloud Provider 创建用户
如果仅是POC,可以直接使用 [email protected] 。
或者自定义以下角色,并创建新用户,为新用户分配此角色,具体权限参考:
https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/vcp-roles.html
5、Kubernetes 配置
在所有节点的 /etc/kubernetes 目录下创建 vsphere.conf 文件:
[Global]
user = "[email protected]"
password = "password"
port = "443"
insecure-flag = "1"
[VirtualCenter "10.0.1.200"]
datacenters = "DC-1"
[Workspace]
server = "10.0.1.200"
datacenter = "DC-1"
default-datastore = "Datastore"
resourcepool-path = "Cluster-1/Resources"
folder = "kubernetes"
[Disk]
scsicontrollertype = pvscsi
6、配置 kubelet 等
找到 kubelet 启动文件(一般在 /etc/systemd/system/kubelet.service 下,Rancher 部署的可以在 RKE 的 cluster.yml 中添加),添加下列启动参数:
--cloud-provider=vsphere
--cloud-config=/etc/kubernetes/vsphere.conf
找到 api-server 和 controller-manager manifests配置文件,添加同样的参数:
Rancher 部署的可以在 RKE 的 cluster.yml 中添加,如果非 Rancher 部署参考下面的内容:
一般文件路径为:/etc/kubernetes/manifests/kube-apiserver.json 或者 .yaml
/etc/kubernetes/manifests/kube-controller-manager.json 或者 .yaml
如果配置文件是 .json,添加下列行:
"--cloud-provider=vsphere",
"--cloud-config=/etc/kubernetes/vsphere.conf"
如果配置文件是 .yaml,添加下列行(行首有两个空格):
- --cloud-provider=vsphere
- --cloud-config=/etc/kubernetes/vsphere.conf
7、更新 Provider-ID
执行下列命令:
kubectl get nodes -o json | jq '.items[]|[.metadata.name, .spec.providerID, .status.nodeInfo.systemUUID]'
如果输出为空,执行下列命令:
#!/bin/bash
export GOVC_URL='vCenter IP OR FQDN'
export GOVC_USERNAME='vCenter User'
export GOVC_PASSWORD='vCenter Password'
export GOVC_INSECURE=1
DATACENTER='DC-1'
FOLDER='kubernetes'
# In my case I'm using a prefix for the VM's, so grep'ing is necessary.
# You can remove it if the folder you are using only contains the machines you need.
#VM_PREFIX='<prefix>'
IFS=$'\n'
for vm in $(./govc ls "/$DATACENTER/vm/$FOLDER"); do
MACHINE_INFO=$(./govc vm.info -json -dc=$DATACENTER -vm.ipath="/$vm" -e=true)
# My VMs are created on vmware with upper case names, so I need to edit the names with awk
VM_NAME=$(jq -r ' .VirtualMachines[] | .Name' <<< $MACHINE_INFO | awk '{print tolower($0)}')
# UUIDs come in lowercase, upper case then
VM_UUID=$( jq -r ' .VirtualMachines[] | .Config.Uuid' <<< $MACHINE_INFO | awk '{print toupper($0)}')
echo "Patching $VM_NAME with UUID:$VM_UUID"
# This is done using dry-run to avoid possible mistakes, remove when you are confident you got everything right.
kubectl patch node $VM_NAME -p "{\"spec\":{\"providerID\":\"vsphere://$VM_UUID\"}}"
done
再次运行下列命令:
kubectl get nodes -o json | jq '.items[]|[.metadata.name, .spec.providerID, .status.nodeInfo.systemUUID]'
输出应该就包含了 ProviderID 相关内容。
重启 kubelet 、apiserver 及 controller manager。默认如果用 RKE 修改了 cluster.yaml ,只需要重新 up 以下就可以,到时候检查下 kubelet、apiserver 及 controller manager 时间,看是否重启过。
8、创建 Storage Class
创建下列 yaml 文件,并用 kubectl apply -f 加载。
$ cat vsphere-volume-spbm-policy.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: fast
provisioner: kubernetes.io/vsphere-volume
parameters:
diskformat: zeroedthick
storagePolicyName: gold
datastore: Datastore1
使用下列命令检查:
kubectl describe storageclass fast
Name: fast
Annotations: <none>
Provisioner: kubernetes.io/vsphere-volume
Parameters: hostFailuresToTolerate="2", cachereservation="20"
No events.
9、使用 PVC 自动置备
为工作负载添加 PVC,测试自动创建 PV,步骤略。