对手动vSphere + k8s说不!全自动化kubernetes on vSphere 教程附视频
视频
环境准备
欢迎关注LLYCLOUD VCTSC,加群一起讨论VMware kubernetes!
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配置资源池
在vCenter Server中为TKG配置VM文件夹
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 |
注意:确保您的vCenter Server具有出站连接以从S3内容库进行同步
要离线下载TKG演示设备,可以在以下位置找到它:
- TKG Demo Appliance OVA- https://download3.vmware.com/software/vmw-tools/tkg-demo-appliance/TKG-Demo-Appliance_1.0.0.ova
要离线下载K8和HA Proxy OVA,也可以在MyVMware上找到它:
- K8s v1.17.3 OVA - https://my.vmware.com/group/vmware/details?downloadGroup=TKG-100&productId=988&download=true&fileId=893269e6d3916899a722a7bff29d0ef1&secureParam=5185bca23b15e31d4da200d46096badd&uuId=15d3e402-b067-4b07-8f96-f5ca2961e85b&downloadType=
- HA Proxy v0.6.3 OVA - https://my.vmware.com/group/vmware/details?downloadGroup=TKG-100&productId=988&download=true&fileId=1b3d3e1336ad6fccffe54ccd3e197f03&secureParam=e4cf03c3fdd7cfbae00a38520054126a&uuId=268ae993-35a8-4f9f-aa3f-582ae89c1f13&downloadType=
创建vSphere Content Library后,它应立即开始下载内容。
注意:要验证所有内容均已正确下载,您应该在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模板
5.配置TKG演示设备
从vSphere Content Library部署TKG演示设备
右键单击TKG
资源池,然后选择“新虚拟机”,然后选择“从模板部署”选项,并指定TKG演示设备并为VM提供名称。
选择TKG
虚拟机文件夹:
选择TKG
资源池:
选择您的vSphere Datastore:
选择tkg-network
网络:
在此Networking
部分中,请根据您的网络配置填写相应的设置。正确的功能将需要一个静态IP地址。
向下滚动OS Credentials
并选择一个安全密码,尤其是如果您打算从Internet连接时。SSH密钥身份验证也可以用于连接设备。为此,只需添加您的SSH密钥。
单击完成以启动OVA的部署。
注意:建议您如果不确定某些设置以在开机前进行脱机快照,则可以调整设置或轻松还原环境(如果您希望再次遍历此环境而不必重新启动) -部署OVA
最后,右键单击TKG Demo Appliance VM并打开电源
最后,打开TKG演示设备的电源,然后使用root用户为TKG演示设备配置的IP地址进行SSH。
开始部署
TKG集群部署
步骤1. SSH到TKG演示设备
使用SSH到TKG演示设备root
。如果您无需通过公共Internet即可访问VM,则该地址将为192.168.2.2或您为TKG演示设备配置的任何地址。
步骤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
“目标”,然后单击“添加”按钮
在“会话使用” ssh [email protected]
(或您配置了TKG Demo Appliance的任何内部IP)下,然后使用您的凭据登录
注意:如果SSH端口转发成功,您将看不到终端返回,并且看起来好像挂起了。这是预料之中的,否则如果您输错了密码,系统会提示您输入正确的密码。
成功打开连接后,请打开本地Web浏览器并导航至,localhost:8080
然后应转到以下屏幕
单击“在vSphere上部署”开始部署
IaaS提供商
输入您的VMC vCenter Server信息,然后单击“连接”按钮并填写数据中心和SSH密钥(如果您没有SSH密钥,则可以使用虚拟值),但是如果您需要SSH到任何TKG节点中,这将非常有用(用户名capv
)
控制平面设置
选择“ Development Flavor”并指定大小,然后为K8s管理集群命名,并指定HA Proxy VM模板。“开发”计划与“生产”计划之间的区别在于所部署的控制平面和工作节点虚拟机的数量。
使用“开发”计划,配置了1个控制平面和1个工作节点。使用“生产”计划,可以配置3个控制平面和3个工作节点。您始终可以使用此tkg scale cluster
操作来扩大部署后的规模。
资源资源
选择TKG
资源池,VM文件夹和WorkloadDatastore
Kubernetes网络
选择tkg-network
并保留其他默认设置
操作系统映像
选择K8s PhotonOS模板
评论
查看所有设置以确保它们匹配,然后单击底部的“ Deploy Management Cluster”按钮以开始部署。
完成此过程大约需要6-8分钟,并且一旦部署了管理集群,就可以关闭Web浏览器并返回到您的第一个SSH会话,并ctrl+c
停止TKG UI。
我们可以通过运行以下命令来验证所有Pod已启动:
k get pods -A |
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' |
注:该
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 |
步骤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 |
注意:成功部署TKG管理或工作负载群集后,TKG CLI会自动将您的kubectl上下文切换到刚部署的TKG群集。对于TKG CLI的新用户,此行为可能并不明显。
TKG演示设备的另一个好处是,根据当前所在的TKG群集上下文,会自动更新终端提示。如果您的桌面上运行了TKG CLI,则将不知道该消息,您必须通过以下方法对上下文进行查询使用标准的kubectl命令。
部署TKG管理集群后,终端提示如下所示:
在部署TKG Worload Cluster之后,终端提示如下所示:
要列出所有可用的Kubernetes上下文,可以使用以下命令:
# kubectl config get-contexts |
要切换到特定的Kubernetes上下文,可以使用以下命令并提供上下文的名称:
# kubectl config use-context tkg-mgmt-admin@tkg-mgmt |
步骤4 Tanzu任务控制(可选)
注意:将需要从TKG网络获得Internet连接以达到Tanzu Mission Control服务。
登录到VMware Cloud Console,并确保您有权使用Tanzu Mission Control(TMC)服务。您可以通过确保看到如下所示的TMC Service磁贴来确认这一点。
接下来,单击您的用户名并导航到“我的帐户”以创建所需的API令牌
为TMC服务生成一个新的API令牌,以附加我们之前部署的TKG集群。
记下API令牌,因为稍后我们将需要它。如果您忘记复制它或丢失了它,则只需返回此屏幕并重新生成即可。
现在让我们跳回TKG演示设备,将TKG集群连接到TMC。
运行以下命令以登录到TMC服务,并提供您之前创建的API令牌以及用户定义的上下文名称。
# tmc login -c -n tkg-cluster-01 |
现在,我们需要创建一个TMC群集组,该组允许您对TKG群集进行逻辑分组,这反映在TMC UI中。为此,请运行以下命令并为其命名
# tmc clustergroup create -n vmc-cluster |
要附加我们的TKG集群,我们需要运行以下命令,该命令将生成YAML清单,该清单将需要运行以将TMC Pod实际部署到我们的TKG集群中
# tmc cluster attach --group vmc-cluster --name vmc-tkg-cluster-01 |
最后,我们运行应用程序将TKG集群附加到TMC
# k apply -f k8s-attach-manifest.yaml |
TKG演示
步骤1.存储类别和持久卷
切换到storage
TKG演示设备上的演示目录
cd /root/demo/storage |
从vSphere UI检索vSphere Datastore URL,该URL将用于创建我们的存储类定义
注意:有多种方法可以将vSphere Datastore与存储类定义相关联。在VMC中,当前是必需的,因为VMC中的Cloud Native Storage /容器存储接口可以利用vSphere Tag。
编辑defaultstorageclass.yaml
并更新datastoreurl
属性
kind: StorageClass |
注意请在datastoreurl值的末尾添加一个尾随“ /”,这是必需的。如果从vSphere UI复制URL,则将包含正确的URL。
创建存储类定义:
# k apply -f defaultstorageclass.yaml |
确认已创建存储类:
# k get sc |
pvc-test
使用我们的默认存储类创建2GB永久卷:
# k apply -f pvc.yaml |
确认创建了持久卷:
# k get pvc |
注意:这可能需要花费几秒钟的时间,才能在vSphere中实现PV
通过导航到下面的特定vSphere Datatore,我们还可以在vSphere UI中看到新的Persistent Volume。 Monitor->Container Volumes
删除永久卷:
# k delete pvc pvc-test |
第2步。简单的K8s演示应用程序
切换到yelb
TKG演示设备上的演示目录
cd /root/demo/yelb |
yelb
为我们的演示创建名称空间:
k create ns yelb |
部署yelb应用程序:
# k apply -f yelb.yaml |
通过运行以下命令等待部署完成:
# k -n yelb get deployments |
检索“ UI”窗格ID:
# k -n yelb get pods | grep ui |
检索运行“ UI”容器的工作程序节点的IP地址:
# k -n yelb describe pod yelb-ui-79c68df689-66bwq |
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应用程序是交互式的,因此您可以随意使用它
注意:有关此演示应用程序的详细信息,请参见此处,该应用程序的原始作者是Massimo Re’Ferre(他的遗产是Ex-VMware)
在继续进行下两个演示之前,您将需要删除该yelb
应用程序:
k delete -f yelb.yaml |
步骤3.基本负载均衡器
切换到metallb
TKG演示设备上的演示目录
cd /root/demo/metallb |
使用来自网络的DHCP范围的一小部分来编辑metallb-config.yaml
和更新addresses
属性tkg-network
。在我们的示例中,我们使用了192.168.2.0/24,因此让我们为要提供的Metal LB选择最后5个IP地址。
apiVersion: v1 |
创建metallb-system
名称空间:
# k create ns metallb-system |
创建所需的机密:
# k create secret generic -n metallb-system memberlist --from-literal=secretkey="\$(openssl rand -base64 128)" |
部署Metal LB:
# k apply -n metallb-system -f metallb.yaml |
应用我们的Metal LB配置:
# kubectl apply -n metallb-system -f metallb-config.yaml |
验证metallb-system
名称空间中的所有Pod 是否正在运行:
# k -n metallb-system get pod |
步骤4.使用负载均衡器的基本K8s演示应用程序
切换到yelb
TKG演示设备上的演示目录
cd /root/demo/yelb |
部署yelb Load Balancer版本的应用程序:
# k apply -f yelb-lb.yaml |
通过运行以下命令等待部署完成:
# k -n yelb get deployments |
检索Yelb服务的负载均衡器IP:
# k -n yelb get svc |
在该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!
您还可以使用以下命令使用Docker CLI登录Harbor来推送和/或拉出其他容器:
# docker login -u admin -p Tanzu1! registry.rainpole.io/library |
注意:您必须使用
registry.rainpole.io
由letsencrypt生成的真实证书,该证书需要使用DNS挑战拥有的域。为了支持无间隙/非互联网方案,今天的TKG需要一个不具有正确签名证书(自签名和自定义CA)的注册表。
Octant
为了轻松地导航,学习和调试Kubernetes,可以使用诸如Octant之类的有用工具。Octant已安装在TKG演示设备上,您可以运行以下命令启动它:
octant |
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。
有关如何使用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