作者

梁豪,腾讯TEG工程师,云原生开源爱好者,SuperEdge 开发者,现负责TKEX-TEG容器平台运维相关工作。

王冬,腾讯云TKE后台研发工程师,专注容器云原生领域,SuperEdge 核心开发人员,现负责腾讯云边缘容器TKE Edge私有化相关工作。

李腾飞,腾讯容器技术研发工程师,腾讯云TKE后台研发,SuperEdge核心开发成员。

Addon SuperEdge让原生K8s集群可管理边缘应用和节点视频链接

边缘能力

先说说 Addon SuperEdge 后,您的普通 Kubernetes 集群将具备哪些能力:

既能管理中心应用和节点,也能管理边缘应用和节点

可以用一个Kubernetes集群管理中心的应用和节点,也可以同时管理边缘的应用和节点,使用上没有任何区别。此设计将Kubernetes分布式的逻辑概念和实际IDC机房的物理位置完美契合,实现真正意义的云边一朵云。

能Join任意位置的节点

只要节点能访问到kube-apiserver,无论节点位于哪里,或以怎么的状存在,一个edgeadm join命令就能将节点加入到中心集群。用一个Kubernetes集群就可以统一管理各个地方的机器,汇聚各个IDC机房的算力,将机器的利用率发挥到极致

同时管理数十个边缘网点,并具备灰度能力

SuperEdge 的 ServiceGroup 设计,一个应用只要提交一次,就能同时部署到数十个网点,并且在各个网点内实现流量闭环,而且允许各个网点在基础应用的基础上有差异,无论灰度,还是差异化配置都可以支持。

边缘节点具备边缘自治能力

边缘节点和 kube-apiserver 之间网络情况不可预测,可能是专线,也可能是WIFI,公网和内网可能都存在。SuperEdge 让边缘节点即使云边断网也不影响边缘的服务,就是断电重启,边缘服务也能被正常拉起。

Addon SuperEdge的边缘能力

安装条件

  • 用户已有 Kubernetes 集群,所有 kube-controller-manager 已开启

    --controllers=*,bootstrapsigner,tokencleaner

    参数

    • 目前仅支持通过 kubeadm 搭建的 Kubernetes 集群,其他方式搭建的 Kubernetes 集群并不是不支持,而是可能会有兼容性问题,可看原理部分;
    • 要是没有 kubeadm 搭建的 Kubernetes 集群,可用edgeadm init一键创建一个原生的Kubernetes 集群,可参考: 用edgeadm一键创建边缘k8s集群或原生k8s集群;
  • 支持的 Kubernetes 版本:v1.16~v1.19,edgeadm 提供的安装包是 Kubernetes v1.18.2 版本;

    • 用户需要考虑边缘节点kubelet和原始 Kubernetes 版本的兼容性,统一最好;
    • 其他 Kubernetes 版本可参考 一键安装边缘Kubernetes集群中的 5. 自定义 Kubernetes 静态安装包,自行制作。

下载 edgeadm 静态安装包

在任意一个 Master 节点上下载 edgeadm 静态安装包,并拷贝到准备加入集群的边缘节点中。

arch=amd64 version=v0.4.0 && rm -rf edgeadm-linux-* && wget https://superedge-1253687700.cos.ap-guangzhou.myqcloud.com/$version/$arch/edgeadm-linux-$arch-$version.tgz && tar -xzvf edgeadm-linux-* && cd edgeadm-linux-$arch-$version && ./edgeadm

目前支持目前支持 [[amd64, arm64], 两个体系,下载自己机器对应的体系结构, 其他体系可自行编译edgeadm和制作相应体系安装包,具体可参考 一键安装边缘 Kubernetes 集群中的5. 自定义Kubernetes静态安装包

Addon SuperEdge

在原有集群任意一个 Master 节点上 addon 边缘能力组件

./edgeadm addon edge-apps --ca.cert <集群 CA 证书地址> --ca.key <集群的 CA 证书密钥路径> --master-public-addr <Master节点外网IP/Master节点内网IP/域名>:<Port>

其中:

  • --ca.cert: 集群的 CA 证书路径,默认 /etc/kubernetes/pki/ca.crt
  • --ca.key: 集群的 CA 证书密钥路径,默认 /etc/kubernetes/pki/ca.key
  • --master-public-addr:是边缘节点访问 kube-apiserver服务的地址,默认为 <Master节点内网IP>:<端口>

如果edgeadm addon edge-apps过程没有问题,终端会输出印如下日志:

...
I0606 12:52:51.976165   26593 deploy_tunnel.go:35] Deploy tunnel-coredns.yaml success!
Create tunnel-cloud.yaml success!

