KubeEdge从零开始详细搭建教程

系统架构

版本选择

Deploying using Keadm | KubeEdge一个支持边缘计算的开放平台

可参看上述链接,对kubeedge部署有一个大致的了解

我们在KubeEdge文档里查看Kubernetes兼容性信息,确定我们要安装的版本

kubeedge/kubeedge: Kubernetes Native Edge Computing Framework (project under CNCF) (github.com)

我这里选择KubeEdge1.10和Kubernetes1.22进行安装

安装Ubuntu22.04虚拟机

我们使用服务器版的Ubuntu22.04-server,在4台虚拟机上安装,一台作为云master,一台作为云node,另外两台作为edge-node,均使用ubuntu典型安装

主机名 硬盘 内存 CPU
master 40G 2G 双核
node 40G 2G 双核
edgenode1 40G 1G 双核
edgenode2 40G 1G 双核

安装时软件源改成国内的阿里云:

http://mirrors.aliyun.com

对每台虚拟机按照上表设置固定ip

vi /etc/netplan/00-installer-config.yamldhcp4: no    #  关闭动态IP设置,因为要设置固定IPaddresses: - 192.168.134.161/24 # 要设置为的固定IP,后面的24为子网掩码的位数gateway4: 192.168.134.2 # 要设置的网关地址nameservers:addresses: [192.168.134.2,114.114.114.114]    # 要设置的DNS地址sudo netplan apply # 使配置生效

所有主机关闭防火墙

sudo systemctl stop ufw
sudo systemctl disable ufw

注意,所有主机一定要关闭swap,否则会导致kubelet无法启动

# 查看swap分区情况
sudo swapon -s
# 临时关闭swap
sudo swapoff -a
# 永久禁用swap分区
sudo vi /etc/fstab
# 禁用swap分区那一行

所有虚拟机都设置时间同步为windows的时间,方便查看日志和调试

sudo apt install -y ntpdate
sudo ntpdate time.windows.com
sudo timedatectl set-timezone Asia/Shanghai

ubuntu默认没有安装selinux,所以不需要禁用selinux

启用ip转发

sudo vi /etc/sysctl.d/k8s.conf
# 写入以下内容
net.ipv4.ip_forward = 1
net.ipv6.ip_forward = 1
sudo sysctl --system  # 生效

在master节点添加hosts

# 在master添加hosts
sudo vi /etc/hosts
# 加入如下几行
192.168.134.161    master
192.168.134.162    node
192.168.134.163    edgenode1
192.168.134.164    edgenode2

安装docker

  • ubuntu的源里自带了docker.io,这个是Ubuntu维护的docker版本

  • docker官方维护的版本叫做docker-ce,这个版本比较新

我们选择安装docker官方的版本,可参考docker[官方文档](Install Docker Engine on Ubuntu | Docker Documentation),亲测速度还挺快的,也可以使用阿里云的国内源安装文档

记住,需要在所有4台节点上都安装docker-ce

卸载旧版

sudo apt-get remove docker docker-engine docker.io containerd runc

安装必要组件

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

增加docker官方仓库钥匙

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

加入docker官方仓库

echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装docker-ce

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

如果要安装指定版本的docker(如20.10.17版本)

sudo apt-get install docker-ce=20.10.17 docker-ce-cli=20.10.17 containerd.io docker-compose-plugin

最后,运行helloworld测试一下

sudo docker run hello-world

docker官方镜像仓库访问比较慢,可以使用阿里云加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://knjsrl1b.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装Kubernetes集群

根据阿里云的教程,在两台云主机上,使用阿里源安装kubelet,kubeadm和kubectl组件

sudo apt-get update && apt-get install -y apt-transport-https
sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
# 可先使用apt list kubelet -a 查看所有版本,再指定版本
sudo apt-get install -y kubelet=1.22.11-00 kubeadm=1.22.11-00 kubectl=1.22.11-00

