OpenYurt 开箱测评 | 一键让原生 K8s 集群具备边缘计算能力

来源:http://www.20ag0qe6uy.cn 时间:06-23 21:47:30

原标题:OpenYurt 开箱测评 | 一键让原生 K8s 集群具备边缘计算能力

作者| 郑超 阿里云高级开发工程师

随着物联网技术以及 5G 技术的高速发展,将云计算的能力延迟至边缘设备端,并经历中央进走同一交付、管控,已成为云计算的主要发展趋势。为服务更多开发者把握这一趋势,5 月 29 日,阿里巴巴正式对表开源了基于 ACK@Edge(边缘集群托管服务)的云原生边缘计算框架 —— OpenYurt。

自 OpenYurt 开源以来受到了开发者的关注,今天这篇文章将带行家迅速上手 OpenYurt ,介绍如何行使 OpenYurt 挑供的命令走管理工具 Yurtctl, 高效迅速地安放 OpenYurt 集群。

OpenYurt 介绍

OpenYurt 主打“云边一体化”概念,依托 Kubernetes 重大的容器行使编排能力,已足了云-边一体化的行使分发、交付、和管控的诉求。相较于其他基于 Kubernetes 的边缘计算框架,OpenYurt 秉持着“最幼修改”原则,经历在边缘节点安置 Yurthub 组件,和在云端安放 Yurt-controller-manager,保证了在对 Kubernetes 零侵占的情况下,挑供管理边缘计算行使所需的有关能力。OpenYurt 能帮用户解决在海量边、端资源上完善大周围行使交付、运维、管控的题目,并挑供中压服务下沉通道,实现和边缘计算行使的无缝对接。在设计 OpenYurt 之初,吾们就专门强调保持用户体验的一致性,不增补用户运维义务,让用户真实方便地 “Extending your native kubernetes to edge”。

Yurtctl:一键让原生 K8s 集群具备边缘计算能力

为了让原生 K8s 集群具备边缘计算能力,OpenYurt 以 addon 为载体,非侵占式给原生 K8s 添强了如下能力:

边缘自治能力(YurtHub: 已开源),保证在弱网或者重启节点的情况下,安放在边缘节点上的行使也能平常运走; 云边协同能力(待开源),经历云边运维通道解决边缘的运维需求,同时挑供云边协同能力; 单元化管理能力(待开源),为松散的边缘节点,边缘行使,行使间流量挑供单元化闭环管理能力; 其他一些能力。

对于行家比较关心的题目:如何将添强的边缘计算能力和原生 K8s 无缝融相符。基于以前 ACK@Edge 的线上运维经验,吾们开源了 Yurtctl 命令走工具,协助实现了原生 Kubernetes 和 OpenYurt 之间的无缝转换以及对 OpenYurt 有关组件的高效运维。

Yurtctl 的做事原理

打开全文

图 1 - Yurtctl convert 流程

Yurtctl 是一个中央化的管控工具。在 OpenYurt 云-边一体的架构里,Yurtctl 将直接与 APIServer 进走交互。它借助原生 Kubernetes 的 Job workload 对每个 node 进幸运维操作。如图1所示,在实走转换(convert)操作时,Yurtctl 会经历 Job 将一个 servant Pod 安放到用户指定的边缘节点上,servant Pod 里的容器实走的详细操作请参考:https://github.com/alibaba/openyurt/blob/master/config/yurtctl-servant/setup_edgenode。

由于 servant Pod 必要直接操作节点 root 用户的文件体系(例如将 yurthub 配置文件安放于 /etc/kubernetes/manifests 现在录下),并且必要重置体系管理程序(kubelet.service), servant Pod 中的 container 将被授予 privileged 权限,批准其与节点共享 pid namespace,并将借由 nsenter 命令进入节点主命名空间完善有关操作。当 servant Job 成功实走后,Job 会自动删除。倘若战败,Job 则会被保留,联系我们方便运维人员排查舛讹因为。借由该机制,Yurtctl 还可对 Yurthub 进走更新或者删除。

案例:一键转换 OpenYurt 集群

注:在 ACK 上做 demo 实验

1. 获取 yurtctl

OpenYurt github 仓库包括了 yurtctl 的源码,下载 OpenYurt 仓库之后,即可经历编译获得 yurtctl,详细命令如下:

$ make build WHAT=cmd/yurtctl

hack/make-rules/build.sh cmd/yurtctl

Building cmd/yurtctl

编译成功之后,yurtctl 可实走文件就能够在 _output/bin/ 现在录下找到。

2. 将 Kubernetes 转换为 OpenYurt

倘若吾们想将一个双节点(node1 和 node2)的 Kubernetes 集群转换成 OpenYurt 集群,并且只想让 node2 成为自治边缘节点,那么能够经历实走 yurtctl convert 来实现,详细命令如下:

$ yurtctl convert --cloud-nodes node1 --provider ack

I0603 14:34:33.714304 40825 convert.go:164] mark node1 as the cloud-node

I0603 14:34:33.719816 40825 convert.go:172] mark node2 as the edge-node