执行过程中如果出现问题会直接返回相应的错误信息,并中断边缘组件的安装,可使用./edgeadm detach命令卸载边缘组件恢复集群。

./edgeadm detach edge-apps --ca.cert <集群 CA 证书地址> --ca.key <集群的 CA 证书密钥路径>

到此原有的 Kubernetes 集群就变成了一个既能管理云端应用,也能下发和管理边缘应用的 Kubernetes。

Join边缘节点

安装条件

边缘节点遵循 kubeadm 的最低要求 ,最低2C2G,磁盘空间不小于1G;

⚠️注意:尽可能提供干净的机器,避免其他因素引起安装错误。要有机器上有容器服务在安装过程中可能会被清理,请在执行之前细心确认

创建 Join 边缘节点的 token

边缘能力组件 addon 成功后,Join 边缘节点和 kubeadm 的用法类似,可执行以下命令获取:

./edgeadm token create --print-join-command 

如果执行过程中没有问题,终端会输出 Join 的命令

...
edgeadm join <Master节点内网IP>:Port --token xxxx \--discovery-token-ca-cert-hash sha256:xxxxxxxxxx 

提示:创建 token 的有效期和 kubeadm 一样是24h,过期之后可再次执行上述命令获取Join 命令;

边缘节点加入原有集群

在边缘节点上下载 2.<2>.中的 edgeadm 静态安装包,或者通过其他方式把 edgeadm 静态安装包上传到边缘节点,然后在边缘节点上执行3.<2>得到的 Join 命令:

./edgeadm join <Master 节点外网 IP/Master 节点内网IP/域名>:Port --token xxxx \--discovery-token-ca-cert-hash sha256:xxxxxxxxxx --install-pkg-path <edgeadm Kube-*静态安装包地址/FTP路径> 

注意:可以把edgeadm create token --print-join-command打印的 join 提示命令kube-apiserver的服务地址,视情况换成Master节点外网IP/Master节点内网IP/域名,主要取决于想让边缘节点通过外网还是内网访问 kube-apiserver 服务,默认输出的 Master 节点内网 IP。

其中:

  • --install-pkg-path: Kubernetes 静态安装包的路径;
  • <Master节点外网IP/Master节点内网IP/域名>:Port 是边缘节点访问 kube-apiserver 服务的地址

要是执行过程中没有问题,新的 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.

执行过程中如果出现问题会直接返回相应的错误信息,并中断节点的添加,可使用./edgeadm reset命令回滚加入节点的操作,重新 Join。

提示:边缘节点 join 成功后都会被打上标签: superedge.io/edge-node=enable,方便后续应用通过 nodeSelector 选择应用调度到边缘节点;

以上操作如有问题,可以加入到SuperEdge的Slack、Google论坛、微信群和我们进行交流,也可在社区提Issues给我们反馈。

实现原理

主要步骤

其实Addon SuperEdge 实现的原理很简单,主要分为两步:

  • 第一步:Addon SuperEdge 的边缘能力组件;
  • 第二步:准备边缘节点 Join 进原生 Kubernetes 集群所需要的配置;

第一步没有什么可细说的,就是把边缘能力组件以 Addon 的方式部署进原生的 Kubernetes 集群,用户也可以很方便的用edgeadm detach把 SuperEdge 边缘能力组件卸载掉。

关键是第二步:把边缘节点 Join 进原生的 Kubernetes 集群,面对的问题如下:

1. kube-apiserver 证书处理

原生 Kubernetes 集群的 Kube-apiserver 服务端证书也许并没有签订外网IP或者外网的访问的域名,那么边缘节点如何以公网IP访问 Kube-apiserver?

2. 用户的 Kubernetes 集群不是 Kubeadm 搭建的

要是用户的 Kubernetes 集群不是 Kubeadm 搭建的,根本没有 kubeadm-config、kubelet-config、cluster-info 等等的配置信息,那么又如何把边缘节点 Join 进去?

3. 用户的 Kubernetes 集群是 kubeadm 搭建的

要是用户的 Kubernetes 集群是 kubeadm 搭建的,边缘节点如何以公网 Join 进用户的 Kubernetes,如何保证对用户原 Join 普通节点不受影响? ……

所以说实现 Addon Superedge 核心不在 Addon SuperEdge 的边缘能力组件,而是如何把边缘节点 Join 进用户原先的 Kubernetes 集群,又不对用户的 Kubernetes 集群有什么影响。

设计实践