在云master主机上使用kubeadm创建kubernetes集群,这里我们使用阿里云的镜像进行加速,这里kubeadm会安装和自己版本匹配的kubernetes

sudo kubeadm init \--apiserver-advertise-address=192.168.134.161 \--image-repository registry.aliyuncs.com/google_containers \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16

执行完毕会输出很多提示指令需要我们执行

Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.134.161:6443 --token d8zuir.ipdqfuxvk4jxa2hl \--discovery-token-ca-cert-hash sha256:4e90097fab2a4fbb45eedb2f02d5d196c6f86667545da14c4c377e7720316237

我们按照提示在普通用户下执行,这样kubectl就可以访问到本地的kube-api-server了

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

我们接着安装CNI网络插件,下载太慢了可以使用这个网站查询raw.githubusercontent.com的IP地址并且写入hosts文件。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

等待约半个小时,pod才下载完毕,执行kubectl get pods -n kube-system如果出现如下说明网络插件安装成功

...
kube-flannel-ds-hgn9l            1/1     Running   0          44m
...

在云的node主机上,执行上面提示的命令加入刚才创建的集群

sudo kubeadm join 192.168.134.161:6443 --token d8zuir.ipdqfuxvk4jxa2hl \--discovery-token-ca-cert-hash sha256:4e90097fab2a4fbb45eedb2f02d5d196c6f86667545da14c4c377e7720316237

过一会,在master主机上执行kubectl get nodes,如下则加入成功

juju@master:~/.kube$ kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   58m   v1.22.10
node     Ready    <none>                 13m   v1.22.10

在 Kubernetes 集群中创建一个 pod,验证是否正常运行

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        52m
service/nginx        NodePort    10.109.22.72   <none>        80:32081/TCP   9m59s

可以看到nginx暴露的端口号为32081,因此我们访问地址:http://192.168.134.161:32081或者http://192.168.134.162:32081均可以成功访问nginx首页

安装KubeEdge

kubeEdge和kubernetes类似,提供了keadm工具用来快速搭建kubeedge集群,我们可以提前在KubeEdge的github官网上面下载keadm1.10

wget https://github.com/kubeedge/kubeedge/releases/download/v1.10.0/keadm-v1.10.0-linux-amd64.tar.gz
# 同时提前下载kubeedge压缩包和校验文件
wget https://github.com/kubeedge/kubeedge/releases/download/v1.10.0/kubeedge-v1.10.0-linux-amd64.tar.gz
wget https://github.com/kubeedge/kubeedge/releases/download/v1.10.0/checksum_kubeedge-v1.10.0-linux-amd64.tar.gz.txt

云端安装

在mater节点上下载安装keadm

tar -xvf keadm-v1.10.0-linux-amd64.tar.gz
cp keadm-v1.10.0-linux-amd64/keadm/keadm /usr/bin/

避免下载过慢,将kubeedge-v1.10.0-linux-amd64.tar.gz文件和checksum_kubeedge-v1.10.0-linux-amd64.tar.gz.txt预先下载存放

sudo mkdir /etc/kubeedge/
sudo cp kubeedge-v1.10.0-linux-amd64.tar.gz /etc/kubeedge/
sudo cp checksum_kubeedge-v1.10.0-linux-amd64.tar.gz.txt /etc/kubeedge/

使用keadm安装kubeedge的云端组件cloudcore

sudo keadm init --advertise-address=192.168.134.161 --kubeedge-version=1.10.0

–advertise-address=xxx.xx.xx.xx 这里的xxx.xx.xx.xx换成你master机器的ip,可以是内网地址,也可以是公网ip地址,–kubeedge-version=1.10.0 意思是指定安装的kubeEdge的版本,如果你默认不指定那么keadm会自动去下载最新的版本。

注意,这个命令会下载很多github上的资源,很容易存在无法访问,可以使用这个网站查询raw.githubusercontent.com的IP地址并且写入hosts文件。

经过无数次的连接失败以后,终于成功了

