对手动vSphere + k8s说不!全自动化kubernetes on vSphere 教程附视频

App Modernization in a Multi-Cloud World Launch Summary ...

vSphere 7 - Introduction to Tanzu Kubernetes Grid Clusters ...

视频

环境准备

欢迎关注LLYCLOUD VCTSC,加群一起讨论VMware kubernetes!

image-20200419122544154

vSphere先决条件

  • vSphere 6.7 Update 3环境

  • vSphere Management Network将运行可访问VMC vCenter Server的TKG Demo Appliance

  • 支持DHCP的网络运行可访问VMC vCenter Server的TKG工作负载

  • 打开以下端口即可访问TKG Demo Appliance的桌面

    • 出站端口22(SSH)
    • 出站端口443(vCenter和K8s API)
    • 出站端口30001(K8s演示应用程序)
    • 出站端口8080(TKG UI)

1. vSphere网络

创建一个新的vSphere端口组(标准/分布式)或NSX-V / T网络,它们将运行TKG工作负载并可以支持DHCP。在此示例中,我们将为其命名,tkg-network但您可以选择所需的任何名称。

2.配置vCenter Server清单

在vCenter Server中为TKG配置资源池

img

在vCenter Server中为TKG配置VM文件夹

img

3.配置vCenter Server内容库

同步K8,HA代理和TKG演示设备OVA

在vSphere UI中导航至菜单->内容库,并使用以下配置创建新的vSphere Content Library:

设置
名称 TKG演示
订阅的URL https://download3.vmware.com/software/vmw-tools/tkg-demo-appliance/cl/lib.json
下载内容 立即
存储 选择vSphere Datastore

img

注意:确保您的vCenter Server具有出站连接以从S3内容库进行同步

要离线下载TKG演示设备,可以在以下位置找到它:

要离线下载K8和HA Proxy OVA,也可以在MyVMware上找到它:

创建vSphere Content Library后,它应立即开始下载内容。

img

注意:要验证所有内容均已正确下载,您应该在vSphere Content Library的“ OVF&OVA模板”选项卡下看到“ 本地存储”值,并显示“ ”。如果看不到该值,则说明内容仍在下载中,或者存在连接问题,导致无法从vCenter Server连接到S3内容库。

4.配置K8s和HA代理vSphere模板

从vSphere Content Library部署K8和HA代理

右键单击vSphere Content Library项,photon-3-v1.17.3_vmware.2然后选择具有以下配置的“来自此模板的新VM”:

设置
名称 photon-3-kube-v1.17.3_vmware.2
虚拟机文件夹 虚拟机模板
资源池 TKG
存储
网络 tkg网络

右键单击vSphere Content Library项,photon-3-capv-haproxy-v0.6.3-vmware.1然后选择具有以下配置的“来自此模板的新VM”:

设置
名称 photon-3-capv-haproxy-v0.6.3_vmware.1
虚拟机文件夹 虚拟机模板
资源池 TKG
存储
网络 tkg网络

注意:请勿打开这些虚拟机的电源,TKG将使用它们来配置TKG群集

部署完两个虚拟机后,右键单击该虚拟机,然后选择“模板->转换为模板”以将虚拟机转换为vSphere VM模板

img

5.配置TKG演示设备

从vSphere Content Library部署TKG演示设备

右键单击TKG资源池,然后选择“新虚拟机”,然后选择“从模板部署”选项,并指定TKG演示设备并为VM提供名称。

img

选择TKG虚拟机文件夹:

img

选择TKG资源池:

img

选择您的vSphere Datastore:

img

选择tkg-network网络:

img

在此Networking部分中,请根据您的网络配置填写相应的设置。正确的功能将需要一个静态IP地址。

img

向下滚动OS Credentials并选择一个安全密码,尤其是如果您打算从Internet连接时。SSH密钥身份验证也可以用于连接设备。为此,只需添加您的SSH密钥。

img

单击完成以启动OVA的部署。

注意:建议您如果不确定某些设置以在开机前进行脱机快照,则可以调整设置或轻松还原环境(如果您希望再次遍历此环境而不必重新启动) -部署OVA

最后,右键单击TKG Demo Appliance VM并打开电源

最后,打开TKG演示设备的电源,然后使用root用户为TKG演示设备配置的IP地址进行SSH。

img

开始部署

TKG集群部署

