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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介:     [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,一起打造更加易用的边缘云原生基础设施。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
109 17
|
1月前
|
Kubernetes Cloud Native Ubuntu
云原生之旅:Kubernetes集群搭建与应用部署
【8月更文挑战第65天】本文将带你进入云原生的世界,通过一步步指导如何在本地环境中搭建Kubernetes集群,并部署一个简单的应用。我们将使用Minikube和Docker作为工具,探索云原生技术的魅力所在。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和实践技巧。
|
16天前
|
存储 Kubernetes 负载均衡
掌握Kubernetes:从零到一的集群管理之旅
【10月更文挑战第18天】掌握Kubernetes:从零到一的集群管理之旅
42 0
|
3月前
|
存储 Kubernetes Cloud Native
云原生之旅:Kubernetes 集群部署实践
【8月更文挑战第4天】本文将带领读者进入云原生的世界,通过实战演练,深入理解如何在云端构建和部署一个 Kubernetes 集群。我们不仅会探讨理论知识,更会通过代码示例,手把手教你从零开始搭建自己的 Kubernetes 环境。无论你是云原生新手,还是希望加深对 Kubernetes 的理解,这篇文章都将是你的不二选择。
|
2月前
|
Kubernetes 监控 Cloud Native
云原生入门:Kubernetes 集群部署与管理
【8月更文挑战第38天】在数字化浪潮中,云原生技术如同翱翔的雄鹰,引领着企业飞向灵活高效的未来。本文将带你一探究竟,从Kubernetes的基础概念到实际操作,深入浅出地介绍如何在云端构建和管理你的容器化应用。我们将一步步搭建起一个小型的Kubernetes集群,并通过代码示例和图解,让你轻松掌握云原生世界的钥匙。让我们一起开启这趟技术之旅,探索云原生的秘密花园,找到那把打开创新之门的金钥匙。
|
3月前
|
Kubernetes Cloud Native 应用服务中间件
云原生入门:Kubernetes的简易部署与管理
【8月更文挑战第31天】在云计算的浪潮中,云原生技术如同星辰般熠熠生辉。它以容器、服务网格、微服务等为基石,构建起现代化的软件架构。本文将带你一探究竟,通过Kubernetes这个强大的平台,学习如何部署和管理你的应用。我们将手把手教你搭建一个简单的Kubernetes集群,并运行一个示例应用。准备好了吗?让我们启航,探索云原生的世界!
|
3月前
|
Kubernetes Cloud Native 应用服务中间件
云原生之旅:Kubernetes集群部署与应用管理
【8月更文挑战第28天】在这篇文章中,我们将一起探索云原生技术的奇妙世界,尤其是围绕Kubernetes这一核心组件。从搭建一个基本的Kubernetes集群开始,到运行和管理容器化应用,每一步都将是一次深入浅出的学习旅程。无论你是初学者还是有经验的开发者,本指南都旨在为你提供清晰的操作步骤和必要的理论知识,让你能够自信地管理和扩展你的云原生应用。让我们携手开启这场技术冒险,共同见证云原生带来的无限可能。
|
3月前
|
Kubernetes Cloud Native 应用服务中间件
云原生之旅:构建你的首个Kubernetes集群
【8月更文挑战第31天】在这个数字化迅速演进的时代,云原生技术如同星辰般璀璨。它不仅是企业数字化转型的引擎,更是开发者们探索创新的乐园。本文将带你开启一场云原生的奇妙旅程,从零开始,一步步构建属于你自己的Kubernetes集群。想象一下,当你的应用在云端自如地伸缩、滚动更新时,那份成就感和掌控感,是不是已经让你跃跃欲试了呢?那就让我们开始吧!
|
3月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群管理与应用部署
【8月更文挑战第31天】在数字化时代的浪潮中,云原生技术如Kubernetes已经成为推动企业IT架构转型的核心力量。本文将带领读者深入了解如何通过实践操作掌握Kubernetes集群的管理和应用部署,解锁云计算的无限可能。我们将从搭建一个简单的Kubernetes集群开始,逐步探索其丰富的功能和灵活的配置选项,最后通过实际案例展示如何在集群中部署和管理一个多容器的应用。无论你是云计算新手还是希望深化对云原生理解的开发者,这篇文章都将为你提供实用的知识和技能。
|
3月前
|
Kubernetes Cloud Native JavaScript
云原生之旅:Kubernetes 集群搭建与应用部署实践
【8月更文挑战第31天】云原生技术正在改变软件开发和运维的方式,而Kubernetes作为其核心组件之一,提供了一个强大的平台来编排容器化的应用。本文将引导你了解如何搭建一个基本的Kubernetes集群,并通过一个简单的Node.js应用示例,展示如何在集群中部署和管理应用。我们将从零开始,逐步构建起对Kubernetes的直观理解,并在实践中学习其核心概念。