边缘使用 K8s 门槛太高?OpenYurt 这个功能帮你快速搭建集群!

简介: 为了降低 OpenYurt 的使用门槛,帮助更多地开发者快速上手 OpenYurt,社区提供了 OpenYurt 易用性工具 yurtctl。该工具致力于屏蔽 OpenYurt 集群创建的复杂性,帮助开发者在本地快速地搭建 OpenYurt 开发测试集群。

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

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

1.png

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

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

环境准备

(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"}

一键拉起控制面节点

在 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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configThen 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-nodeAnd 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 节点组件是否 Runnin

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配合实现从云到边的运维能力。

一键接入云端节点

云端节点用来部署 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

一键接入边缘节点

边缘节点作为 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,一起打造更加易用的边缘云原生基础设施。

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Effective Java 在工作中的应用总结

简介&#xff1a; 《Effective Java》是一本经典的 Java 学习宝典&#xff0c;值得每位 Java 开发者阅读。笔者将书中和平日工作较密切的知识点做了部分总结。 作者 | 宜秋 来源 | 阿里技术公众号 《Effective Java》是一本经典的 Java 学习宝典&#xff0c;值得每位 Java 开发…

harfbuzz安装位置 linux_最新Ubuntu 20.04 LTS已发布,在Win10中该如何进行安装和使用?...

最近Ubuntu发布最新的20.04 LTS长期支持版本&#xff0c;官方提供为期5年的更新升级、安全修复等服务。国内的优麒麟团队也同步放出了优麒麟20.04 LTS&#xff0c;加入了全新的UKUI 3.0桌面环境。那么如何在微软的Windows系统中安装体验最新的Ubuntu系统呢&#xff1f;实际上相…

如何查看华为服务器配置信息,查看服务器网络配置信息

查看服务器网络配置信息 内容精选换一换ECS的网卡绑定虚拟IP地址后&#xff0c;该虚拟IP地址无法ping通。以下排查思路根据原因的出现概率进行排序&#xff0c;建议您从高频率原因往低频率原因排查&#xff0c;从而帮助您快速找到问题的原因。如果解决完某个可能原因仍未解决问…

通过Kubernetes监控探索应用架构,发现预期外的流量

简介&#xff1a; Kubernetes 监控立足于应用监控之下的 Kubernetes 容器界面和底层操作系统&#xff0c;是 Kubernetes 集群软件栈端到端可观测性的一体化解决方案&#xff0c;在 Kubernetes 监控中可以同时看到关联的所有层的观测数据。我们希望通过 Kubernetes 监控的一系列…

追踪 Kubernetes 中的网络流量

作者 | Addo Zhang来源 | 云原生指北译者注&#xff1a;这篇文章很全面的罗列出了 Kubernetes 中涉及的网络知识&#xff0c;从 Linux 内核的网络内容&#xff0c;到容器、Kubernetes&#xff0c;一一进行了详细的说明。文章篇幅有点长&#xff0c;不得不说&#xff0c;网络是很…

Go 语言网络库 getty 的那些事

简介&#xff1a; Getty 维护团队不追求无意义的 benchmark 数据&#xff0c;不做无意义的炫技式优化&#xff0c;只根据生产环境需求来进行自身改进。只要维护团队在&#xff0c;Getty 稳定性和性能定会越来越优秀。 个人从事互联网基础架构系统研发十年余&#xff0c;包括我…

std中稳定排序算法_源代码库已开放 | 哈工大硕士生用 Python 实现了 11 种经典数据降维算法...

转自&#xff1a;AI开发者网上关于各种降维算法的资料参差不齐&#xff0c;同时大部分不提供源代码。这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法&#xff0c;包括&#xff1a;PCA、LDA、MDS、LLE、TSNE 等&#xff0c;并附有相关资料、展…

曲师大教务系统服务器,曲师大教务处信息门户入口地址

为了规范财务行为&#xff0c;加强财务管理&#xff0c;提高代管经费使用效益&#xff0c;提高项目建设质量&#xff0c;根据上级和学校有关财务规定&#xff0c;结合我校实际情况&#xff0c;特制定本办法。一、教务处代管的项目经费品牌特色专业建设经费、精品课程建设经费、…

云网管—云上构建网络自动化体系

简介&#xff1a; 云网管是基于阿里云网络多年技术和经验沉淀打造的云上智能网络管理运维平台&#xff0c;提供企业网络全生命周期管理运维的能力&#xff0c;让部署更快捷、运维更高效、网络更透明。 1.背景 云网管是基于阿里云网络多年技术和经验沉淀打造的云上智能网络管理…

【C++练级之路】【Lv.5】动态内存管理(都2023年了,不会有人还不知道new吧?)

目录 一、C/C内存分布二、new和delete的使用方式2.1 C语言内存管理2.2 C内存管理2.2.1 new和delete操作内置类型2.2.2 new和delete操作自定义类型 三、new和delete的底层原理3.1 operator new与operator delete函数3.2 原理总结3.2.1 内置类型3.2.2 自定义类型 四、定位new表达…

开工啦~Spring 完美导入 IDEA

作者 | 阿Q来源 | 阿Q说代码有小伙伴私信我说想要研究下Spring的源码&#xff0c;想让我出一期教程来实现IDEA导入Spring源码&#xff0c;今天它来了~版本 &#xff1a;IDEA 2020.2.3 &#xff1b;Spring 5.0.x &#xff1b;gradle 4.4.1 &#xff1b;先从github上面把 spring …

基于MaxCompute分布式Python能力的大规模数据科学分析

简介&#xff1a; 如何利用云上分布式 Python 加速数据科学。 如果你熟悉 numpy、pandas 或者 sklearn 这样的数据科学技术栈&#xff0c;同时又受限于平台的计算性能无法处理&#xff0c;本文介绍的 MaxCompute 可以让您利用并行和分布式技术来加速数据科学。也就是说只要会用…

5新建没有头文件_开垦绿茵版图迎来“真金白银”保障,新建足球场地可获财政补贴...

本周二&#xff0c;国家发改委、体育总局、国务院足球改革发展部际联席会议办公室共同制定了《全国社会足球场地设施建设专项行动实施方案(试行)》。《方案》指出&#xff0c;对新建11人制标准足球场&#xff0c;每个球场补助200万元&#xff1b;对新建5人制、7人制(8人制)足球…

网站免费空间和服务器的区别,网站空间和服务器的区别

网站空间和服务器的区别 内容精选换一换汇总对象存储服务OBS的各项功能&#xff0c;并对其进行简单的介绍&#xff0c;帮助您从整体上了解OBS的功能特性。CCE Turbo集群是基于云原生基础设施构建的云原生2.0容器引擎服务&#xff0c;具备软硬协同、网络无损、安全可靠、调度智能…

基于 MaxCompute + Hologres 的人群圈选和数据服务实践

简介&#xff1a; 本文主要介绍如何通过 MaxCompute 进行海量人群的标签加工&#xff0c;通过 Hologres 进行分析建模&#xff0c;从而支持大规模人群复杂圈选场景下的交互式体验&#xff0c;以及基于API的数据服务最佳实践。 本文作者 刘一鸣 阿里云智能 高级产品专家 人群圈…

一款强大的 Kubernetes API 流量查看神器

作者 | 小碗汤来源 | 我的小碗汤mizu 是为 Kubernetes 提供的一个简单而强大的 API 流量查看器&#xff0c;可以查看微服务之间的所有 API 通信&#xff0c;以帮助调试和排除故障。相当于 Kubernetes 的 TCPDump 和 Wireshark。简单而强大的 CLI丰富的过滤规则API 调用实时监控…

Redis 巧用数据类型实现亿级数据统计

作者 | 码哥字节来源 | 码哥字节在移动应用的业务场景中&#xff0c;我们需要保存这样的信息&#xff1a;一个 key 关联了一个数据集合&#xff0c;同时还要对集合中的数据进行统计排序。常见的场景如下&#xff1a;给一个 userId &#xff0c;判断用户登陆状态&#xff1b;两亿…

2021杭州·云栖大会来了!门票免费预约!

2021杭州云栖大会&#xff0c;定了&#xff01; 10月19日-22日&#xff0c;就在杭州云栖小镇 2场重磅主论坛上百场分论坛 超4万平米科技展 今年&#xff0c;云栖大会将首次免费开放 门票可在官网免费预约 入口现已开启 戳此预约&#xff0c;我们不见不散&#xff01; ​ …

js 可以做什么东西_Deno需要做什么才能取代Node.js?

全文共1843字&#xff0c;预计学习时长5分钟Deno是一个Javascript/TypeScript的运行时&#xff0c;旨在取代Node.js的地位。它拥有广泛功能&#xff0c;讨论度非常高&#xff0c;在Github上有将近68000个星星&#xff1a;既然这么受欢迎&#xff0c;那么有人要问了&#xff1a;…

37 手游基于 Flink CDC + Hudi 湖仓一体方案实践

简介&#xff1a; 介绍了 37 手游为何选择 Flink 作为计算引擎&#xff0c;并如何基于 Flink CDC Hudi 构建新的湖仓一体方案。 本文作者是 37 手游大数据开发徐润柏&#xff0c;介绍了 37 手游为何选择 Flink 作为计算引擎&#xff0c;并如何基于 Flink CDC Hudi 构建新的湖…