Addon SuperEdge 让原生 K8s 集群可管理边缘应用和节点
为了做好运维面试路上的助攻手,特整理了上百道。
- –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 的最低要求[2] ,最低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 命令;
边缘节点加入原有集群
在边缘节点上下载 edgeadm 静态安装包
,或者通过其他方式把 edgeadm 静态安装包上传到边缘节点,然后在边缘节点上执行得到的 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[3]、Google论坛[4]、微信群[5]和我们进行交流,也可在社区提Issues[6]给我们反馈。
实现原理
主要步骤
其实 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 都会签如下几个地址:
kubernetes
kubernetes.default
kubernetes.default.svc
kubernetes.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 项目[7],欢迎共建边缘计算,参与SuperEdge开源项目的建设,让您开发的边缘能力惠及更多人。以下是 SuperEdge 开源项目的微信群,欢迎参与交流讨论。
SuperEdge版本:
TKE Edge相关文章:
- 腾讯云联合多家生态伙伴,重磅开源 SuperEdge 边缘容器项目
- 【TKE 边缘容器系列】用 edgeadm 一键安装边缘 K8s 集群和原生 K8s 集群
- **【TKE 边缘容器系列】**打破内网壁垒,从云端一次添加成百上千的边缘节点
- **【TKE 边缘容器系列】**云边隧道新特性:从云端SSH运维边缘节点
- 【TKE 边缘容器系列】一文读懂 SuperEdge 边缘容器架构与原理
- 【TKE 边缘容器系列】一文读懂 SuperEdge 分布式健康检查边端
- 【TKE 边缘容器系列】一文读懂 SuperEdge 拓扑算法
- 【TKE 边缘容器系列】一文读懂 SuperEdge 云边隧道
落地案例相关资料:
- 腾讯 WeMake 工业互联网平台的边缘容器化实践:打造更高效的工业互联网
- 完爆!用边缘容器,竟能秒级实现团队七八人一周的工作量
- 基于边缘容器技术的工业互联网平台建设
- 使用 TKE Edge 部署 EdgeX Foundry
参考资料
[1]
一键安装边缘 Kubernetes 集群: 【https://github.com/superedge/superedge/blob/main/docs/installation/install_edge_kubernetes_CN.md】
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。
本份面试集锦涵盖了
- 174 道运维工程师面试题
- 128道k8s面试题
- 108道shell脚本面试题
- 200道Linux面试题
- 51道docker面试题
- 35道Jenkis面试题
- 78道MongoDB面试题
- 17道ansible面试题
- 60道dubbo面试题
- 53道kafka面试
- 18道mysql面试题
- 40道nginx面试题
- 77道redis面试题
- 28道zookeeper
总计 1000+ 道面试题, 内容 又全含金量又高
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
5、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-ezTTYZH9-1712820441533)]
更多推荐
所有评论(0)