KubeEdge1.10从零开始详细搭建教程
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从零开始详细搭建教程相关推荐
- 收费短剧小剧场类影视小程序源码 支持多运营模式+详细搭建教程
分享一个收费短剧小剧场类影视小程序源码,支持多种运营模式,支持影视剧集选择.单集付费.整部付费.开通会员等模式,源码包含完整前后端和详细搭建教程. 小程序源码下载地址:春哥技术博客获取
- php源码二次开发的技术,Thinkphp二次开发威客RW平台源码详细搭建教程(技术分享帖)-一颗优雅草科技yungui...
Thinkphp二次开发威客RW平台源码详细搭建教程(技术分享帖)-一颗优雅草科技yungui原地址:这里不能发 应会员要求,本着互帮互助的原则,在这里出一套搭建教程. 首先 查看是否跟我的运行环境一 ...
- 最新易企秀h5场景秀制作源码 含几百套模板+详细搭建教程
分享一个最新易企秀h5场景秀制作源码,含几百套模板和详细搭建教程,开发语言是PHP+MySQL,H5页面适合在微信朋友圈传播,传播能力较强. 企业及个人运用各种H5页面进行营销,用H5搭建的站点与应用 ...
- 看图猜成语小程序源码+详细搭建教程
本小程序可开通流量主 ,后台可以自行设置关卡.等级.也可以一键部署, 开通流量主之后实现躺赚,你懂得. 个人号也可以开通,审核一次性必过. 类目选择 教育 小程序源码下载地址:(8条消息) 看图猜成语 ...
- 开源超级微同城系统源码 含完整程序代码包+数据库+详细搭建教程
分享一个超级微同城系统源码,含完整程序代码包+数据库+详细搭建教程,源码开源可二开,功能基于微信公众号,做本地生活信息必备. 系统特色功能一览: 1.整合本地信息商家服务等资源,为本地用户提供多样化的 ...
- (已更新)看图猜成语小程序源码+详细搭建教程
本小程序后台可以自行设置关卡.等级.也可以一键部署, 个人号也可以开通,审核一次性必过. 类目选择 教育 小程序源码下载地址:(已更新)看图猜成语小程序源码+详细搭建教程-小程序文档类资源-CSDN下 ...
- 家政公司微信小程序源码运营版 开源可二开 含详细搭建教程
分享一个家政公司微信小程序源码完美运营版,代码开源可二开,含详细搭建教程,适合家政,保姆,保洁,维修等上门服务,含商户入驻功能. 源码下载地址:春哥技术博客-家政预约小程序源码
- mysql5.6.10安装图解_mysql安装图解mysql5.6.10安装详细图文教程.doc
mysql安装图解mysql5.6.10安装详细图文教程.doc 还剩 11页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 图 21设 置完毕,按&q ...
- 新版带支付功能2021全新最火表情包小程序源码,无限裂变,斗图小程序,头像壁纸,外卖服务内附详细搭建教程
内附详细搭建教程 1.全新表情包小程序已上线 2.增加外卖系统服务,进行进一步的扩展内容分销 3.独立后台系统,自己运营管理,广告位自己控制 4.流量主可以代开,小程序包通过审核,不通过不收钱 5.不 ...
最新文章
- Shuffle 相关
- mysql数据库引擎介绍
- sqlplus -prelim,sqplus区别
- 为@RequestMapping标注的方法扩展其传入参数
- 第 7 章 异常处理结构、代码测试与调试
- idea中开启Run Dashboard
- python中event的用法_Python编程之event对象的用法实例分析
- jQuery(一)、核心
- js元素事件绑定与解绑兼容代码
- GUI库:PyQt5
- HDU2008 数值统计【入门】
- windows 两条命令快速关闭 445等危险端口
- PairSCL:句子对级别的有监督对比学习方法
- 一款基于SpringCloudAlibaba从0到1手敲的商城项目mtg-shop
- 一键解决局域网共享(批处理)
- MusicStore-1 Code First 通过非迁移实现建立数据库
- 冬虫夏草之技术路线图之二【“术”——业务篇】
- 每日一佳——A Support Vector Method for Multivariate Performance Measures(Thorsten Joachims,ICML,2005)
- 苹果手机如何一键备份手机里的照片和视频?
- 大数据时代的信息茧房问题
热门文章
- HDU 5768 Lucky7 (中国剩余定理 + 容斥 + 快速乘法)
- 在CSS中创建径向菜单
- 下厨房的内容负责人潘小月演讲
- 旧电脑又卡又慢,一招解决!
- pd 生成mysql 脚本_powerdesigner 生成数据库脚本
- R语言爬取豆瓣图书Top250
- 微信小程序开发实验2
- 计算机测评,笔记本电脑评测
- 【Effective C++】item20: Prefer pass-by-reference-to-const to pass-by-value
- OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)