(注:本贴为记录贴,仅记录做这个实验时的完整的整个过程,非教程!里面从零开始把我遇到的各种坑以及解决方法全贴上来了)
任务要求:
1. 3台机器,一台安装k8s,两台安装Kubeedge
2. 发布一个pipeline任务,分别运行在两个端上(运行时间足够长)
3、断开k8s与其它两个机器的网络
4、在另外两台机器上模拟进程失效,观察现象
5、在断网条件下是否可以直接给kubeedge发送新指令
虚拟机环境:
ubuntu server 22.04,2C4G,30GB:k8s
ubuntu server 22.04,1C2G,30GB:kubeedge
ubuntu server 22.04,1C2G,30GB:kubeedge
网卡1(公网):NAT模式
网卡2(内网):
点击界面最下方的 “添加...” 按钮。
选中 “网络适配器”,点“完成”。
此时左侧会多出一个“网络适配器 2”。点击它,在右侧选中 “LAN 区段”。
点击下方的 “LAN 区段...” 按钮 -> 点 “添加” -> 取名为 edge-net -> 点“确定”。
最后,确保这块新网卡的下拉菜单里选中了刚建的 edge-net。

配置LAN:
Master: 192.168.1.10
Edge-node1: 192.168.1.20
Edge-node2: 192.168.1.30
为ens34配置IP地址:
打开配置文件:sudo vi /etc/netplan/00-installer-config.yaml
按 i 进入编辑模式,按照下面的格式修改:

3. 保存退出:按 Esc,输入 :wq 并回车。
4. 应用并生效:sudo netplan apply
三台服务器都配置好LAN后可检查一下是否能ping通:

永久关闭swap:


关闭休眠功能,省得ssh连接总是需要重连:

sudo vi /etc/ssh/sshd_config

安装容器运行时(containerd):




master节点安装k8s核心三件套:

初始化master节点:




在执行第二步时出现问题,containerd 的配置文件里,写死了去国外的 registry.k8s.io 去拉取 pause 镜像,需要强行把 containerd 配置文件里的那个“国外地址”改成“阿里云地址”:

master节点安装网络插件:


注意,安装插件时需要等待一段时间,可以用kubectl get pods --all-namespaces命令查看目前状态:

在master上部署cloudcore:


第三步因为没有路径导致执行不成功,应加上路径:

使master主机能运行cloudcore pod:


反复失败,最终成功是:


在master节点获取token:

获取到的token为:cef8a9e4b9cca60e41c967490c5c63eda8836948fb8d432bb7b3d4fd234466b6.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NzY1MTEwNzd9.UBQtcEKc74VSQYPGcLiYtDEIitKOgDAQY95_9UJ6p78
两个edge节点安装keadm:


第三步失败,源的问题,换源:

再次失败,containerd的问题:



还是失败!应该走内网:


还未准备好:


上述步骤搞不定(github网络问题),从master主机上下载:


上述命令不行,换下面的:


还是不行,一直卡在terminating状态,强制删除一下:

还不行,再来:

还是不行!接着解决:



终于解决了!!!!!:

使edge节点运行计数器程序:



很久没创建成功,推测是源的问题,进行修改:


还是没解决,到edge node查看情况,打印日志,发现:



edge不把真正的报错信息发给master,master那边describe根本不知道具体原因。
大功告成!:

但是master那边看不到,connection refused,去edge那边:


现在开始进行断网实验:

edge-1节点任务仍在运行:

master这边edge-1节点已经notready了

但pods仍显示running,原因如下:

现在模拟进程失效实验:

第一行命令搜不到,换成下面这个:


节点重新起来了:

master节点在断网条件下发送新指令,将5秒一条改成15秒一条:


edge1(还是5秒一条):

edge2(没有立刻把老员工杀掉,而是新的跑起来之后再杀掉):


最后一步,把edge1重新联网!:


edge1上的pod被毁尸灭迹了!现在两个pod都跑在edge2上了!


解释:

让pod重新跑在edge1上:



成功!