KubeEdge环境搭建

  • 准备工作——K8s集群环境搭建
    • 准备开始
    • 配置国内镜像(仅amd64架构,如果是arm架构的不要更改镜像)
    • 安装docker
    • 安装K8s
    • 初始化Master节点
    • 网络插件安装
    • 部署可视化KuBoard
  • Cloud节点配置
  • Edge节点配置
    • 修改EdgeCore配置
  • 问题排查

准备工作——K8s集群环境搭建

官方文档:
使用Keadm进行部署

首先要配置好Kubernetes集群。

K8s需要全程在root用户下进行操作,因此需要先切换到root用户下:

sudo su

安装K8s一般使用kubeadm,官方文档:
kubeadm官方文档

按照官方文档进行安装

准备开始

  • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。
  • 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。
    CPU 2 核心及以上。
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
  • 开启机器上的某些端口。
  • 禁用交换分区。为了保证 kubelet 正常工作,你必须禁用交换分区。

禁用交换分区使用命令

 swapoff -a

但是重启机器后会失效,如果需要永久关闭需要编辑文件

 vi /etc/fstab

在里面注释掉最后一行(应该有swap字样,大概长这样/dev/mapper/cl-swap swap swap defaults 0 0),如果不含swap那就还是别乱注释,每次开机运行上面的命令关一下吧。

配置国内镜像(仅amd64架构,如果是arm架构的不要更改镜像)

首先使用以下命令进入root用户。

sudo su

先把原来的软件源备份一下

cp /etc/apt/sources.list /etc/apt/sources.list.bak

然后输入以下命令配置清华源镜像(适用于20.04版本的Ubuntu,其它版本可以去清华源镜像官网查看)

echo "# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse" > /etc/apt/sources.list

然后执行更新

apt update

安装docker

这一步很简单,只要输入docker,就会提示安装docker的命令。
使用

sudo apt install docker.io

安装K8s

安装K8s一般使用kubeadm,官方文档:
kubeadm官方文档
官方文档中给出的安装命令如下:

#请不要使用这段代码!
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

但是官方文档在国内网络环境下并不适用,请使用以下代码:

第一步是安装https

sudo apt-get update && sudo apt-get install -y apt-transport-https

但是,由于国内网络原因,无法连接Google,很可能第二步会卡死。

这里可以使用阿里云的镜像,把第二步的命令改为:

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

如果这里出错可能是你没有安装curl,先

apt install curl

然后运行:

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

修改完这个list文件后,更新一下apt-get的配置

apt-get update

下面这句就是安装kubelet,kubeadm,kubectl三个k8s的核心组件

# 如果需要指定版本,使用下一段的命令,此命令是默认安装最新版
apt-get install kubelet kubeadm kubectl

如果需要指定老版本,可以通过=<版本号>来指定版本,如下:

# 需要指定版本才使用下面的命令
apt install kubelet=1.22.15-00 kubectl=1.22.15-00 kubeadm=1.22.15-00

至此,kubelet,kubeadm和kubectl就安装成功了。

初始化Master节点

在准备工作全部完成后,就可以在主节点上使用kubeadm init命令,不过这里还要加三个参数,–image-repository指定了阿里云镜像,–pod-network-cidr指明pod网络可以使用的IP地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配CIDRs,–kubernetes-version指明k8s的版本:

kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.22.15

我这里出现了等待条件超时的错误:

解决方法是vim创建一个文件/etc/docker/daemon.json,里面输入

{"exec-opts": ["native.cgroupdriver=systemd"]
}

把docker的驱动配置为systemd,然后重启docker和kubelet:

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl restart kubelet

再运行kubeadm reset 和刚刚的kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.22.15 就成功了

成功之后会提示运行这三条命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

在root用户和普通用户下都要运行一遍,然后就配置成功了。

如果是root用户还可以执行一条

  export KUBECONFIG=/etc/kubernetes/admin.conf

网络插件安装

k8s支持的网络插件: https://kubernetes.io/docs/concepts/cluster-administration/addons/
我们使用flannel插件,但是由于kubeedge和网络插件不兼容,所以需要亲和性配置。
首先下载flannel插件的配置文件:

wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

下载下来后,复制一份kube-flannel-cloud.yaml修改其中:
在93行左右改名为kube-flannel-cloud-ds

在118行左右添加:

- key: node-role.kubernetes.io/agentoperator: DoesNotExist


然后再应用该配置文件:

