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服务了。

暂无评论