作者
梁豪,腾讯 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 开源我的项目的微信群,欢送参加交换探讨。
<img src=”https://main.qcloudimg.com/raw/4a030d87d4bf0ed268edd96f8f38f1af.png” style=”zoom:50%;” />
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
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!