整体的实现思路是为用户任何方式搭建的 Kubernetes 集群准备好 Kubeadm 方式Join节点的配置,然后把边缘节点像 Kubeadm join 一样 Join 进去

1. kube-apiserver 证书处理

对 kube-apiserver 我们并没有更换用户原 Kubernetes 集群证书和重启 kube-apiserver,那么我们是如何实现让边缘节点通过公网添加进用户的 Kubernetes 集群的? 答案是通过写边缘节点 hosts。一般 Kubernetes 集群的 kube-apiserver 都会签如下几个地址:

kuberneteskubernetes.defaultkubernetes.default.svckubernetes.default.svc.cluster.local

在用户执行 Join 命令的时候:

./edgeadm join<Master节点外网 IP/Master 节点内网IP/域名>:Port ...

我们给边缘节点了句hosts:

Master 节点外网IP/Master节点内网 IP kubernetes.default

然后边缘节点访问云端 kube-apiserver 都是通过kubernetes.default:Port, 既绕过了 kube-apiserver 证书没有签公网IP的问题,也成功把边缘 Join 到了用户的 Kubernetes 集群。对于域名,我们不会写 hosts, 所以用户需要注意给定的域名是否在 Kube-apiserver 的证书中已经签定了。 要是用户的 Kube-apiserver 证书中没有签订kubernetes.default怎么办?

那用户 Join 边缘节点的时候就不能给IP了,只能用域名,需要保证给定的域名自己 kubernetes 的 kube-apiserver 证书已经签订了该地址,并且边缘节点能够访问到。

2. 用户的 Kubernetes 集群不是 Kubeadm 搭建的

处理办法是不是Kubeadm搭建的就把他变成Kubeadm搭建的, 只要把 kubeadm join 需要的信息备全,那么就可以通过类似 kubeadm join 的方式将边缘节点加入集群。具体实现是在执行edgeadm addon edge-apps安装部署边缘组件的阶段把 edgeadm join 边缘节点的条件准备好,典型的有如下条件:

  • 创建 kube-public 命名空间以及该命名空间下 cluster-info的 ConfigMap
  • 创建存在 kube-system 命名空间下的 kubeadm-config 和 kubelet-config 的 ConfigMap
  • 创建边缘节点加入集群时 kubelet 访问上述 ConfigMap 和集群其它资源所需要的 RBAC 权限

3. 用户的 Kubernetes 集群是 kubeadm 搭建的

我们在执行edgeadm addon edge-apps会对需要添加的 ConfigMap 进行检测,要是用户的集群信息已经存在就不在添加,直接用户的。 要是用户 kubeadm 搭建的集群信息,比如 cluster-info 的 ConfigMap,不够我们用,我们自己会生成一个新的避免更改和覆盖用户原来的。

集群经过了上述配置,边缘节点就可以使用edgeadm join命令加入集群,其他更详细的处理请查看源码edgeadm addon edge-apps的详细处理。

合作和开源

TKE Edge 边缘容器管理服务的边缘计算能力核心组件已经开源到 SuperEdge 项目,欢迎共建边缘计算,参与SuperEdge 开源项目的建设,让您开发的边缘能力惠及更多人。以下是 SuperEdge 开源项目的微信群,欢迎参与交流讨论。

SuperEdge版本:
  • SuperEdge-V0.4.0
  • SuperEdge-V0.3.0
  • SuperEdge-V0.2.0
TKE Edge相关文章:
  • SuperEdge 开源项目
  • 腾讯云联合多家生态伙伴,重磅开源 SuperEdge 边缘容器项目
  • 【TKE 边缘容器系列】用 edgeadm 一键安装边缘 K8s 集群和原生 K8s 集群
  • 【TKE 边缘容器系列】从0到N了解 SuperEdge,这些干货一定要看!【18篇干货合集】
  • 【TKE 边缘容器系列】打破内网壁垒,从云端一次添加成百上千的边缘节点
  • 【TKE 边缘容器系列】SuperEdge 云边隧道新特性:从云端SSH运维边缘节点
  • 【TKE 边缘容器系列】一文读懂 SuperEdge 边缘容器架构与原理
  • 【TKE 边缘容器系列】一文读懂 SuperEdge 分布式健康检查边端
  • 【TKE 边缘容器系列】一文读懂 SuperEdge 拓扑算法
  • 【TKE 边缘容器系列】一文读懂 SuperEdge 云边隧道
落地案例相关资料:
  • 腾讯WeMake工业互联网平台的边缘容器化实践:打造更高效的工业互联网

  • 完爆!用边缘容器,竟能秒级实现团队七八人一周的工作量

  • 基于边缘容器技术的工业互联网平台建设

  • 使用TKE Edge部署EdgeX Foundry

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