juju@master:~$ sudo keadm init --advertise-address=192.168.134.161 --kubeedge-version=1.10.0
Kubernetes version verification passed, KubeEdge installation will start...
...
kubeedge-v1.10.0-linux-amd64/edge/edgecore
kubeedge-v1.10.0-linux-amd64/versionKubeEdge cloudcore is running, For logs visit:  /var/log/kubeedge/cloudcore.log
CloudCore started

我们可以看到cloudcore守护进程已经在运行了,cloudcore会监听本地的10000和10002端口

juju@master:~$ ps -ef|grep cloudcore
root      148617       1  0 02:26 ?        00:00:03 /usr/local/bin/cloudcore
juju      160793  135901  0 02:56 pts/3    00:00:00 grep --color=auto cloudcore

cloudcore可能不会自动启动,我们将其加入systemd自启动管理中

sudo cp /etc/kubeedge/cloudcore.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start cloudcore.service
sudo systemctl enable cloudcore.service

获得边缘设备接入的token

sudo keadm gettoken
3d68b3620337e71200fd622f35a537395362f48f0f371a67ec110950625ee508.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTU4MjQyODV9.ypZ8BopEyDCCgPE7ZHixmN0EpsFtmfXTzt8I2CkGk8U

边缘节点安装

在两个边缘节点上,按照上述规格安装好边缘节点操作系统,并且安装好docker-ce

下载解压安装keadm

tar -xvf keadm-v1.10.0-linux-amd64.tar.gz
sudo cp keadm-v1.10.0-linux-amd64/keadm/keadm /usr/bin/

避免下载过慢,将kubeedge-v1.10.0-linux-amd64.tar.gz文件和checksum_kubeedge-v1.10.0-linux-amd64.tar.gz.txt预先下载存放

sudo mkdir /etc/kubeedge/
sudo cp kubeedge-v1.10.0-linux-amd64.tar.gz /etc/kubeedge/
sudo cp checksum_kubeedge-v1.10.0-linux-amd64.tar.gz.txt /etc/kubeedge/

加入集群,keadm会安装edgecore和mqtt协议的实现软件mosquitto,mosquitto会监听localhost:1183端口

sudo keadm join --cloudcore-ipport=192.168.134.161:10000 --token=3d68b3620337e71200fd622f35a537395362f48f0f371a67ec110950625ee508.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTU4MjQyODV9.ypZ8BopEyDCCgPE7ZHixmN0EpsFtmfXTzt8I2CkGk8U

--cloudcore-ipport是边缘节点能访问的云master主机的IP端口号,--token是上面云matster生成的识别码

如果访问失败,同样去这个网站查询并且修改hosts文件

185.199.108.133 raw.githubusercontent.com

又经过很多次安装后,安装成功

...
kubeedge-v1.10.0-linux-amd64/edge/edgecore
kubeedge-v1.10.0-linux-amd64/versionKubeEdge edgecore is running, For logs visit: journalctl -u edgecore.service -xe

如果通过sudo systemctl status edgecore发现服务失败,使用journalctl -u edgecore.service -xe查看日志

排除错误:

init new edged error, misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"

解决方法,将dockers的cgroup驱动换成cgroupfs

sudo vi /etc/docker/daemon.json
# 加入"exec-opts": ["native.cgroupdriver=cgroupfs"],
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl restart edgecore

排除错误:

kubernetes.io/csi: CSIDriverLister not found on KubeletVolumeHost

删除crt文件,重新初始化

sudo rm /etc/kubeedge/ca/rootCA.crt
sudo rm /etc/systemd/system/edgecore.service
sudo systemctl stop edgecore
sudo keadm join --cloudcore-ipport=192.168.134.161:10000 --token=80f67e7d0dea3df9c2da155274dc6691002c9818d834a291a0cf77765cee073e.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTUzNDY0MDN9.ed9EH1Pw49SiYoKlyOOS52kcBRfCE-swg2SflfqvMLU

排除错误:

connect error: Network Error : dial tcp 127.0.0.1:1883: connect: connection refused