I0603 14:34:33.736609 40825 convert.go:198] deploy the yurt controller manager

I0603 14:34:33.742272 40825 convert.go:210] deploying the yurt-hub and resetting the kubelet service...

I0603 14:34:53.810165 40825 util.go:168] servant job(yurtctl-servant-convert-node2) has succeeded

成功配置节点之后,吾们必要将边缘节点标记为自治状态,详细命令如下:

$ yurtctl markautonomous # 倘若用户只想标记片面边缘节点,则能够行使 --autonomous-nodes 选项指定

I0602 11:22:05.610222 89160 markautonomous.go:149] mark node2 as autonomous

接着吾们就能够测试 node2 在断网环境下是否能实现节点自治。最先,在 node2 上安放一个测试 pod:

$ kubectl apply -f-<<EOF

apiVersion: v1

kind: Pod

metadata:

name: bbox

spec:

nodeName: node2

containers:

- image: busybox

command:

- top

name: bbox

EOF

pod/bbox created

登陆到 node2 上,将 Yurthub 的 --server-addr 参数竖立为一个不走访问的地址:

sudo sed -i 's|--server-addr=.*|--server-addr=https://1.1.1.1:1111|' /etc/kubernetes/manifests/yurt-hub.yaml

耐性期待 40 秒,吾们将不益看察到,即使 node2 已经处于 NotReady 状态,pod1 照样处于 Running 状态。这表明当边缘节点处于自治状态时,即使 node 不在线,Pod 也不会被云端 node controller 驱逐。

$ kubectl get node

NAME STATUS ROLES AGE VERSION

node1 Ready master 14m v1.14.8

node2 NotReady <none> 12m v1.14.8

$ kubectl get pod

NAME READY STATUS RESTARTS AGE

bbox 1/1 Running 0 5m12s

这时倘若将 node2 重启,吾们能够用 docker ps (倘若节点行使 docker 行为 container runtime)命令来验证 bbox Pod 会被重新拉首。

$ docker ps --format 'table {{.ID}}\t{{.Image}}\t{{.RunningFor}}' | grep busybox

d0c8134fddc1 busybox About a minutes ago

这是由于 Kubelet 会从 Yurthub 读取缓存的数据,恢复重启前的Pod状态。这片面技术细节吾们会在后续的文章里详细介绍。

3. 将 OpenYurt 转换回 Kubernetes

相对的,经历运走 yurtctl revert 命令,用户能够将一个 OpenYurt 集群转换回 Kubernetes 集群。倘若吾们想将上述双节点 Kubernetes 集群转换回 Kubernetes 模式,那么只需运走以下命令即可(运走该命令前,请先将 node2 上的 yurthub 重新连上 apiserver):

$ yurtctl revert

I0603 14:38:55.522376 41016 revert.go:106] label alibabacloud.com/is-edge-worker is removed

I0603 14:38:55.527998 41016 revert.go:116] yurt controller manager is removed

I0603 14:38:55.548354 41016 revert.go:130] ServiceAccount node-controller is created

I0603 14:39:05.572686 41016 util.go:168] servant job(yurtctl-servant-revert-node2) has succeeded

I0603 14:39:05.572718 41016 revert.go:142] yurt-hub is removed, kubelet service is reset

倘若还想晓畅更多 yurtctl 的行使手段,请参考 OpenYurt github 仓库下的[ ]()yurtctl的教程:https://github.com/alibaba/openyurt/tree/master/docs/tutorial。

What's Next

Yurtctl 现在的是成为运维人员管理 OpenYurt 集群的有力工具。所以吾们会不息演进 Yurtctl 以声援 OpenYurt 的新功能和新添的运维流程或场景。例如,不久之后 OpenYurt 还将开源 Yurttunnel,Yurtunit 等组件,Yurtctl 也将对这些组件挑供声援。吾们同时迎接行家挑出对 Yurtctl 的需求,一首竭力使其更添完善。

社区建设

OpenYurt 社区迎接新用户添入和参与共建。用户能够经历 Github issue 获取技术声援、通知 bug、挑出需求偏见等,或者经历 OpenYurt 用户钉钉群直接和core开发人员取得有关。(迎接钉钉搜索群号添入交流群:31993519)

迎接参与共建:OpenYurt 项现在地址 - https://github.com/alibaba/openyurt

课程选举

为了更多开发者能够享福到 Serverless 带来的盈余,这一次,吾们齐集了 10 位阿里巴巴 Serverless 周围技术行家,打造出最正当开发者入门的 Serverless 公开课,让你即学即用,轻巧拥抱云计算的新范式——Serverless。

点击即可免费不雅旁观课程:https://developer.aliyun.com/learning/roadmap/serverless

“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术周围、聚焦云原生通走技术趋势、云原生大周围的落地实践,做最懂云原生开发者的公多号。”

上云就望云栖号,点此查望更多:https://yqh.aliyun.com/?utm_content=g_1000100940

本文为阿里云内容,未经批准不得转载。


发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?