vSphere With Tanzu PoC Tips

vSphere配置与版本要求

ESXi 7.0 Update 2
vCenter Server 7.0 Update 2
NSX-T,无

网络的规划

按照规划需要三条网络,这三条网络对应分布式交换机上的三个Portgroup。
从IP规划上来看,Management、Workload、Frontend分别对应192.168.2.0/24、192.168.3.0/24和192.168.4.0/24三个网络。并且三个网络是可路由的,在本次PoC中使用vyos的虚拟路由器,在虚拟路由器上创建这三个网络,并且配置DNS转发和上行外网连通。

管理网络:
用于ESXi、VC、Tanzu管理组件(Supervisor Cluster)以及各类AD、DNS、HAProxy等组件。
vSphere with Tanzu的SupervisorCluster会包含这个管理网的地址,同时也有分配Workload网络的地址。
Workload网络:
创建TKG Cluster时,需要创建K8S Master和Nodes,这些节点使用到Worklaod网络,但需要注意的是,Master和Nodes上运行的Pods的IP地址是可以在创建TKG Cluster时制定的。
Frontend网络:
这个网络可以理解为TKG Cluster的Master、Nodes是一套网络,但是内部网络创建的Pods如果需要对外提供服务,那么就需要把Pod的流量映射到外部网络。一般情况下,Workload和Frontend网络可以共用一套,但是也可以分开规划。
本次PoC使用192.168.4.111/24作为HAProxy在Frontend网络上的地址。
用作Loadbalancer的网段是:192.168.4.208/28,从.208开始这16个地址就是Tanzu Cluster对外发布服务的地址。

HAProxy

HAProxy横跨在三个网络上。确保能被VC管理和调度服务,也能确保运行在Workload网段的TKG Cluster的Master和Nodes能够通过HAProxy的Frontent网络对暴露服务。

启用主管集群

在vSphere Web Client界面上启用工作负载管理。
本次测试使用HAProxy,故不涉及NSX-T的内容。
在启用界面上,依次输入管理网络的配置、负载均衡网络的配置等信息。
主管集群创建完毕后,通过一个LB的地址对外提供服务。
在Linux或Windows主机上安装Tanzu相关的Client程序,可以访问到这个这个Supervisor Cluster。
注意:默认administrator@vsphere.local没有操作TKG Cluster创建Pod的权限,需要添加rolebinding。参考官方文档,搜索PSP这一页。

创建并使用TKG集群

创建完成Supervisor Cluster之后,由于没有NSX-T所以无法直接创建vSphere pod。因此最佳的使用方式是创建TKG Cluster,这是一个独立的VMware打包好的K8S一整天东西,可以按需部署所需的TKG版本。注意这些全都是命令行。

连接到Tanzu Supervisor Cluster
kubectl-vsphere login --vsphere-username administrator@vsphere.local --server=192.168.4.208 --insecure-skip-tls-verify --tanzu-kubernetes-cluster-namespace=devops --tanzu-kubernetes-cluster-name=dev-cluster
切换到命名空间并创建TKG Cluster
# 切换到devops这个namespace
kubectl config use-context devops
# 创建K8S版本为10.20.9的TKG Cluster,并且定义Master=1,Node=2
apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
    name: dev-cluster
    namespace: devops
spec:
   topology:
       controlPlane:
           count: 1
           class: best-effort-xsmall
           storageClass: vmw-k8s
       workers:
           count: 2
           class: best-effort-xsmall
           storageClass: vmw-k8s
   distribution:
        version: v1.20.9
   settings:
        network:
          cni:
              name: antrea
          services:
             cidrBlocks: ["80.0.0.0/16"]
          pods:
             cidrBlocks: ["90.0.0.0/16"]

使用Tanzu环境并部署应用

连接到TKG Cluster并且使用这个cluster

root@photon-machine [ ~ ]# kubectl-vsphere login --vsphere-username administrator@vsphere.local --server=192.168.4.208 --insecure-skip-tls-verify --tanzu-kubernetes-cluster-namespace=devops --tanzu-kubernetes-cluster-name=dev-cluster

KUBECTL_VSPHERE_PASSWORD environment variable is not set. Please enter the password below
Password: 
Logged in successfully.

You have access to the following contexts:
   192.168.4.208
   dev-cluster
   devops
   test
   test-ns

If the context you wish to use is not in this list, you may need to try
logging in again later, or contact your cluster administrator.

To change context, use `kubectl config use-context <workload name>`
root@photon-machine [ ~ ]# kubectl config use-context dev-cluster 
Switched to context "dev-cluster".
root@photon-machine [ ~ ]# kubectl get nodes
NAME                                         STATUS   ROLES                  AGE   VERSION
dev-cluster-control-plane-mc52q              Ready    control-plane,master   41h   v1.20.9+vmware.1
dev-cluster-workers-hwdml-6864fbc4b9-nkpfz   Ready    <none>                 41h   v1.20.9+vmware.1

创建包含Web服务器的Deployment

# Web Server的Deployment yaml文件如下
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

执行命令创建,并查看可以正常运行,label的设置为app=nginx

root@photon-machine [ /usr/local/bin ]# kubectl apply -f nginx-deployment.yaml
root@photon-machine [ /usr/local/bin ]# kubectl get deployment -o wide
NAME               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR
nginx-deployment   2/2     2            2           24h   nginx        nginx    app=nginx

创建服务,制定为Loadbalancer,把这个web服务发布到外网。服务的yaml文件如下所示。

kind: Service 
apiVersion: v1 
metadata:
  name: srvclb-nginx 
spec:
  selector:
    app: web-server
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 80
  type: LoadBalancer

发布服务,并测试

root@photon-machine [ /usr/local/bin ]# kubectl apply -f nginx-deployment.yaml
root@photon-machine [ /usr/local/bin ]# kubectl get svc -o wide
NAME           TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE   SELECTOR
kubernetes     ClusterIP      80.0.0.1      <none>          443/TCP        41h   <none>
srvclb-nginx   LoadBalancer   80.0.140.94   192.168.4.211   80:30802/TCP   20h   app=web-server
supervisor     ClusterIP      None          <none>          6443/TCP       41h   <none>

最后通过192.168.4.211可以访问到Nginx服务了。

暂无评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


虚拟化 | 云计算 | 机器学习 | 股市复盘
© 2024 涛哥,版权所有, 京ICP备20014492-2号