原来是mosquitto没有启动,启动一下

sudo systemctl start mosquitto
juju@edgenode1:~$ sudo netstat -tulpn | grep LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      710/sshd: /usr/sbin
tcp        0      0 127.0.0.1:1883          0.0.0.0:*               LISTEN      50096/mosquitto

排除错误:

Error: failed to get edge certificate from the cloudcore, error: Invalid authorization token

token过期了,重新获取token并且重新加入集群(检查一下token有没有复制错误,我就是把用户名也复制进去了,一直出错)

keadm reset --force
sudo rm /etc/kubeedge/ca/rootCA.crt
sudo rm /etc/systemd/system/edgecore.service
sudo systemctl stop edgecore
sudo keadm join --cloudcore-ipport=192.168.134.161:10000 --token=80f67e7d0dea3df9c2da155274dc6691002c9818d834a291a0cf77765cee073e.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTUzNDY0MDN9.ed9EH1Pw49SiYoKlyOOS52kcBRfCE-swg2SflfqvMLU

终于运行成功了!

juju@edgenode1:~$ sudo systemctl status edgecore
● edgecore.serviceLoaded: loaded (/etc/systemd/system/edgecore.service; enabled; vendor preset: enab>Active: active (running) since Wed 2022-06-15 08:07:09 UTC; 23s agoMain PID: 58687 (edgecore)
...

在master上查看

juju@master:~$ kubectl get nodes
NAME        STATUS   ROLES                  AGE   VERSION
edgenode1   Ready    agent,edge             16m   v1.22.6-kubeedge-v1.10.0
edgenode2   Ready    agent,edge             35s   v1.22.6-kubeedge-v1.10.0
master      Ready    control-plane,master   23h   v1.22.10
node        Ready    <none>                 23h   v1.22.10

参考文档

Deploying using Keadm | KubeEdge一个支持边缘计算的开放平台

kubeedge1.8.2安装+edgemesh配置 - 简书 (jianshu.com)

【最新版kubeEdge保姆级安装配置教程】kubeEdge v1.7使用keadm安装(半手动安装)_大宇醒言的博客-CSDN博客_kubeedge安装

【cs cd key】专题KubeEdge v1.4部署指南(实操)-木乌鸦 (muwuya.com)

KubeEdge部署(一) 2021-7-27_臭弟弟﹍的博客-CSDN博客_kubeedge部署

KubeEdge框架temperature测试demo部署_诺水城子的博客-CSDN博客

KubeEdge环境搭建-实现原理-官方计数器示例运行成功_Counter Demo_尖耳朵的阿凡达妹妹的博客-CSDN博客

kubernetes集群的服务器重启之后遇到的问题_linlin_1998的博客-CSDN博客

树莓派4B平台部署 kubeedge (cloudcore)+ isula_阿龙哥哥的博客-CSDN博客_kubeedge部署

KubeEdge1.10从零开始详细搭建教程相关推荐

  1. 收费短剧小剧场类影视小程序源码 支持多运营模式+详细搭建教程

    分享一个收费短剧小剧场类影视小程序源码,支持多种运营模式,支持影视剧集选择.单集付费.整部付费.开通会员等模式,源码包含完整前后端和详细搭建教程. 小程序源码下载地址:春哥技术博客获取

  2. php源码二次开发的技术,Thinkphp二次开发威客RW平台源码详细搭建教程(技术分享帖)-一颗优雅草科技yungui...

    Thinkphp二次开发威客RW平台源码详细搭建教程(技术分享帖)-一颗优雅草科技yungui原地址:这里不能发 应会员要求,本着互帮互助的原则,在这里出一套搭建教程. 首先 查看是否跟我的运行环境一 ...

  3. 最新易企秀h5场景秀制作源码 含几百套模板+详细搭建教程

    分享一个最新易企秀h5场景秀制作源码,含几百套模板和详细搭建教程,开发语言是PHP+MySQL,H5页面适合在微信朋友圈传播,传播能力较强. 企业及个人运用各种H5页面进行营销,用H5搭建的站点与应用 ...

  4. 看图猜成语小程序源码+详细搭建教程

    本小程序可开通流量主 ,后台可以自行设置关卡.等级.也可以一键部署, 开通流量主之后实现躺赚,你懂得. 个人号也可以开通,审核一次性必过. 类目选择 教育 小程序源码下载地址:(8条消息) 看图猜成语 ...

  5. 开源超级微同城系统源码 含完整程序代码包+数据库+详细搭建教程

    分享一个超级微同城系统源码,含完整程序代码包+数据库+详细搭建教程,源码开源可二开,功能基于微信公众号,做本地生活信息必备. 系统特色功能一览: 1.整合本地信息商家服务等资源,为本地用户提供多样化的 ...

  6. (已更新)看图猜成语小程序源码+详细搭建教程

    本小程序后台可以自行设置关卡.等级.也可以一键部署, 个人号也可以开通,审核一次性必过. 类目选择 教育 小程序源码下载地址:(已更新)看图猜成语小程序源码+详细搭建教程-小程序文档类资源-CSDN下 ...

  7. 家政公司微信小程序源码运营版 开源可二开 含详细搭建教程

    分享一个家政公司微信小程序源码完美运营版,代码开源可二开,含详细搭建教程,适合家政,保姆,保洁,维修等上门服务,含商户入驻功能. 源码下载地址:春哥技术博客-家政预约小程序源码

  8. mysql5.6.10安装图解_mysql安装图解mysql5.6.10安装详细图文教程.doc

    mysql安装图解mysql5.6.10安装详细图文教程.doc 还剩 11页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 图 21设 置完毕,按&q ...

  9. 新版带支付功能2021全新最火表情包小程序源码,无限裂变,斗图小程序,头像壁纸,外卖服务内附详细搭建教程

    内附详细搭建教程 1.全新表情包小程序已上线 2.增加外卖系统服务,进行进一步的扩展内容分销 3.独立后台系统,自己运营管理,广告位自己控制 4.流量主可以代开,小程序包通过审核,不通过不收钱 5.不 ...

最新文章

  1. Shuffle 相关
  2. mysql数据库引擎介绍
  3. sqlplus -prelim,sqplus区别
  4. 为@RequestMapping标注的方法扩展其传入参数
  5. 第 7 章 异常处理结构、代码测试与调试
  6. idea中开启Run Dashboard
  7. python中event的用法_Python编程之event对象的用法实例分析
  8. jQuery(一)、核心
  9. js元素事件绑定与解绑兼容代码
  10. GUI库:PyQt5
  11. HDU2008 数值统计【入门】
  12. windows 两条命令快速关闭 445等危险端口
  13. PairSCL:句子对级别的有监督对比学习方法
  14. 一款基于SpringCloudAlibaba从0到1手敲的商城项目mtg-shop
  15. 一键解决局域网共享(批处理)
  16. MusicStore-1 Code First 通过非迁移实现建立数据库
  17. 冬虫夏草之技术路线图之二【“术”——业务篇】
  18. 每日一佳——A Support Vector Method for Multivariate Performance Measures(Thorsten Joachims,ICML,2005)
  19. 苹果手机如何一键备份手机里的照片和视频?
  20. 大数据时代的信息茧房问题

热门文章

  1. HDU 5768 Lucky7 (中国剩余定理 + 容斥 + 快速乘法)
  2. 在CSS中创建径向菜单
  3. 下厨房的内容负责人潘小月演讲
  4. 旧电脑又卡又慢,一招解决!
  5. pd 生成mysql 脚本_powerdesigner 生成数据库脚本
  6. R语言爬取豆瓣图书Top250
  7. 微信小程序开发实验2
  8. 计算机测评,笔记本电脑评测
  9. 【Effective C++】item20: Prefer pass-by-reference-to-const to pass-by-value
  10. OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)