步骤1. SSH到TKG演示设备

使用SSH到TKG演示设备root。如果您无需通过公共Internet即可访问VM,则该地址将为192.168.2.2或您为TKG演示设备配置的任何地址。

img

步骤2.部署TKG管理集群

使用TKG UI或CLI设置TKG有两种方法。两种方法都记录在下面。

TKG用户界面

运行以下命令以启动UI向导:

tkg init --ui

在您的工作站上打开另一个终端会话,然后运行以下命令以使用SSH端口转发,以便我们可以从您的本地工作站连接到TKG UI:

ssh root@<public-ip> -L 8080:127.0.0.1:8080 -N

注意:本地端口可以是本地网络上未使用的任何端口。在上面的示例中,我们选择8080。在使用8080的情况下,您可以使用另一个端口,但副作用是TKG UI中没有显示进度,这是一个已知问题。

如果您使用的是Windows,则可以使用Putty通过以下配置来设置SSH端口转发:

在“连接”->“ SSH”->“隧道”下,将其8080用于“源端口”和127.0.0.1:8080“目标”,然后单击“添加”按钮

img

在“会话使用” ssh [email protected](或您配置了TKG Demo Appliance的任何内部IP)下,然后使用您的凭据登录

img

注意:如果SSH端口转发成功,您将看不到终端返回,并且看起来好像挂起了。这是预料之中的,否则如果您输错了密码,系统会提示您输入正确的密码。

成功打开连接后,请打开本地Web浏览器并导航至,localhost:8080然后应转到以下屏幕

img

单击“在vSphere上部署”开始部署

IaaS提供商

