esxi mysql 存储_Kubernetes调用vSphere vSAN做持久化存储

本文介绍了如何在Kubernetes集群中部署vSphere Cloud Provider,以便Pod能调用vSphere vSAN作为持久卷进行数据存储。详细步骤包括设置disk UUID、部署vSphere Cloud Provider配置文件,以及基于SPBM存储策略动态创建存储卷的过程。
摘要由CSDN通过智能技术生成

参考

一. 框架

0f364c777da2fe701962c8bc41cf6fe2.png

说明:

在kubernetes集群中部署vsphere cloud provider;

运行在kubernetes集群中的Pod通过多种方式(静态或动态)可调用vSAN/VMFS等后端存储的VMDK做为其持久卷。

二. 环境

2.1 验证环境

vCenter

IP

Version

USER

PASSWORD

DataCenter

DataStore

Remark

172.20.0.16

6.0.0 内部版本5112533

administrator@vsphere.local

AIUc63$#v4LZ

Mcloud

-

-

-

k8s@vsphere.local

k8S!@Vcp123

Mcloud

vsanDatastore

说明:

使用administrator账号设置disk UUID;

使用administrator账号为vsphere cloud provider(vcp)账号赋权;

kubernetes集群使用vcp账号与vCenter交互;

DataCenter是vCenter下的一级逻辑组织,取kubernetes集群所在DataCenter对应名字即可;

DataStore取kubernetes集群需要调用的后端存储名字,类型可以是vSAN,VMFS,NFS & VVol等。

kubernetes-cluster nodes

Hostname

IP

Roles

Version

Remark

kubemaster01

172.30.200.101

master&minion

v1.12.3

kubemaster02

172.30.200.102

master&minion

v1.12.3

kubemaster03

172.30.200.103

master&minion

v1.12.3

govc node

Hostname

IP

Roles

Version

Remark

ansible01

172.30.200.46

govc

v0.19.0

2.2 一些先决条件

1.组建kubernetes集群的vm节点必须放置在一个vsphere vm folder,在vCenter的虚拟机与模板下创建,文件夹名自定义,这里定义为kubernetes-cluster;

2.组建kubernetes集群的vm节点的name需要与其操作系统hostname一致;

3.组建kubernetes集群的vm节点的disk UUID需要设置为enabled(见下文详细设置);

4.(针对kubernetes version is 1.8.x or below的规则,未验证在1.8.x以上版本是否可不遵守此规则)组建kubernetes集群的vm节点的name需要遵守以下regex:[a-z](([-0-9a-z]+)?[0-9a-z])?(\.[a-z0-9](([-0-9a-z]+)?[0-9a-z])?)*:

不以数字开头;

不使用大写字母;

不包含除“.”和“-”以外的任何特殊字符;

必须至少包含三个字符,但不超过 63 个字符。

5.在vCenter设置vSphere cloud provider user,这里vcp账号设置为k8s@vsphere.local:

vSphere Web Clinet --> 主页 --> (系统管理)角色;

添加用户:Single Sign-On --> 用户 --> 添加k8s账号 ;

创建角色:访问控制--> 角色 --> 添加k8s-vcp角色,角色按照官方说明中dynamic persistent volume provisioning with storage policy赋权;

账号关联角色:访问控制--> 全局权限 --> 添加权限,关联账号与角色。

补充:部分资料中角色权限中有System.*权限,此类权限不用特别赋权,默认即带,且在角色清单中也找不到System.*权限。

三. disk UUID

通过govc工具,可以设置disk UUID,参考:GitHub vmware/govmomi

3.1 安装govc

# 选择版本,直接安装binaries

curl -L https://github.com/vmware/govmomi/releases/download/v0.19.0/govc_linux_amd64.gz | gunzip > /usr/local/bin/govc

chmod +x /usr/local/bin/govc

3.2 设置govc环境变量

# 设置环境变量

export GOVC_URL=‘172.20.0.16‘ # vCenter ip地址或FQDN

export GOVC_USERNAME=‘administrator@vsphere.local‘ # vCenter administrator账号

export GOVC_PASSWORD=‘AIUc63$#v4LZ‘ # vCenter administrator账号密码

export GOVC_INSECURE=1 # 如果使用了自签名证书,设置为"1"

# 设置环境变量后,可查看govc变量与版本

govc env

govc about

20181219162208136827.png

3.3 设置disk UUID

通过govc可以确定kubernetes集群vm节点位置:

# 格式://vm/

# :vsphere中datacenter名,根据实际环境填写,这里取值"Mcloud";

# vm:固定参数,如:vm,network,host,datastore;

# :自定义名字的"vsphere vm folder",这里取值"kubernetes-cluster"

govc ls /Mcloud/vm/kubernetes-cluster

20181219162208305778.png

设置kubernetes集群vm节点的disk UUID为true:

# "disk.enableUUID=1"即为"true";

# 将已设置"disk.enableUUID=1"的vm打成模板,通过模板克隆出新的vm可继承此属性

govc vm.change -e="disk.enableUUID=1" -vm=‘/Mcloud/vm/kubernetes-cluster/kubemaster01‘

govc vm.change -e="disk.enableUUID=1" -vm=‘/Mcloud/vm/kubernetes-cluster/kubemaster02‘

govc vm.change -e="disk.enableUUID=1" -vm=‘/Mcloud/vm/kubernetes-cluster/kubemaster03‘

补充govc用法(与本实验无关):手工创建vmdk

# 格式:datastore.disk.create -ds -size xG /.vmdk

# :需要调用的后端存储名字,这里取值"vsanDatastore";

# :中存放新建存储卷的目录,这里自定义目录名"k8sData",需要注意的是目录需要提前创建,否则会报错;

