OpenYurt入门-使用yurtctl创建OpenYurt集群-阿里云开发者社区

开发者社区> bingchang> 正文

OpenYurt入门-使用yurtctl创建OpenYurt集群

简介:     [OpenYurt](https://github.com/openyurtio/openyurt) 作为阿里巴巴首个开源的边缘云原生项目,涉及到边缘计算和云原生两个领域。然而,许多边缘计算的开发者并不熟悉云原生相关的知识。为了降低OpenYurt的使用门槛,帮助更多地开发者快速上手OpenYurt,社区提供了OpenYurt易用性工具yurtctl
+关注继续查看

    OpenYurt 作为阿里巴巴首个开源的边缘云原生项目,涉及到边缘计算和云原生两个领域。然而,许多边缘计算的开发者并不熟悉云原生相关的知识。为了降低OpenYurt的使用门槛,帮助更多地开发者快速上手OpenYurt,社区提供了OpenYurt易用性工具yurtctl。该工具致力于屏蔽OpenYurt集群创建的复杂性,帮助开发者在本地快速地搭建OpenYurt开发测试集群。

     OpenYurt采用云管边的架构,在原生Kubernetes集群之上,以Addon的形式进行功能增强,解决了云管边场景中,云边网络不稳定、云边运维难等关键问题,并实现了工作负载/流量的单元化管理、边缘本地存储、物联网设备管理等核心功能。本文实验的拓扑如图所示:

其中,蓝色部分是原生的k8s组件,橙色部分是OpenYurt提供的组件。

  • Master节点位于云端,作为OpenYurt集群的管控节点,同时也作为集群的Cloud Node,上面部署了原生k8s的控制面组件controlplane,以及OpenYurt的管控组件Yurt-Controller-Manager、Yurt-App-manager、Tunnel-Server
  • Cloud-Node节点位于云端,作为OpenYurt集群的Cloud Node,可以用于部署OpenYurt的管控组件,本文实验中只用于演示了云端节点接入操作,没有实际部署OpenYurt的管控组件。
  • Edge-Node位与边缘,作为集群的边缘节点,部署了节点自治组件YurtHub,以及云端通道组件tunnel-agent。

1.环境准备

(1)三台Linux操作系统的计算机。一个作为控制平面节点(同时也是云端节点)、一个作为云端节点和一个作为边缘节点,系统均为Ubuntu18.04)。
(2)系统预安装Docker,安装方式参考
(3)关闭系统交换分区,不同版本系统的关闭方式存在差异,本文环境执行swapoff -a关闭。
(4)下载OpenYurt社区代码,构建yurtctl工具,并将yurtctl拷贝到三台主机上。

git clone https://github.com/openyurtio/openyurt.git
cd openyurt
export GOOS=linux GOARCH=amd64; make build  WHAT=cmd/yurtctl

构建的yurtctl在目录_output/bin/中,其中本文采用的yurtctl版本为:

root@master:~# ./yurtctl --version
yurtctl version: projectinfo.Info{GitVersion:"v0.4.1", GitCommit:"3315ccc", BuildDate:"2021-09-08T02:48:34Z", GoVersion:"go1.13", Compiler:"gc", Platform:"linux/amd64"}

2. 一键拉起控制面节点

    在yurtctl中,提供了init子命令用于拉起OpenYurt的管控节点。该节点中部署了Kubernetes集群的管控组件(kube-apiserver/kube-scheduler/kube-controller-manager/etcd)。同时也作为OpenYurt云端管控节点部署了OpenYurt的管控组件(yurt-controller-manager/yurt-app-manager/yurt-tunnel-server)

    在控制面节点上,执行如下命令

root@master:~# ./yurtctl init --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(推荐)。yurtctl init 指令的更多参数可以参考yurtctl init --help.
yurtctl init 命令执行成功之后会同步输出添加云端节点和边缘节点的指令。

        Your OpenYurt cluster control-plane has initialized successfully!

        To start using your cluster, you need to run the following as a regular user:

          mkdir -p $HOME/.kube
          sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
          sudo chown $(id -u):$(id -g) $HOME/.kube/config

        Then you can join any number of edge-nodes by running the following on each as root:

        yurtctl join 111.32.157.130:6443 --token tfdxae.lvmb7orduikbyjqu \
    --discovery-token-ca-cert-hash sha256:0e1faf696fe976a7b28c03e0dece429c85d72e6e1e6bc2dd1ac3d30d0416f3f0  --node-type=edge-node

        And you can join any number of cloud-nodes by running the following on each as root:

        yurtctl join 111.32.157.130:6443 --token tfdxae.lvmb7orduikbyjqu \
    --discovery-token-ca-cert-hash sha256:0e1faf696fe976a7b28c03e0dece429c85d72e6e1e6bc2dd1ac3d30d0416f3f0  --node-type=cloud-node

根据提示,执行如下命令,拷贝证书到相应的目录,就可以使用kubectl操作集群

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

在master节点上,查看master节点的状态

root@master:~# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    <none>   50s   v1.18.8

查看master节点组件是否Running

