如何给网站做右侧导航,质量好的购物平台,如何制作网页首页,企业网站可以备案几个作者| 郑超 阿里云高级开发工程师
随着物联网技术以及 5G 技术的高速发展#xff0c;将云计算的能力延伸至边缘设备端#xff0c;并通过中心进行统一交付、管控#xff0c;已成为云计算的重要发展趋势。为服务更多开发者把握这一趋势#xff0c;5 月 29 日#xff0c;阿里…
作者| 郑超 阿里云高级开发工程师
随着物联网技术以及 5G 技术的高速发展将云计算的能力延伸至边缘设备端并通过中心进行统一交付、管控已成为云计算的重要发展趋势。为服务更多开发者把握这一趋势5 月 29 日阿里巴巴正式对外开源了基于 ACKEdge边缘集群托管服务的云原生边缘计算框架 —— 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 无缝融合。基于过往 ACKEdge 的线上运维经验我们开源了 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 WHATcmd/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: node2containers:- image: busyboxcommand:- topname: bbox
EOF
pod/bbox created
登陆到 node2 上将 Yurthub 的 --server-addr 参数设置为一个不可访问的地址
sudo sed -i s|--server-addr.*|--server-addrhttps://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。
Whats Next
Yurtctl 目标是成为运维人员管理 OpenYurt 集群的有力工具。因此我们会持续演进 Yurtctl 以支持 OpenYurt 的新功能和新增的运维流程或场景。例如不久之后 OpenYurt 还将开源 YurttunnelYurtunit 等组件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 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践做最懂云原生开发者的公众号。” 原文链接 本文为云栖社区原创内容未经允许不得转载。