# vmdk文件创建之后的初始大小为0kb

govc datastore.disk.create -ds vsanDatastore -size 10G k8sData/MySQLDisk.vmdk

四. 部署vSphere Cloud Provider

4.1 创建vSphere Cloud Provider配置文件(kubernetes v1.9.x and above)

在所有kubernetes master节点创建文件(自定义路径&名字):/etc/kubernetes/vsphere.conf

vim /etc/kubernetes/vsphere.conf

# 全局属性

[Global]

# 从安全角度考虑,生产环境应使用针对性的账号

user = "k8s@vsphere.local"

password = "k8S!@Vcp123"

port = "443"

# 如果使用自签名证书,应设置为"1"

insecure-flag = "1"

datacenters = "Mcloud"

# 针对kubernetes集群节点跨多vCenter的情况,可设置多"VirtualCenter";

# "user","password","datacenters"也可设置在此,可覆盖全局属性

[VirtualCenter "172.20.0.16"]

# vSphere Cloud Provider使用"SPBM"存储策略配置存储卷

[Workspace]

# mandatory

server = "172.20.0.16"

# mandatory

datacenter = "Mcloud"

# mandatory

folder = "kubernetes-cluster"

# option,本实验省略;

# kubernetes创建pvc资源时,如果选项中未指定数据存储或存储策略,则使用默认数据存储放置vmdk

#default-datastore="vsanDatastore"

# option,本实验省略;

# 资源池文件夹,放置创建的vmdk

#resourcepool-path="kubernetes-cluster"

[Disk]

# option;

# lsilogic-sas or pvscsi, default: pvscsi

scsicontrollertype = pvscsi

[Network]

# option,本实验省略;

# Name of public VM Network to which the VMs in the cluster are connected. Used to determine public IP addresses of VMs.

#public-network = "VM Network"

4.2 部署vSphere Cloud Provider(kubernetes v1.9.x and above)

在所有kubernetes master节点,为kube-apiserver,kube-controller-manager,kubelet等3个服务添加参数:

--cloud-provider=vsphere

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

在所有kubernetes minion节点,为kubelet添加参数:

--cloud-provider=vsphere

重启相关服务。

注意:如果kubelet使用了--cloud-provider参数,--hostname-override参数将失效;

如果使用了--hostname-override参数,可以通过kubectl delete node 删除状态为NotReady的节点。

五. kubernetes使用vSAN

kubernetes可以通过以下方式调用vSAN:

5.1 基于SPBM存储策略动态创建存储卷

StorageClass

cat vsphere-storageclass-spbm.yaml

apiVersion: storage.k8s.io/v1

kind: StorageClass

metadata:

name: vsphere-storageclass-spbm

# 存储分配器,根据后端存储不同而变更

provisioner: kubernetes.io/vsphere-volume

# 默认即"Delete",删除pvc后,相应的pv及后端的volume等一起删除;

# 设置为"Retain"时则保留数据,需要手工处理

reclaimPolicy: Delete

parameters:

# 指定具体的datastore,如果不指定则采用在"vsphere-cloud-config-file(vsphere.conf)"中设置的默认"default-datastore"

datastore: vsanDatastore

# 默认即"thin",另有"zeroedthick"与"eagerzeroedthick"可选

diskformat: thin

# 磁盘格式,如:xfs,ext3,ext4等

fstype: xfs

# 以下两条是调用SPBM策略,SPBM策略有:cacheReservation,diskStripes,forceProvisioning,hostFailuresToTolerate,iopsLimit,objectSpaceReservation

# 以下设置是vCenter中默认的"Virtual SAN Default Storage Policy"的设置

hostFailuresToTolerate: "1"

diskStripes: "1"

# 创建StorageClass

kubecet create -f vsphere-storageclass-spbm.yaml

# 查看StorageClass

kubectl describe sc vsphere-storageclass-spbm

20181219162208384883.png

PVC & PV

创建pvc

cat vsphere-pvc002.yaml

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: vsphere-pvc002

# 调用StrageClass

annotations:

volume.beta.kubernetes.io/storage-class: vsphere-storageclass-spbm

spec:

# ReadWriteOnce:简写RWO,读写权限,且只能被单个node挂载;

# ReadOnlyMany:简写ROX,只读权限,允许被多个node挂载;

# ReadWriteMany:简写RWX,读写权限,允许被多个node挂载

accessModes:

- ReadWriteOnce

resources:

requests:

# 注意格式,不能写“GB”

storage: 10Gi

# 创建PVC

kubecet create -f vsphere-pvc002.yaml

# 查看PVC

kubecet describe pvc vsphere-pvc002

20181219162208668097.png

PV由PVC调用StorageClass自动创建

# 查看自动创建的PV

kubectl get pv

kubecet describe pv pvc-b3754406-0359-11e9-b1f2-005056bfac1e

20181219162208795055.png

同步查看vCenter信息

20181219162208876113.png

查看在vSAN DataStore上生成的vmdk

20181219162208964007.png

Pod

cat vsphere-pod002.yaml

apiVersion: v1

kind: Pod

metadata:

name: vsphere-pod002

spec:

containers:

- name: test-container

# 使用中科大的镜像仓库

image: gcr.mirrors.ustc.edu.cn/google_containers/test-webserver

volumeMounts:

- name: test-volume

mountPath: /test-vmdk

volumes:

- name: test-volume

# Pod挂载PVC

persistentVolumeClaim:

claimName: vsphere-pvc002

# 创建Pod

kubecet create -f vsphere-pod002.yaml

# 查看Pod

kubectl describe pod vsphere-pod002

20181219162209244291.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值