《kubernetes-1.8.0》15-addon-vSphere Cloud Provider

《kubernetes 1.8.0 测试环境安装部署》

时间:2017-12-04

一、关于vSphere Cloud Provider:

vSphere Cloud Provider 配置了这玩意能够让k8s集群通过(volumepvpvcStorage Class)使用 vsphere 企业级的存储(通过vsphere的vmdk实现),如果k8s宿主机使用的是vmware平台的虚拟机,这一特性真的还挺诱人的。。

二、配置步骤:

step 1:

Create a VM folder and move Kubernetes Node VMs to this folder.

进到vcenter控制台创建目录,并将之前部署好的运行k8s的虚拟机迁移到改目录:

  • 目录名叫kuebrnetes-cluster:这个没所谓
  • vm的name:必须和kubernetes各个节点的hostname一致,可以省去很多麻烦,切记!!

step 2:

Enable disk UUID on Node virtual machines.

启用vm的disk UUID,通过govc工具

在能够访问vcenter的linux主机上,安装dovc 工具,方法 –> GOVC tools

  • 设置govc环境变量:
export GOVC_URL='vCenter IP OR FQDN'
export GOVC_USERNAME='vCenter User'
export GOVC_PASSWORD='vCenter Password'
export GOVC_INSECURE=1
  • GOVC_URL : vcenter的地址
  • GOVC_USERNAME : vcenter的管理员用户名
  • GOVC_PASSWORD : vcenter的管理员密码

  • 通过govc找一下几个vm节点的位置:

[root@node-131 vsphere-volume]# govc ls /DateCenter-PTYW/vm/kubernetes-cluster
/DateCenter-PTYW/vm/kubernetes-cluster/node.134
/DateCenter-PTYW/vm/kubernetes-cluster/node.132
/DateCenter-PTYW/vm/kubernetes-cluster/node.133
/DateCenter-PTYW/vm/kubernetes-cluster/node.131
  • 设置这几台的disk.enableUUID值为1:
govc vm.change -e="disk.enableUUID=1" -vm='/DateCenter-PTYW/vm/kubernetes-cluster/node.134'
govc vm.change -e="disk.enableUUID=1" -vm='/DateCenter-PTYW/vm/kubernetes-cluster/node.133'
govc vm.change -e="disk.enableUUID=1" -vm='/DateCenter-PTYW/vm/kubernetes-cluster/node.132'
govc vm.change -e="disk.enableUUID=1" -vm='/DateCenter-PTYW/vm/kubernetes-cluster/node.131'

step 3:

创建 vSphere Cloud Provider所使用的用户,并给予角色及相应权限(我这里是测试环境,所以就用管理员账户了,有需要建立独立用户的参考一下角色及权限表)

这里关于system.*的权限,通过看vmware的文档不用特别赋值,缺省就带,在角色清单里也没有办法找到这个组的权限


step 4:

创建vsphere cloud配置文件:

/etc/kubernetes/vsphere.conf

[Global]
        user = "vCenter username for cloud provider"
        password = "password"
        server = "IP/FQDN for vCenter"
        port = "443" #Optional
        insecure-flag = "1" #set to 1 if the vCenter uses a self-signed cert
        datacenter = "Datacenter name" 
        datastore = "Datastore name" #Datastore to use for provisioning volumes using storage classes/dynamic provisioning
        working-dir = "vCenter VM folder path in which node VMs are located"
        vm-name = "VM name of the Master Node" #Optional
        vm-uuid = "UUID of the Node VM" # Optional        
[Disk]
    scsicontrollertype = pvscsi
  • user:可是是step 3中创建的vSphere Cloud Provider所使用的用户,我这里填的是管理员用户,生产环境还是建议用专用的用户。
  • datastore:填写数据存储的名字,本例中为local_datastore_47;
  • datacenter: 填写数据中心的名字,本例中为DateCenter-PTYW;
  • vm-name: 很关键,填本机的node name,并与vcenter中的vm name保持一致;否则将出现node无法注册的问题;
  • vm-uuid:通过以下方式获取本节点的uuid,完了填进去
cat /sys/class/dmi/id/product_serial | sed -e 's/^VMware-//' -e 's/-/ /' | awk '{ print toupper($1$2$3$4 "-" $5$6 "-" $7$8 "-" $9$10 "-" $11$12$13$14$15$16) }'

同时在所有node上创建上述文件;


step 5:

在 controller-manager, API server 和 Kubelet 配置文件中添加参数,开启 vSphere Cloud Provider的支持(node节点只要修改kubelet的);

加上这个两个参数:

--cloud-provider=vsphere
--cloud-config=/etc/kubernetes/vsphere.conf

重启先关服务:

systemctl daemon-reload
systemctl restart kube-apiserver
systemctl restart kube-controller-manager
systemctl restart kubelet

检查相关服务是否成功启动一级节点有没有重新ready:

[root@node-131 vsphere-volume]# kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok                   
controller-manager   Healthy   ok                   
etcd-1               Healthy   {"health": "true"}   
etcd-0               Healthy   {"health": "true"}   
etcd-2               Healthy   {"health": "true"}   

[root@node-131 vsphere-volume]# kubectl get nodes
NAME       STATUS    ROLES     AGE       VERSION
node.131   Ready     <none>    1d        v1.8.0
node.132   Ready     <none>    1d        v1.8.0
node.133   Ready     <none>    1d        v1.8.0
node.134   Ready     <none>    1d        v1.8.0

至此 vSphere Cloud Provider特性添加完成:

本系列其他内容:

参考资料:

https://kubernetes.io/docs/getting-started-guides/vsphere/

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