kubectl apply -f kube-flannel-cloud.yml

过段时间后查看node状态可以看到master已经ready:

再复制一份kube-flannel-edge.yaml修改其中:
93行改名为kube-flannel-edge-ds
118行左右添加:

- key: node-role.kubernetes.io/agentoperator: Exists

并且我的边缘节点架构是arm64,所以也修改了一下

在161行左右添加一行参数:

- --kube-api-url=http://127.0.0.1:10550


然后再应用该配置文件:

kubectl apply -f kube-flannel-edge.yml

部署可视化KuBoard

Kuboard官网
提供的命令如下:

kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml

部署完成后,进入30080端口可以看到这个命令,运行

curl -k 'http://192.168.31.209:30080/kuboard-api/cluster/default/kind/KubernetesCluster/default/resource/installAgentToKubernetes?token=mFUwzGqKRFgHrT2rj328UeCZKjs0qrUW' > kuboard-agent.yaml
kubectl apply -f ./kuboard-agent.yaml

然后就可以看到集群信息了

Cloud节点配置

进入GitHub的release页面复制keadm的下载地址,使用wget命令下载:

wget https://github.com/kubeedge/kubeedge/releases/download/v1.12.0/keadm-v1.12.0-linux-amd64.tar.gz

解压下载好的文件

 tar -zxvf keadm-v1.12.0-linux-amd64.tar.gz

然后进入解压后的目录

 cd keadm-v1.12.0-linux-amd64/keadm/

然后运行下面的会出现问题,先不要运行
后面的参数是启用cloudCore的dynamicController

# 先不要运行,会出现问题,往下看
# ./keadm init --set cloudCore.modules.dynamicController.enable=true

出现问题:

execute keadm command failed:  timed out waiting for the condition

是因为cloudcore没有污点容忍,默认master节点是不部署应用的,可以用下面的命令查看污点:

kubectl describe nodes master2015 | grep Taints

把master的污点删掉

 kubectl taint node master2015 node-role.kubernetes.io/master-

然后

./keadm reset
./keadm init --set cloudCore.modules.dynamicController.enable=true

CloudCore成功启动。

查看kubeedge命名空间里的pods,可以看到cloudcore成功运行。

使用

./keadm gettoken

获取token

Edge节点配置

下载keadm,与上面Master的下载方法相同,解压完成后进入目录(我这里是arm,你们的目录不一定一样)

 cd keadm-v1.12.0-linux-arm64/keadm/

需要运行:(<ip>是master的ip,<token>就是上面获取的token)

./keadm join --cloudcore-ipport=<ip>:10000 --token=<token>

我这里是:

./keadm join --cloudcore-ipport=192.168.31.209:10000 --token=d593d53f0d1294c1088e8f3700dedc842fc9d276a0ab472397fdc5634463c921.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2Njc1NDMyNzl9.pdVbe-jpHXKcjiM9iIq-Rj6mS4_m6xyp7v2_fP8nXiA

在Master上验证是否成功,使用

kubectl get nodes -o wide

如果出现版本中带有kubeedge的node,则说明部署成功。

如果去主节点看还是没有,可以看日志寻找问题,见最后一章问题排查

修改EdgeCore配置

为了让flannel能够访问到 http://127.0.0.1:10550,我们需要配置EdgeCore的metaServer功能,在边缘节点上修改:

vim /etc/kubeedge/config/edgecore.yaml

在161行左右配置为true

然后重启一下edgecore:

service edgecore restart

问题排查

查看edgecore的日志:

journalctl -u edgecore.service -xe

我第一次失败的原因是Docker中Cgroup Driver的问题,因为kubeedge的默认驱动为cgroupfs,而我的docker以前把默认驱动改成了systemd,所以无法启动。
一种解决方法是修改/etc/docker/daemon.json,把 "exec-opts": ["native.cgroupdriver=systemd"]删掉(不要把大括号删掉,不然docker无法启动),重启docker

systemctl daemon-reload
systemctl restart docker

另一种解决方法是使用命令

./keadm join --help

可以看到帮助中提到:

可以运行join命令时指定该参数为systemd

如果重新join时,可能会提示要删除/etc/kubeedge目录,如果提示mqtt容器已经存在之类的问题,可以

1、杀死运行的容器:

docker kill $(docker ps -a -q)

2、删除所有容器:

docker rm $(docker ps -a -q)

最后再执行join命令,运行成功:

