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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Cloud Native 网络协议 数据中心
Overlay网络与Underlay网络:深入探索与全面对比
在当今云原生的世界中🌍☁️,网络是构建和维护任何分布式系统的基石💎。了解Overlay网络和Underlay网络及其之间的区别🔍,对于设计高效、可扩展的云原生应用至关重要🚀。本文旨在全面解析Overlay和Underlay网络,揭示它们的工作原理、优缺点,并说明何种情况下应该使用哪一种网络📚。
Overlay网络与Underlay网络:深入探索与全面对比
|
Kubernetes 安全 Docker
如何在 K8S 集群范围使用 imagePullSecret?
如何在 K8S 集群范围使用 imagePullSecret?
|
9月前
|
人工智能 编解码 算法
全球顶级赛事实践:视频云制播在奥运赛事的关键技术与创新
本次分享主题为“全球顶级赛事实践:视频云制播在奥运等体育赛事的关键技术与创新”。内容涵盖视频云制播的整体技术框架、AI技术重构体育赛事全链路、视频云制播+AI的技术创新与应用、未来展望,以及央视频在奥运等赛事中的成功实践。通过阿里云和央视频的合作,展示了多语种解说、多视角同步、智能媒资管理等技术创新,提升了观众的观赛体验,并推动了体育赛事转播的智能化发展。
388 0
|
设计模式 安全 算法
【Java面试题汇总】设计模式篇(2023版)
谈谈你对设计模式的理解、七大原则、单例模式、工厂模式、代理模式、模板模式、观察者模式、JDK中用到的设计模式、Spring中用到的设计模式
【Java面试题汇总】设计模式篇(2023版)
|
JSON Kubernetes 数据格式
crictl 常见的命令大全
crictl(Container Runtime Interface Command Line Interface)是一个命令行工具,用于与符合Kubernetes容器运行时接口(CRI)规范的容器运行时进行交互。它提供了一系列命令来查看和管理容器、镜像、Pod等资源。以下是crictl的一些常见命令及其功能概述: ### 1. 镜像管理 * **查看镜像**: - `crictl images`:列出所有镜像。 - `crictl images | grep <image-name>`:查看特定镜像。 * **拉取镜像**: - `crictl pull <image_na
4761 9
【Simulink】单相电压型全桥逆变电路仿真基础实验(方波信号)
【Simulink】单相电压型全桥逆变电路仿真基础实验(方波信号)
1853 0
|
Linux
centos7升级内核到最新稳定版
centos7升级内核到最新稳定版
1897 0
|
机器学习/深度学习 人工智能 算法
【AI】从零构建深度学习框架实践
【5月更文挑战第16天】 本文介绍了从零构建一个轻量级的深度学习框架tinynn,旨在帮助读者理解深度学习的基本组件和框架设计。构建过程包括设计框架架构、实现基本功能、模型定义、反向传播算法、训练和推理过程以及性能优化。文章详细阐述了网络层、张量、损失函数、优化器等组件的抽象和实现,并给出了一个基于MNIST数据集的分类示例,与TensorFlow进行了简单对比。tinynn的源代码可在GitHub上找到,目前支持多种层、损失函数和优化器,适用于学习和实验新算法。
405 2
|
存储 Kubernetes 应用服务中间件
大白话说明白K8S的PV / PVC / StorageClass(理论+实践)
本文主要通过大白话说明白PV、PVC的概念和原理,再说说StorageClass的作用,最后通过实践加深理解。
大白话说明白K8S的PV / PVC / StorageClass(理论+实践)