输入您的VMC vCenter Server信息,然后单击“连接”按钮并填写数据中心和SSH密钥(如果您没有SSH密钥,则可以使用虚拟值),但是如果您需要SSH到任何TKG节点中,这将非常有用(用户名capv

img

控制平面设置

选择“ Development Flavor”并指定大小,然后为K8s管理集群命名,并指定HA Proxy VM模板。“开发”计划与“生产”计划之间的区别在于所部署的控制平面和工作节点虚拟机的数量。

使用“开发”计划,配置了1个控制平面和1个工作节点。使用“生产”计划,可以配置3个控制平面和3个工作节点。您始终可以使用此tkg scale cluster操作来扩大部署后的规模。

img

资源资源

选择TKG资源池,VM文件夹和WorkloadDatastore

img

Kubernetes网络

选择tkg-network并保留其他默认设置

img

操作系统映像

选择K8s PhotonOS模板

img

评论

查看所有设置以确保它们匹配,然后单击底部的“ Deploy Management Cluster”按钮以开始部署。

img

img

完成此过程大约需要6-8分钟,并且一旦部署了管理集群,就可以关闭Web浏览器并返回到您的第一个SSH会话,并ctrl+c停止TKG UI。

我们可以通过运行以下命令来验证所有Pod已启动:

# k get pods -A

NAMESPACE NAME READY STATUS RESTARTS AGE
capi-kubeadm-bootstrap-system capi-kubeadm-bootstrap-controller-manager-868596c46d-8m4tg 2/2 Running 0 15m
capi-kubeadm-control-plane-system capi-kubeadm-control-plane-controller-manager-79b6f97dd-mnxg2 2/2 Running 0 15m
capi-system capi-controller-manager-8688d5b997-kx4sq 2/2 Running 0 15m
capi-webhook-system capi-controller-manager-6f99d5d8b4-nnt4z 2/2 Running 0 15m
capi-webhook-system capi-kubeadm-bootstrap-controller-manager-57f55d85f5-n6jnn 2/2 Running 0 15m
capi-webhook-system capi-kubeadm-control-plane-controller-manager-77766c7f8c-xf59c 2/2 Running 1 15m
capi-webhook-system capv-controller-manager-79b5fdc6db-lhb8g 2/2 Running 0 15m
capv-system capv-controller-manager-79ff77f6c5-ctw78 2/2 Running 0 15m
cert-manager cert-manager-69b4f77ffc-qx9zp 1/1 Running 0 16m
cert-manager cert-manager-cainjector-576978ffc8-l478k 1/1 Running 0 16m
cert-manager cert-manager-webhook-c67fbc858-z5hjm 1/1 Running 1 16m
kube-system calico-kube-controllers-5b644bc49c-qzpmq 1/1 Running 0 16m
kube-system calico-node-457p2 1/1 Running 0 15m
kube-system calico-node-f2877 1/1 Running 0 16m
kube-system coredns-6955765f44-gwthg 1/1 Running 0 16m
kube-system coredns-6955765f44-pm7fl 1/1 Running 0 16m
kube-system etcd-tkg-mgmt-cluster-controlplane-0 1/1 Running 0 16m
kube-system kube-apiserver-tkg-mgmt-cluster-controlplane-0 1/1 Running 0 16m
kube-system kube-controller-manager-tkg-mgmt-cluster-controlplane-0 1/1 Running 0 16m
kube-system kube-proxy-5zn57 1/1 Running 0 16m
kube-system kube-proxy-clkf6 1/1 Running 0 15m
kube-system kube-scheduler-tkg-mgmt-cluster-controlplane-0 1/1 Running 0 16m

TKG CLI

编辑config.yaml使用无论是vi或纳米编辑和更新VSPHERE_SERVER您的VMC的vCenter Server的内部IP地址(例如10.2.224.4)和可变VSPHERE_PASSWORD变量与[email protected]帐户和保存当你完成了文件的凭据。如果您有其他与本示例有所不同的更改,请确保也进行更新,包括K8和HA Proxy vSphere模板的名称。

VSPHERE_SERVER: '10.2.224.4'
VSPHERE_USERNAME: '[email protected]'
VSPHERE_PASSWORD: 'FILL-ME-IN'
...
...

注:config.yaml是仅用于演示目的的例子。您可以更新其他变量以匹配您的环境。使用TKG UI时,它将自动生成和更新.tkg/config.yaml,您可以使用该方法查看使用了哪些变量和值。

运行以下命令将示例复制config.yaml.tkg目录中:

cp config.yaml .tkg/config.yaml

运行以下命令以部署K8s管理集群:

tkg init --infrastructure=vsphere:v0.6.3 --name=mgmt-cluster

注意:默认情况下,dev将使用TKG 计划。如果要指定,只需使用--plan=prod指定prod计划即可。

这大约需要8分钟才能完成,并且在部署管理集群之后,我们可以通过运行以下命令来验证所有Pod是否已启动:

# k get pods -A

NAMESPACE NAME READY STATUS RESTARTS AGE
capi-kubeadm-bootstrap-system capi-kubeadm-bootstrap-controller-manager-868596c46d-8m4tg 2/2 Running 0 15m
capi-kubeadm-control-plane-system capi-kubeadm-control-plane-controller-manager-79b6f97dd-mnxg2 2/2 Running 0 15m
capi-system capi-controller-manager-8688d5b997-kx4sq 2/2 Running 0 15m
capi-webhook-system capi-controller-manager-6f99d5d8b4-nnt4z 2/2 Running 0 15m
capi-webhook-system capi-kubeadm-bootstrap-controller-manager-57f55d85f5-n6jnn 2/2 Running 0 15m
capi-webhook-system capi-kubeadm-control-plane-controller-manager-77766c7f8c-xf59c 2/2 Running 1 15m
capi-webhook-system capv-controller-manager-79b5fdc6db-lhb8g 2/2 Running 0 15m
capv-system capv-controller-manager-79ff77f6c5-ctw78 2/2 Running 0 15m
cert-manager cert-manager-69b4f77ffc-qx9zp 1/1 Running 0 16m
cert-manager cert-manager-cainjector-576978ffc8-l478k 1/1 Running 0 16m
cert-manager cert-manager-webhook-c67fbc858-z5hjm 1/1 Running 1 16m
kube-system calico-kube-controllers-5b644bc49c-qzpmq 1/1 Running 0 16m
kube-system calico-node-457p2 1/1 Running 0 15m
kube-system calico-node-f2877 1/1 Running 0 16m
kube-system coredns-6955765f44-gwthg 1/1 Running 0 16m
kube-system coredns-6955765f44-pm7fl 1/1 Running 0 16m
kube-system etcd-tkg-mgmt-cluster-controlplane-0 1/1 Running 0 16m
kube-system kube-apiserver-tkg-mgmt-cluster-controlplane-0 1/1 Running 0 16m
kube-system kube-controller-manager-tkg-mgmt-cluster-controlplane-0 1/1 Running 0 16m
kube-system kube-proxy-5zn57 1/1 Running 0 16m
kube-system kube-proxy-clkf6 1/1 Running 0 15m
kube-system kube-scheduler-tkg-mgmt-cluster-controlplane-0 1/1 Running 0 16m

步骤3.部署TKG工作负载集群

运行以下命令以部署名为tkg-cluster-01或您希望使用的任何其他名称的TKG Cluster 。

tkg create cluster --plan=dev tkg-cluster-01

注意:默认情况下,dev将使用TKG 计划。如果要指定,只需使用--plan=prod指定prod计划即可。

这大约需要4.5分钟才能完成。一旦TKG集群启动并运行,您会注意到kubectl上下文自动切换。

我们可以运行以下命令以确保集群中的所有吊舱都已启动:

# k get pods -A

NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-5b644bc49c-52v5j 1/1 Running 0 2m11s
kube-system calico-node-4sccr 1/1 Running 0 2m11s
kube-system calico-node-bvmf9 1/1 Running 0 96s
kube-system calico-node-d2dbp 1/1 Running 0 97s
kube-system calico-node-mnqtx 1/1 Running 0 96s
kube-system calico-node-qt5mv 1/1 Running 0 96s
kube-system calico-node-x9gn5 1/1 Running 0 56s
kube-system coredns-6955765f44-gvk9f 1/1 Running 0 2m11s
kube-system coredns-6955765f44-kq8mf 1/1 Running 0 2m11s
kube-system etcd-tkg-workload-cluster-01-79bbb 1/1 Running 0 46s
kube-system etcd-tkg-workload-cluster-01-bwzlt 1/1 Running 0 2m5s
kube-system kube-apiserver-tkg-workload-cluster-01-79bbb 1/1 Running 0 56s
kube-system kube-apiserver-tkg-workload-cluster-01-bwzlt 1/1 Running 0 2m5s
kube-system kube-controller-manager-tkg-workload-cluster-01-79bbb 1/1 Running 0 56s
kube-system kube-controller-manager-tkg-workload-cluster-01-bwzlt 1/1 Running 1 2m5s
kube-system kube-proxy-2wm7k 1/1 Running 0 2m11s
kube-system kube-proxy-4lfws 1/1 Running 0 96s
kube-system kube-proxy-5qtkd 1/1 Running 0 97s
kube-system kube-proxy-gclnf 1/1 Running 0 96s
kube-system kube-proxy-nnp2h 1/1 Running 0 96s
kube-system kube-proxy-qgxtv 1/1 Running 0 56s
kube-system kube-scheduler-tkg-workload-cluster-01-79bbb 1/1 Running 0 56s
kube-system kube-scheduler-tkg-workload-cluster-01-bwzlt 1/1 Running 1 2m5s
kube-system vsphere-cloud-controller-manager-4pxmk 1/1 Running 1 2m11s
kube-system vsphere-csi-controller-0 5/5 Running 0 2m11s
kube-system vsphere-csi-node-7d2t8 3/3 Running 0 10s
kube-system vsphere-csi-node-7xnjd 3/3 Running 0 75s
kube-system vsphere-csi-node-8wfh2 3/3 Running 0 105s
kube-system vsphere-csi-node-gv28r 3/3 Running 0 75s
kube-system vsphere-csi-node-xf8hl 3/3 Running 0 86s
kube-system vsphere-csi-node-zmhgd 3/3 Running 0 85s

注意:成功部署TKG管理或工作负载群集后,TKG CLI会自动将您的kubectl上下文切换到刚部署的TKG群集。对于TKG CLI的新用户,此行为可能并不明显。

TKG演示设备的另一个好处是,根据当前所在的TKG群集上下文,会自动更新终端提示。如果您的桌面上运行了TKG CLI,则将不知道该消息,您必须通过以下方法对上下文进行查询使用标准的kubectl命令。

部署TKG管理集群后,终端提示如下所示:
img

在部署TKG Worload Cluster之后,终端提示如下所示:
img

要列出所有可用的Kubernetes上下文,可以使用以下命令:

# kubectl config get-contexts

CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* tkg-cluster-01-admin@tkg-cluster-01 tkg-cluster-01 tkg-cluster-01-admin
tkg-mgmt-admin@tkg-mgmt tkg-mgmt tkg-mgmt-admin

要切换到特定的Kubernetes上下文,可以使用以下命令并提供上下文的名称:

# kubectl config use-context tkg-mgmt-admin@tkg-mgmt

Switched to context "tkg-mgmt-admin@tkg-mgmt".

步骤4 Tanzu任务控制(可选)

注意:将需要从TKG网络获得Internet连接以达到Tanzu Mission Control服务。

登录到VMware Cloud Console,并确保您有权使用Tanzu Mission Control(TMC)服务。您可以通过确保看到如下所示的TMC Service磁贴来确认这一点。

img

接下来,单击您的用户名并导航到“我的帐户”以创建所需的API令牌

img

为TMC服务生成一个新的API令牌,以附加我们之前部署的TKG集群。

img

记下API令牌,因为稍后我们将需要它。如果您忘记复制它或丢失了它,则只需返回此屏幕并重新生成即可。

现在让我们跳回TKG演示设备,将TKG集群连接到TMC。

运行以下命令以登录到TMC服务,并提供您之前创建的API令牌以及用户定义的上下文名称。

# tmc login -c -n tkg-cluster-01

img

现在,我们需要创建一个TMC群集组,该组允许您对TKG群集进行逻辑分组,这反映在TMC UI中。为此,请运行以下命令并为其命名

# tmc clustergroup create -n vmc-cluster

ℹ using template "default"
✔ clustergroup "vmc-cluster" created successfully

要附加我们的TKG集群,我们需要运行以下命令,该命令将生成YAML清单,该清单将需要运行以将TMC Pod实际部署到我们的TKG集群中

# tmc cluster attach --group vmc-cluster --name vmc-tkg-cluster-01

✔ cluster "vmc-tkg-cluster-01" created successfully
ℹ Run `kubectl apply -f k8s-attach-manifest.yaml` to attach the cluster

最后,我们运行应用程序将TKG集群附加到TMC

# k apply -f k8s-attach-manifest.yaml

namespace/vmware-system-tmc created
configmap/stack-config created
secret/tmc-client-secret created
customresourcedefinition.apiextensions.k8s.io/agents.clusters.tmc.cloud.vmware.com created
customresourcedefinition.apiextensions.k8s.io/extensions.clusters.tmc.cloud.vmware.com created
serviceaccount/extension-manager created
clusterrole.rbac.authorization.k8s.io/extension-manager-role created
clusterrolebinding.rbac.authorization.k8s.io/extension-manager-rolebinding created
service/extension-manager-service created
deployment.apps/extension-manager created
serviceaccount/extension-updater-serviceaccount created
clusterrole.rbac.authorization.k8s.io/extension-updater-clusterrole created
clusterrolebinding.rbac.authorization.k8s.io/extension-updater-clusterrolebinding created
service/extension-updater created
deployment.apps/extension-updater created
serviceaccount/agent-updater created
clusterrole.rbac.authorization.k8s.io/agent-updater-role created
clusterrolebinding.rbac.authorization.k8s.io/agent-updater-rolebinding created
deployment.apps/agent-updater created
cronjob.batch/agentupdater-workload created

img

TKG演示

步骤1.存储类别和持久卷

切换到storageTKG演示设备上的演示目录

cd /root/demo/storage

从vSphere UI检索vSphere Datastore URL,该URL将用于创建我们的存储类定义

img

注意:有多种方法可以将vSphere Datastore与存储类定义相关联。在VMC中,当前是必需的,因为VMC中的Cloud Native Storage /容器存储接口可以利用vSphere Tag。

编辑defaultstorageclass.yaml并更新datastoreurl属性

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: standard
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: csi.vsphere.vmware.com
parameters:
datastoreurl: ds:///vmfs/volumes/vsan:c4f738225e324622-b1e100dd1abe8249/

注意请在datastoreurl值的末尾添加一个尾随“ /”,这是必需的。如果从vSphere UI复制URL,则将包含正确的URL。

创建存储类定义:

# k apply -f defaultstorageclass.yaml

persistentvolumeclaim/pvc-test created

确认已创建存储类:

# k get sc

NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
standard (default) csi.vsphere.vmware.com Delete Immediate false 3s

pvc-test使用我们的默认存储类创建2GB永久卷:

# k apply -f pvc.yaml

persistentvolumeclaim/pvc-test created

确认创建了持久卷:

# k get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-test Bound pvc-ff86c605-d600-4bcc-ac03-9f511fe7cb77 2Gi RWO standard 13m

注意:这可能需要花费几秒钟的时间,才能在vSphere中实现PV

通过导航到下面的特定vSphere Datatore,我们还可以在vSphere UI中看到新的Persistent Volume。 Monitor->Container Volumes

img

删除永久卷:

# k delete pvc pvc-test

persistentvolumeclaim "pvc-test" deleted

第2步。简单的K8s演示应用程序

切换到yelbTKG演示设备上的演示目录

cd /root/demo/yelb

yelb为我们的演示创建名称空间:

k create ns yelb

部署yelb应用程序:

# k apply -f yelb.yaml

service/redis-server created
service/yelb-db created
service/yelb-appserver created
service/yelb-ui created
deployment.apps/yelb-ui created
deployment.apps/redis-server created
deployment.apps/yelb-db created
deployment.apps/yelb-appserver created

通过运行以下命令等待部署完成:

# k -n yelb get deployments

NAME READY UP-TO-DATE AVAILABLE AGE
redis-server 1/1 1 1 47s
yelb-appserver 1/1 1 1 47s
yelb-db 1/1 1 1 47s
yelb-ui 1/1 1 1 47s

检索“ UI”窗格ID:

# k -n yelb get pods | grep ui

yelb-ui-79c68df689-66bwq 1/1 Running 0 2m

检索运行“ UI”容器的工作程序节点的IP地址:

# k -n yelb describe pod yelb-ui-79c68df689-66bwq
Name: yelb-ui-79c68df689-66bwq
Namespace: yelb
Priority: 0
Node: william-02-md-0-848878f85b-vddk4/192.168.2.185
Start Time: Tue, 24 Mar 2020 18:19:23 +0000
...
...

IP地址位于Node:属性下方的顶部,在此示例中,它是192.168.2.185

如果您的台式机具有浏览器并且可以访问TKG网络,则可以将浏览器打开到以下地址: http://192.168.2.185:30001

如果您没有系统,那么我们仍然可以连接,但是我们需要将SSH端口转发设置为上述IP地址。

ssh root@[TKG-DEMO-APPLIANCE-IP] -L 30001:192.168.2.185:30001

建立SSH隧道后,您可以在本地系统上打开浏览器 localhost:30001

Yelb应用程序是交互式的,因此您可以随意使用它

img

注意:有关此演示应用程序的详细信息,参见此处,该应用程序的原始作者是Massimo Re’Ferre(他的遗产是Ex-VMware)

在继续进行下两个演示之前,您将需要删除该yelb应用程序:

k delete -f yelb.yaml

步骤3.基本负载均衡器

切换到metallbTKG演示设备上的演示目录

cd /root/demo/metallb

使用来自网络的DHCP范围的一小部分来编辑metallb-config.yaml和更新addresses属性tkg-network。在我们的示例中,我们使用了192.168.2.0/24,因此让我们为要提供的Metal LB选择最后5个IP地址。

apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.3.245-192.168.3.250

创建metallb-system名称空间:

# k create ns metallb-system

namespace/metallb-system created

创建所需的机密:

# k create secret generic -n metallb-system memberlist --from-literal=secretkey="\$(openssl rand -base64 128)"

secret/memberlist created

部署Metal LB:

# k apply -n metallb-system -f metallb.yaml

podsecuritypolicy.policy/controller created
podsecuritypolicy.policy/speaker created
serviceaccount/controller created
serviceaccount/speaker created
clusterrole.rbac.authorization.k8s.io/metallb-system:controller created
clusterrole.rbac.authorization.k8s.io/metallb-system:speaker created
role.rbac.authorization.k8s.io/config-watcher created
role.rbac.authorization.k8s.io/pod-lister created
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:controller created
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:speaker created
rolebinding.rbac.authorization.k8s.io/config-watcher created
rolebinding.rbac.authorization.k8s.io/pod-lister created
daemonset.apps/speaker created
deployment.apps/controller created

应用我们的Metal LB配置:

# kubectl apply -n metallb-system -f metallb-config.yaml
configmap/config created

验证metallb-system名称空间中的所有Pod 是否正在运行:

# k -n metallb-system get pod
NAME READY STATUS RESTARTS AGE
controller-66fdff65b9-bwxq7 1/1 Running 0 2m40s
speaker-8jz5m 1/1 Running 0 2m40s
speaker-bmxcq 1/1 Running 0 2m40s
speaker-fsxq5 1/1 Running 0 2m40s
speaker-t2pgj 1/1 Running 0 2m40s
speaker-vggr8 1/1 Running 0 2m40s
speaker-zjw7v 1/1 Running 0 2m40s

步骤4.使用负载均衡器的基本K8s演示应用程序

切换到yelbTKG演示设备上的演示目录

cd /root/demo/yelb

部署yelb Load Balancer版本的应用程序:

# k apply -f yelb-lb.yaml

service/redis-server created
service/yelb-db created
service/yelb-appserver created
service/yelb-ui created
deployment.apps/yelb-ui created
deployment.apps/redis-server created
deployment.apps/yelb-db created
deployment.apps/yelb-appserver created

通过运行以下命令等待部署完成:

# k -n yelb get deployments

NAME READY UP-TO-DATE AVAILABLE AGE
redis-server 1/1 1 1 52s
yelb-appserver 1/1 1 1 52s
yelb-db 1/1 1 1 52s
yelb-ui 1/1 1 1 52s

检索Yelb服务的负载均衡器IP:

# k -n yelb get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
redis-server ClusterIP 100.66.186.168 <none> 6379/TCP 84s
yelb-appserver ClusterIP 100.65.7.122 <none> 4567/TCP 84s
yelb-db ClusterIP 100.69.33.14 <none> 5432/TCP 84s
yelb-ui LoadBalancer 100.68.255.238 192.168.2.245 80:31376/TCP 84s

在该EXTERNAL-IP列中,我们应该看到从我们的Metal LB范围分配的IP地址。现在,我们可以通过此负载均衡器IP进行连接,而不是直接连接到特定的TKG群集节点,您将看到它映射到端口80而不是30001上的原始应用程序端口。

如果您的台式机具有浏览器并且可以访问TKG网络,则可以将浏览器打开到以下地址: http://192.168.2.245

如果您没有系统,那么我们仍然可以连接,但是我们需要将SSH端口转发设置为上述IP地址,并且我们将使用8081本地端口来确保没有冲突

ssh root@[TKG-DEMO-APPLIANCE-IP] -L 8081:192.168.2.245:80

建立SSH隧道后,您可以在本地系统上打开浏览器 localhost:8081

附加功能(可选)

港口

TKG演示设备上正在运行一个本地Harbor实例,该实例提供了在气隙/非互联网环境中设置TKG群集和TKG演示所需的所有容器。

您可以通过使用以下凭据将浏览器指向TKG Demo Appliance的地址来连接到Harbor UI:

用户名:admin
密码:Tanzu1!

img

您还可以使用以下命令使用Docker CLI登录Harbor来推送和/或拉出其他容器:

# docker login -u admin -p Tanzu1! registry.rainpole.io/library

WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

注意:您必须使用registry.rainpole.io由letsencrypt生成的真实证书,该证书需要使用DNS挑战拥有的域。为了支持无间隙/非互联网方案,今天的TKG需要一个不具有正确签名证书(自签名和自定义CA)的注册表。

Octant

为了轻松地导航,学习和调试Kubernetes,可以使用诸如Octant之类的有用工具。Octant已安装在TKG演示设备上,您可以运行以下命令启动它:

octant

img

Octant在本地进行监听127.0.0.1:7777并能够访问Octant UI,我们需要在端口上设置SSH端口转发到TKG Demo Appliance IP的地址7777

为此,请在另一个终端上运行以下命令:

ssh root@[TKG-DEMO-APPLIANCE-IP] -L 7777:127.0.0.1:7777

注意:您也可以使用Putty设置SSH端口转发,请参考TKG UI以获得说明。

一旦建立了SSH隧道,就可以在本地系统上打开浏览器,localhost:7777并且应该会看到Octant UI。

img

有关如何使用Octan的更多信息,请参阅此处的官方文档

Reference

Pre-Reqs Guide: https://hackmd.io/f51grvGxRJeTyeRxd_APeA

Workshop Guide: https://hackmd.io/vfQuPw5QS5SZebq7Pshh0g (shortURL: http://vmwa.re/tkg-on-vmc-guide)

Demo Appliance for Tanzu Kubernetes Grid:https://flings.vmware.com/demo-appliance-for-tanzu-kubernetes-grid#instructions