vSphere 7 Kubernetes 初体验

有关vSphere7 with WCP,即整合Kubernetes的具体介绍,请参考:

vSphere 7融合Kubernetes,构建现代化应用的平台

vSphere 7 with WCP 安装

参考文章:
安装vSphere 7 with WCP
完成安装以后,在工作负载的页面可以看到原来的vSphere集群已经变成了WCP Supervisor集群,并建立名为namespaces的资源池。集群内部生成了三个VM,作为WCP中kubernetes的master节点。

WCP架构

在WCP里,vSphere支持原生的vSphere pod和原有的K8S集群,其存在关系如下结构图所示:
vSphere 7 Kubernetes 初体验_第1张图片
在Supervisor里,可以建立不同的Supervisor Namespace,每个Supervisor里面可以支持不同的虚拟化,包括VM/vSphere Pod/K8S集群以及数据库。
有关该架构中的组件解释,请参考:
vSphere with Kubernetes架构

Supervisor 集群的网络连接

VMware NSX-T™ Data Center为Supervisor 集群中的对象与外部网络提供网络连接。集群中包含的 ESXi主机的连接由标准 vSphere 网络处理。
vSphere 7 Kubernetes 初体验_第2张图片

实验步骤

生成Namespace

如上图显示,WCP中的Namespace(Supervisor Namespace)相对于K8S的NS而言,含义更为广泛。使用中由IT 基础架构的管理员通过图形界面来建立,开发人员只能使用,不能建立。
vSphere 7 Kubernetes 初体验_第3张图片
通过WCP平台,由符合管理人员和开发人员的使用习惯的方式(图形化界面/命令行)协调工作。

  1. 菜单->工作负载管理->新建命名空间,来建立NameSpace
  2. Namespace里面可以设置权限/存储等
  3. 开发人员使用NameSpace
    在第二步中可以看到NameSpace的摘要信息,打开最后的‘链接到CLI工具’

系统会根据Client的操作系统给出不同的插件链接。
按提示下载并安装插件后,即可登录。

开发人员利用vSphere kubectl使用vSphere pod

1. 登录系统

完成上一步的插件安装后,通过命令行方式登录。
vSphere 7 Kubernetes 初体验_第4张图片

注意在此版本,需要增加参数–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提供,如下图所示。
vSphere 7 Kubernetes 初体验_第5张图片
在web页面可以看到效果:



通过刷新或重新打开页面,可以看到LB的效果(以上)。
同时,在WCP的控制台可以看到pod的生成情况,此为管理员视角。

使用 Tanzu Kubernetes Grid 服务置备Tanzu Kubernetes 集群

在上面提到的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 集群相关联

Tanzu Kubernetes 集群网络连接
vSphere 7 Kubernetes 初体验_第6张图片
vSphere 7 Kubernetes 初体验_第7张图片

  1. 实际配置中,第一步便是创建内容库
过程
在 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 可以通过。

  1. 编写yaml文件

置备 Tanzu Kubernetes集群推荐使用yaml文件,编写是实例可以参考官网:
用于置备 Tanzu Kubernetes集群的示例 YAML

其中涉及的参数详解在:
用于置备 Tanzu Kubernetes集群的配置参数

置备Tanzu Kubernetes集群时指定虚拟机类类型。每个类类型都为虚拟机预留一组资源,包括处理、内存和存储。
vSphere 7 Kubernetes 初体验_第8张图片
实验中使用的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的初次体验中

  1. 讨论了WCP架构和网络拓扑
  2. 从管理员的角度创建Supervisor Namespace,并由开发人员使用,创建vSphere pod
  3. 从开发人员角度创建Tanzu Kubernetes集群,并全生命周期管理。

你可能感兴趣的:(NSX-T,WCP,K8S)