Addon SuperEdge 让原生 K8s 集群可管理边缘应用和节点相关推荐

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

    作者| 郑超 阿里云高级开发工程师 随着物联网技术以及 5G 技术的高速发展,将云计算的能力延伸至边缘设备端,并通过中心进行统一交付.管控,已成为云计算的重要发展趋势.为服务更多开发者把握这一趋势,5 ...

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

    作者| 郑超 阿里云高级开发工程师 随着物联网技术以及 5G 技术的高速发展,将云计算的能力延伸至边缘设备端,并通过中心进行统一交付.管控,已成为云计算的重要发展趋势.为服务更多开发者把握这一趋势,5 ...

  3. KubeOperator总体介绍(K8S集群部署管理工具)

    总体介绍⚓︎ KubeOperator 是一个开源的轻量级 Kubernetes 发行版,专注于帮助企业规划.部署和运营生产级别的 Kubernetes 集群. KubeOperator 提供可视化的 ...

  4. k8s集群flannel问题之telnet node节点开放端口Connect timeout情况

    前段时间在腾讯云clb上面的端口健康检测突然出现一堆异常,去手动检测时现实一切正常.去咨询了腾讯云工程师,他们对于端口检测处理方式是设置sysctl.conf中的几个参数,参数如下 net.ipv4. ...

  5. 从零开始在ubuntu上安装和使用k8s集群及报错解决

    文章目录 安装docker 安装kubernetes 配置k8s集群 配置虚拟机网络 配置Master节点的k8s网络 拉取k8s需要的镜像 启动 kubeadm 和 kubelet 配置 node节 ...

  6. kubeadm 安装 k8s 集群

    文章目录 环境 三台 CentOS Version Ready 关闭所有防火墙 禁用 Selinux 关闭 swap 加入 host 信息 相关组件安装 Docker 安装 `kubelet`.`ku ...

  7. Centos7 安装部署Kubernetes(k8s)集群过程

    1.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.9 Docker version 20.10.12 x86_64 2.前言 如下图描述了软件部 ...

  8. 使用kubeadm安装k8s集群的完整步骤(k8sv15.1)

    一.创建虚拟机 首先使用vmware15 pro创建了4台centos7虚拟机,其中,3台用来组建k8s集群,1台为master节点,2台为node节点, 剩下的一台用来安装harbor配置私有仓库( ...

  9. 使用rke安装高可用k8s集群

    文章目录 使用rke安装高可用k8s集群 rke 增加和移除节点 彻底清理rke节点 使用rke安装高可用k8s集群 服务器rke集群节点角色规划 用户 主机名 内网IP SSH端口 系统 rke 角 ...

最新文章

  1. html的css样式中表示后代选择器,html添加css——样式选择器
  2. 几个ARX取CAD窗口句柄的函数
  3. XenServer中Windows 7与XP多vCPU支持配置
  4. Pandas 基础(8) - 用 concat 组合 dataframe
  5. NET 6 中新增的LINQ 方法
  6. python 内存管理
  7. Java 在「权力的游戏」里,能活到第几集?
  8. android自定义按钮控件样式
  9. 怎么把OFD文件转换成PDF文件?
  10. app漏洞扫描原理_APP漏洞如何检测,如何检测出app有漏洞?
  11. 《从零开始做运营》心得
  12. php访问微信云数据库,第三方服务器php获取微信小程序云开发access_token和云数据库...
  13. matlab自带的音乐,MATLAB乐器(如何用matlab演奏音乐)
  14. 古巴比伦理财五大金科定律
  15. 【线程知识点】-- 自旋锁
  16. 【游戏建模全流程】Maya风格化模型制作教程
  17. cnpm的安装(超级详细版)
  18. [原创]一种复制多轨加密VCD光盘(无文件怪碟)的心得
  19. 阿里云应用实时监控服务ARMS接入
  20. Smith(史密斯)数的求法

热门文章

  1. r语言绘制精美pcoa图_「R」数据可视化5:PCA和PCoA图
  2. HDU 4125 Moles 线段树+KMP
  3. 详解数据结构课程设计———运动会分数统计
  4. Thinkpad E450 黑苹果OpenCore引导驱动包(macOS BigSur 99%完美版)
  5. 机器学习从入门到创业手记-应用与实践
  6. 机载激光雷达的应用现状及发展趋势
  7. 逻辑的计算进路--从莱布尼茨到图灵的逻辑发展
  8. copy-to-clipboard 复制
  9. ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version 36
  10. 区块链是什么?简单理解区块链