简介:为了降低OpenYurt的使用门槛,帮助更多的开发者快速上手OpenYurt,社区提供了OpenYurt易用性工具yurtctl。该工具致力于屏蔽OpenYurt集群创建的复杂性,帮助开发者在本地快速搭建OpenYurt开发测试集群。OpenYurt作为阿里巴巴首个开源边缘云原生项目,涉及边缘计算和云原生两大领域。然而,很多边缘计算开发者并不熟悉云原生知识。为了降低OpenYurt的使用门槛,帮助更多的开发者快速上手OpenYurt,社区提供了OpenYurt可用性工具yurtctl。该工具致力于屏蔽OpenYurt集群创建的复杂性,帮助开发者在本地快速搭建OpenYurt开发测试集群。OpenYurt采用云端管理架构,在原生Kubernetes集群之上,以Addon的形式增强功能,解决了云端网络不稳定、云端运维困难等关键问题管理场景,实现工作负载/流量单元管理、边缘本地存储、物联网设备管理等核心功能。本文实验的拓扑结构如图:蓝色部分为原生k8s组件,橙色部分为OpenYurt提供的组件。Master节点位于云端,作为OpenYurt集群的控制节点,同时也是集群的CloudNode,其上有原生的k8s控制平面组件controlplane和OpenYurt控制组件yurt-controller-manager、yurt-app-manager,yurt-tunnel-serverCloud-Node节点位于云端。作为OpenYurt集群的CloudNode,可用于部署OpenYurt的管控组件。本实验仅用于演示云节点接入操作,并未实际部署OpenYurt的控制组件。Edge-Node位于边缘,作为集群的边缘节点,部署了节点自治组件YurtHub和云通道组件tunnel-agent。环境准备(1)三台Linux操作系统的电脑。一个作为控制面节点(也是云节点),一个作为云节点,一个作为边缘节点,系统为Ubuntu18.04)。(2)系统预装了Docker,安装方法请参考。(3)关闭系统交换分区。不同版本系统的关机方式不同。本文执行swapoff-a关机。(4)下载OpenYurt社区代码,构建yurtctl工具,将yurtctl复制到三台主机。gitclonehttps://github.com/openyurtio/openyurt.gitcdopenyurtexportGOOS=linuxGOARCH=amd64;makebuildWHAT=cmd/yurtctl构建的yurtctl在_output/bin/目录下,本文使用的yurtctl版本为:root@master:~#./yurtctl--versionyurtctlversion:projectinfo.Info{GitVersion:》v0.4.1",GitCommit:"3315ccc",BuildDate:"2021-09-08T02:48:34Z",GoVersion:"go1.13",Compiler:"gc",Platform:"linux/amd64"}拉起一键控制平面节点yurtctl中提供了init子命令拉起OpenYurt的控制节点。Kubernetes集群的管控组件(kube-apiserver/kube-scheduler/kube-controller-manager/etcd)部署在该节点。同时,OpenYurt的控制组件(yurt-controller-manager/yurt-app-manager/yurt-tunnel-server)也部署为OpenYurt云控制节点。在控制面节点,执行如下命令root@master:~#./yurtctlinit--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers--kubernetes-version=v1.18.8--pod-network-cidr=10.244.0.0/16该命令指定Kubernetes相关组件的镜像仓库为registry.cn-hangzhou.aliyuncs.com/google_containers,指定Kubernetes集群版本为1.18.8(推荐)。yurtctlinit命令的更多参数请参考yurtctlinit--help。yurtctlinit命令执行成功后,会同步输出添加云节点和边缘节点的命令。您的OpenYurt集群控制平面已成功初始化!要开始使用您的集群,您需要以普通用户身份运行以下命令:mkdir-p$HOME/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/config然后你可以通过在每个边缘节点上以根用户身份运行以下命令来加入任意数量的边缘节点:yurtctljoin111.32.157.130:6443--tokentfdxae.lvmb7orduikbyjqu\--discovery-token-ca-cert-hashsha256:0e1faf696fe976a7b28c03e0dece429c85d72e6e1e6bc2dd1ac3d30d0416f3f0--node-type=edge-node您可以通过以根用户身份在每个节点上运行以下命令来加入任意数量的云节点:yurtctljoin111.32.0:164.13tokentfdxae.lvmb7orduikbyjqu\--discovery-token-ca-cert-hashsha256:0e1faf696fe976a7b28c03e0dece429c85d72e6e1e6bc2dd1ac3d30d0416f3f0--node-type=cloud-node根据提示,执行如下命令,拷贝证书到相应的directory,youcanusekubectltooperatetheclustermkdir-p$HOME/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/config在主节点上,查看状态masternoderoot@master:~#kubectlgetnodesNAMESTATUSROLESAGEVERSIONmasterReady50sv1.18.8检查master节点组件是否运行root@master:~#kubectlgetpods-ANAMESPACENAMEREADYSTATUSRESTARTSAGEkube-systemcontrolplane-master4/4运行055skube-systemcoredns-546565776c-88hs61/1运行046skube-systemcoredns-546565776c-v5wxb1/1运行046skube-systemkube-flannel-ds-h6qqc1/1运行045skube-systemkube-proxy-6rnq21/1运行045skube-systemyurt-app-manager-75b7f76546-6dsw91/1运行045skube-systemyurt-app-manager-75b7f76546-x6wzm1/1运行045skube-systemyurt-controller-manager-697877d548-kd5xf1/1运行046skube-systemyurt-tunnel-server-bc5cb5bf-xxqgj1/1运行046s其中,各功能组件如下:controlplane是一体化的Kubernetes控制组件。为了理解OpenYurt和Kubernetes的关系,yurtctlinit将Kubernetes控制组件以黑盒的形式部署在同一个Pod中。yurt-app-manager是一个OpenYurtComponents单元,提供工作负载单元化部署运维能力;yurt-controller-manager是节点生命周期管理组件,配合边缘节点上的yurt-hub,实现边缘节点的自治功能;yurt-tunnel-server是云边缘运维通道的server端,配合边缘节点上的yurt-tunnel-agent,实现从云端到边缘的运维能力。一键接入云节点云节点用于部署OpenYurt相关的系统组件。yurtctl中提供了join子命令,用于将云节点添加到OpenYurt集群中。另外,当master节点用yurtctlinit初始化时,master节点也会作为云节点使用。如果需要添加新的云节点,可以使用init的输出复制云节点访问命令,在需要添加的云节点上执行。root@cloud-node:~#./yurtctljoin111.32.157.130:6443--tokenvowclg.k7059m0f0qbcebpg--discovery-token-ca-cert-hashsha256:30846295ea024260bc3c4988507c4408e8756ca5440221e109fe8167f636f125--node-type=cloud-node接入命令中指定主节点的地址,以及接入认证所需的token和接入的节点类型(cloud-node)。执行成功输出如下:Thisnodehasjoinedthecluster:*Certificatesigningrequestwassenttoapiserverandaresponsereceived.*Kubelet被告知新的安全连接细节。在控制平面上运行“kubectlgetnodes”以查看此节点是否加入集群。在master节点上,查看新连接的云节点状态是否为Readyroot@master:~#kubectlgetnodes-lopenyurt.io/is-edge-worker=falseNAMESTATUSROLESAGEVERSIONcloud-nodeReady5m4sv1.18.8masterReady9m40sv1.18.8一键接入边缘节点edgenodesasOpenYurt集群实际部署服务的节点通常部署在用户的内网环境中,与管控组件的网络连接通常不稳定。因此需要在边缘节点上部署节点自治组件yurt-hub和云边缘运维组件yurt-tunnel-agent。在yurtctl中,提供了join子命令,用于将边缘节点添加到OpenYurt集群。使用init中的output命令复制边缘节点接入命令,在需要添加的边缘节点上执行。root@edge-node:~#./yurtctljoin111.32.157.130:6443--tokenvowclg.k7059m0f0qbcebpg--discovery-token-ca-cert-hashsha256:30846295ea024260bc3c4988507c4408e8756ca5440221e109fe8167f636f125--node-type=edge-node接入命令中指定主节点的地址,以及接入认证所需的token和接入的节点类型(edge-node)。执行成功输出如下:Thisnodehasjoinedthecluster:*Certificatesigningrequestwassenttoapiserverandaresponsereceived.*Kubelet被告知新的安全连接细节。在控制平面上运行“kubectlgetnodes”以查看此节点是否加入集群。在master节点上,查看新连接的边缘节点状态是否为Readyroot@master:~#kubectlgetnodes-lopenyurt.io/is-edge-worker=trueNAMESTATUSROLESAGEVERSIONedge-nodeReady26sv1.18.8查看边缘节点的组件是否运行root@master:~#kubectlgetpods-A-owide|grepedge-nodekube-systemkube-flannel-ds-tdqtx1/1运行058s103.15.99.183edge-nodekube-systemkube-proxy-8r76s1/1Running058s103.15.99.183edge-nodekube-systemyurt-hub-edge-node1/1Running016s103.15.99.183edge-nodekube-systemyurt-tunnel-agent-v4jwt1/1Running038s103.15.99.183edge-node其中,各个边缘节点上的各个组件的功能如下:yurt-hub边缘节点自治组件,边缘节点上的组件通过yurt-hub与kube-apiserver进行交互。当云边网络良好时,yurt-hub将节点组件的请求转发给kube-apiserver,并缓存Response内容。当云边缘与网络断开时,边缘集线器从本地缓存中获取数据以响应边缘节点组件的请求。yurt-tunnel-agent是云端运维通道客户端,配合yurt-tunnel-server实现云边运维。经过以上4步,你就可以在本地拥有一个OpenYurt集群了。如果需要清理OpenYurt集群,可以在集群中的每个节点上执行./yurtctlreset。OpenYurt以原生Kubernetes为后盾,同时面向边缘计算场景。由于Kubernetes本身的复杂性,很多非母语领域的同学入门比较困难。OpenYurt集群的搭建,作为入门的第一步,挡住了大部分边缘计算的玩家。为了提高OpenYurt的易用性,yurtctl设计了init、join、reset、convert等工具,帮助用户在本地快速搭建OpenYurt集群,跳过使用OpenYurt的第一步。虽然易用性有了很大的提高,但仍然存在很多不足。我们期待社区学生的积极参与,基于OpenYurt,打造更易用的边缘云原生基础设施。原文链接本文为阿里云原创内容,未经许可不得转载。