作者
梁豪,腾讯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
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路径>
其中:
- --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。
以上操作如有问题,可以加入到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
怎么办?
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-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
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!