root@master:~# kubectl get pods -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   controlplane-master                        4/4     Running   0          55s
kube-system   coredns-546565776c-88hs6                   1/1     Running   0          46s
kube-system   coredns-546565776c-v5wxb                   1/1     Running   0          46s
kube-system   kube-flannel-ds-h6qqc                      1/1     Running   0          45s
kube-system   kube-proxy-6rnq2                           1/1     Running   0          45s
kube-system   yurt-app-manager-75b7f76546-6dsw9          1/1     Running   0          45s
kube-system   yurt-app-manager-75b7f76546-x6wzm          1/1     Running   0          45s
kube-system   yurt-controller-manager-697877d548-kd5xf   1/1     Running   0          46s
kube-system   yurt-tunnel-server-bc5cb5bf-xxqgj          1/1     Running   0          46s

其中,各个组件的功能如下:

  • controlplane为all-in-one的Kubernetes管控组件,为了便于理解OpenYurt与Kubernetes的关系,yurtctl init将Kubernetes的管控组件以黑盒的形式部署在同一个Pod中。
  • yurt-app-manager 为OpenYurt的单元化组件,提供workload的单元化部署、运维等能力;
  • yurt-controller-manager 为节点生命周期管理组件,与边缘节点上的yurt-hub配合实现边缘节点的自治功能;
  • yurt-tunnel-server 为云边运维通道的server端,与边缘节点上的yurt-tunnel-agent配合实现从云到边的运维能力。

3. 一键接入云端节点

    云端节点用来部署OpenYurt相关的系统组件。在yurtctl中,提供了join子命令,用于向OpenYurt集群中增加云端节点。此外,在用yurtctl init初始化master节点时,会将master节点也作为一个云端节点使用。如果需要增加新的云端节点,可以使用init的输出,拷贝云端节点接入指令到需要添加的云端节点上执行。

root@cloud-node:~#./yurtctl join 111.32.157.130:6443 --token vowclg.k7059m0f0qbcebpg --discovery-token-ca-cert-hash sha256:30846295ea024260bc3c4988507c4408e8756ca5440221e109fe8167f636f125 --node-type=cloud-node

接入命令中指定了master节点的地址,以及接入认证需要的token和要接入的节点类型(cloud-node),执行成功输出如下

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

在master节点上查看刚接入的云端节点状态是否Ready。

root@master:~# kubectl get nodes -l openyurt.io/is-edge-worker=false
NAME         STATUS   ROLES    AGE     VERSION
cloud-node   Ready    <none>   5m4s    v1.18.8
master       Ready    <none>   9m40s   v1.18.8

4.一键接入边缘节点

    边缘节点作为OpenYurt集群实际部署业务的节点,通常部署在用户的内网环境,与管控组件的网络连接通常不稳定。因此,边缘节点上需要部署节点自治组件yurt-hub以及云边运维组件yurt-tunnel-agent。在yurtctl中,提供了join子命令,用于向OpenYurt集群中添加边缘节点。使用init中的输出命令,拷贝边缘节点接入指令到需要添加的边缘节点上执行。

root@edge-node:~# ./yurtctl join 111.32.157.130:6443 --token vowclg.k7059m0f0qbcebpg --discovery-token-ca-cert-hash sha256:30846295ea024260bc3c4988507c4408e8756ca5440221e109fe8167f636f125  --node-type=edge-node

接入命令中指定了master节点的地址,以及接入认证需要的token和要接入的节点类型(edge-node),执行成功输出如下

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

在master节点上查看刚接入的边缘节点状态是否Ready

root@master:~# kubectl get nodes -l openyurt.io/is-edge-worker=true
NAME        STATUS   ROLES    AGE   VERSION
edge-node   Ready    <none>   26s   v1.18.8

查看边缘节点的组件是否Running

root@master:~# kubectl get pods -A -o wide | grep edge-node
kube-system   kube-flannel-ds-tdqtx                      1/1     Running   0          58s   103.15.99.183    edge-node    <none>           <none>
kube-system   kube-proxy-8r76s                           1/1     Running   0          58s   103.15.99.183    edge-node    <none>           <none>
kube-system   yurt-hub-edge-node                         1/1     Running   0          16s   103.15.99.183    edge-node    <none>           <none>
kube-system   yurt-tunnel-agent-v4jwt                    1/1     Running   0          38s   103.15.99.183    edge-node    <none>           <none>

其中,各个边缘节点上各个组件功能如下:

  • yurt-hub 边缘节点自治组件,边缘节点上的组件通过yurt-hubkube-apiserver交互。当云边网络良好时,yurt-hub转发节点组件的请求到kube-apiserver,并缓存Response内容。当云边断网时,edge-hub从本地缓存中获取数据响应边缘节点组件的请求。
  • yurt-tunnel-agent云边运维通道客户端,与yurt-tunnel-server配合,实现从云到边的运维。

    经过以上4个步骤,您就可以在本地拥有一套OpenYurt集群。如果需要清理OpenYurt集群,可以在集群中的每个节点上执行./yurtctl reset

    OpenYurt背靠原生的Kubernetes,同时又面向边缘计算场景。由于Kubernetes本身的复杂性,导致很多非原生领域的同学难以上手使用。而OpenYurt集群的搭建作为上手的第一步,阻挡了大部分的边缘计算玩家。为了提升OpenYurt的易用性,yurtctl设计了init、join、reset、convert等工具,目的在于帮助用户快速地在本地搭建OpenYurt集群,跨越使用OpenYurt的第一步。虽然目前易用性有了很大的提升,但是仍然有很多不足之处。期待社区的同学积极参与,基于OpenYurt,一起打造更加易用的边缘云原生基础设施。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2654 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
10265 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
9622 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
11713 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
8189 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
6691 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
21032 0
+关注
2
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载