KubeEdge环境搭建(支持网络插件flannel)相关推荐

  1. K8s网络插件Flannel,Calico

    文章目录 一.K8s网络插件flannel与calico 1. k8s网络解决方案 容器虚拟化网络方案 基于隧道 基于路由 2. CNI(容器网络接口) flannel与calico 选型比较 3. ...

  2. Ubuntu环境搭建支持设备树,内核和根文件系统启动

    Ubuntu环境搭建支持设备树,内核和根文件系统启动 使用tftp获取设备树和内核文件 1.搭建TFTP服务器 sudo apt-get install tftp-hpa tftpd-hpa sudo ...

  3. Kubernetes网络插件flannel和calico

    网络插件flannel 跨主机通信的一个解决方案是Flannel,由CoreOS推出,支持3种实现:UDP.VXLAN.host-gw udp模式:使用设备flannel.0进行封包解包,不是内核原生 ...

  4. Kubernetes网络插件Flannel

    1.Kubernetes网络通信 (1) 容器间通信 同一个Pod内的多个容器间的通信, lo (2)Pod通信 Pod IP <-(直达)-> Pod IP 意思就是pod和pod之间使 ...

  5. 安装pod网络插件flannel

    官网地址 https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml 感觉网络这块有点复杂,抠脑壳 ...

  6. K8s NetworkPolicy与网络插件flannel、calico详细版

    Pod是Kubernetes调度的最小单元.一个Pod可以包含一个或多个容器,因此它可以被看作是内部容器的逻辑宿主机.Pod的设计理念是为了支持多个容器在一个Pod中共享网络和文件系统.那么为什么Po ...

  7. 3、kubeadm部署Kubernetes 网络插件flannel、Calico、weave 并设置集群角色

    Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展. Kubernetes不仅支持Docker,还支持Rocket,这是另一种容器技术. 使用Kubern ...

  8. 云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版

    前言: 前面写了一些关于calico的文章,但感觉好像是浅尝辄止,分散在了几篇文章内,并且很多地方还是没有说的太清楚云原生|kubernetes|kubernetes的网络插件calico和flann ...

  9. k8s安装网络插件-flannel

    在完成了k8s的集群部署后查看集群状态的话还不是ready的状态,所以需要安装网络插件来完成k8s的集群创建的最后一步. kube-flannel.yml文件在国外服务器上,搭建k8s集群时可以使用如 ...

最新文章

  1. 学习网络请求返回json对应的model
  2. python线程只能启动一次_python多线程只能运行一个线程的问题
  3. Jenkins 升级、迁移、备份
  4. 进程间通信——信号量及ipcs/ipcrm 介绍
  5. 【Arthas】Arthas thread查看线程信息
  6. queue,stack中的库函数
  7. 完整的Socket代码
  8. Linux突然无法使用,是内存不足的问题
  9. delphi 侧边栏_Delphi 开发工具各版本官方下载地址
  10. Win11 恢复设置Win10任务栏、快速启动栏及右键菜单(Win11 22000.100版本测试通过)
  11. matplotlib报错:Glyph 25151 (\N{CJK UNIFIED IDEOGRAPH-623F}) missing from current font. func(*args)
  12. 二级计算机合格,计算机二级考试合格的分数线
  13. TCP close-wait 状态分析
  14. 微信获取临时素材接口
  15. 汉字转拼音 python_python实现将汉字转换成汉语拼音的库
  16. 第12年双11|技术总指挥汤兴:淘宝确实变了
  17. 全世界199个国家首都经纬度
  18. 手把手教你Java/JDK安装与环境搭建
  19. 南方科技大学招计算机博后,南方科技大学何祝兵课题组招聘博后 年薪30万
  20. 运行fis3 server start --type smarty启动时,报错The “data“ argument must be of type string or an instance of

热门文章

  1. 产品概念之4/4:产品包 —— 升维思考,降维打击
  2. 解决windows 2003 sp1下安装arcsde 9.0 for sql server 2000 sp4概要方案
  3. 84个常用的数据源网站分享!(保持更新,建议收藏)
  4. 开关电源环路补偿设计及调节笔记
  5. Ubuntu18.04 LTS 安装 Synopsys VCS及一些问题
  6. 前端白屏问题_首页白屏优化实践
  7. 微信小程序开发—背景图片全屏(无白条)
  8. PS-实战-ICON图标
  9. 7-11 群发邮件 (10 分)
  10. The Matrix--庄生晓梦迷蝴蝶