vSphere 7融合Kubernetes,构建现代化应用的平台
参考文章:
安装vSphere 7 with WCP
完成安装以后,在工作负载的页面可以看到原来的vSphere集群已经变成了WCP Supervisor集群,并建立名为namespaces的资源池。集群内部生成了三个VM,作为WCP中kubernetes的master节点。
在WCP里,vSphere支持原生的vSphere pod和原有的K8S集群,其存在关系如下结构图所示:
在Supervisor里,可以建立不同的Supervisor Namespace,每个Supervisor里面可以支持不同的虚拟化,包括VM/vSphere Pod/K8S集群以及数据库。
有关该架构中的组件解释,请参考:
vSphere with Kubernetes架构
VMware NSX-T™ Data Center为Supervisor 集群中的对象与外部网络提供网络连接。集群中包含的 ESXi主机的连接由标准 vSphere 网络处理。
如上图显示,WCP中的Namespace(Supervisor Namespace)相对于K8S的NS而言,含义更为广泛。使用中由IT 基础架构的管理员通过图形界面来建立,开发人员只能使用,不能建立。
通过WCP平台,由符合管理人员和开发人员的使用习惯的方式(图形化界面/命令行)协调工作。
系统会根据Client的操作系统给出不同的插件链接。
按提示下载并安装插件后,即可登录。
1. 登录系统
注意在此版本,需要增加参数–insecure-skip-tls-verify(链接的提示没有提到)
此处的用户就是在Namespcae的权限设置中的用户,如果多个Namespace设置同一用户找,登录的时候会一并显示。
kubectl config use-context xxx命名空间名称来改变当前Namespace。
2. 使用kubectl命令
[root@localhost ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.7-2+bfe512e5ddaaaa", GitCommit:"bfe512e5ddaaaa7243d602d5d161fa09a57ecf3c", GitTreeState:"clean", BuildDate:"2020-03-03T03:40:35Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.7-2+bfe512e5ddaaaa", GitCommit:"bfe512e5ddaaaa7243d602d5d161fa09a57ecf3c", GitTreeState:"clean", BuildDate:"2020-03-03T03:37:44Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
可以看到kubernetes的版本是1.16.7。
[root@localhost ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
422845fe835f0bfe3ee1d61194b81eed Ready master 18d v1.16.7-2+bfe512e5ddaaaa
42285c4ffd346b9812c373070cb0cf49 Ready master 18d v1.16.7-2+bfe512e5ddaaaa
4228e3c8c95df99566f41fa037fc190e Ready master 18d v1.16.7-2+bfe512e5ddaaaa
esx-01a Ready agent 18d v1.16.7-sph-4d52cd1
esx-02a Ready agent 18d v1.16.7-sph-4d52cd1
esx-03a Ready agent 18d v1.16.7-sph-4d52cd1
系统生成的三个Master和三台主机,注意主机的role为agent。
3. 利用vSphere pod建一个简单的应用。
在官网推荐了一个测试Deployment:
apiVersion: v1
kind: Service
metadata:
name: hello-kubernetes
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: hello-kubernetes
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes
spec:
replicas: 3
selector:
matchLabels:
app: hello-kubernetes
template:
metadata:
labels:
app: hello-kubernetes
spec:
containers:
- name: hello-kubernetes
image: paulbouwer/hello-kubernetes:1.5
ports:
- containerPort: 8080
env:
- name: MESSAGE
value: I just deployed a PodVM on the Supervisor Cluster!!
在yaml里,直接指定service的type: LoadBalancer,此Ingress的负载均衡功能由NSX-T提供,如下图所示。
在web页面可以看到效果:
通过刷新或重新打开页面,可以看到LB的效果(以上)。
同时,在WCP的控制台可以看到pod的生成情况,此为管理员视角。
在上面提到的WCP架构里面,此内容为绿色部分。
Supervisor 集群与 Tanzu Kubernetes集群的关系
Supervisor 集群提供构建Tanzu Kubernetes 集群所在的管理层。Tanzu Kubernetes Grid 服务是一个自定义控制器管理器,其中包含一组属于Supervisor 集群的控制器。Tanzu Kubernetes Grid 服务的用途是置备 Tanzu Kubernetes 集群。
Supervisor 集群与 vSphere 集群之间是一对一关系,Supervisor 集群和Tanzu Kubernetes 集群之间是一对多关系。可以在单个 Supervisor 集群中置备多个Tanzu Kubernetes 集群。通过 Supervisor 集群提供的工作负载管理功能,让您能够控制集群配置和生命周期,同时有助于保持与上游 Kubernetes 的并发性。
内容库与 Tanzu Kubernetes集群的关系
vSphere 内容库提供用于创建Tanzu Kubernetes集群节点的虚拟机模板。对于要在其中部署 Tanzu Kubernetes集群的每个 Supervisor 集群,必须定义一个已订阅内容库对象,以便为Tanzu Kubernetes Grid 服务用于构建集群节点的 OVA 提供来源。可以为多个 Supervisor 集群配置同一个已订阅内容库。已订阅内容库与 Supervisor 命名空间之间没有关系。
在实验内容库与 Tanzu Kubernetes集群时,我们也好首先定义好内容库。
参考:
创建已订阅内容库并将其与 Supervisor 集群相关联
过程
在 vSphere Client中,选择菜单 > 内容库。
单击创建新内容库图标。
此时将打开 新建内容库向导。
在名称和位置页面上输入标识信息。
输入内容库的名称。
对于 vCenter Server,选择配置了 Supervisor 集群的 vCenter Server 实例。
单击下一步。
在配置内容库页面上提供内容库配置详细信息。
选择菜单项已订阅内容库。
在订阅 URL 文本框中,输入已发布库的 URL 地址:https://wp-content.vmware.com/v2/latest/lib.json。
对于下载内容选项,选择立即。
单击下一步。
出现提示时,接受 SSL 证书指纹。
在从清单中删除已订阅内容库之前,SSL 证书指纹存储在系统中。
在添加存储页面上,选择数据存储作为内容库内容的存储位置,然后单击下一步。
在即将完成页面上,检查详细信息并单击完成。
在内容库页面上,确认库已同步。
在 vSphere Client中,导航到菜单 > 主机和集群 > 集群 > 配置 > 命名空间 > 常规。
对于内容库,单击编辑。
单击添加库。
选择所创建的 Kubernetes 已订阅内容库。
要完成此过程,请单击确定。
实际操作中发现订阅的发布库链接:https://wp-content.vmware.com/v2/latest/lib.json 会报错。
使用http://wp-content.vmware.com/v2/latest/lib.json 可以通过。
置备 Tanzu Kubernetes集群推荐使用yaml文件,编写是实例可以参考官网:
用于置备 Tanzu Kubernetes集群的示例 YAML
其中涉及的参数详解在:
用于置备 Tanzu Kubernetes集群的配置参数
置备Tanzu Kubernetes集群时指定虚拟机类类型。每个类类型都为虚拟机预留一组资源,包括处理、内存和存储。
实验中使用的yaml文件如下:
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
name: tkg-cluster-1
namespace: pkg-vmlab
spec:
distribution:
version: v1.16
topology:
controlPlane:
count: 1
class: best-effort-small
storageClass: wcp-storage-policy
workers:
count: 3
class: best-effort-small
storageClass: wcp-storage-policy
应用yaml文件即可生成Tanzu Kubernetes集群。
值得注意的是:该集群完全由开发人员建立/维护/销毁。运维人员无法从wcp的控制平台对其进行操作。
删除集群,将配置上下文切换到目标集群,并执行:
kubectl delete tanzukubernetescluster --namespace CLUSTER-NAMESPACE CLUSTER-NAME
我们在WCP的初次体验中