KubeEdge1.10从零开始详细搭建教程

KubeEdge从零开始详细搭建教程

系统架构

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
master40G2G双核
node40G2G双核
edgenode140G1G双核
edgenode240G1G双核

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

http://mirrors.aliyun.com

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

vi /etc/netplan/00-installer-config.yaml
  dhcp4: no	#  关闭动态IP设置,因为要设置固定IP
  addresses: 
    - 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/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You 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/version

KubeEdge 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/version

KubeEdge 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.service
     Loaded: loaded (/etc/systemd/system/edgecore.service; enabled; vendor preset: enab>
     Active: active (running) since Wed 2022-06-15 08:07:09 UTC; 23s ago
   Main 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部署

您好!感谢您的提问。 要在Ubuntu上部署KubeEdge,您可以按照以下步骤进行操作: 1. 安装Docker:KubeEdge需要使用Docker来管理容器。您可以按照Docker官方文档的指引,在Ubuntu上安装最新版本的Docker。 2. 安装KubernetesKubeEdge是建立在Kubernetes之上的,因此您需要在Ubuntu上安装和配置Kubernetes集群。可以使用kubeadm、Minikube或者kubespray等工具来安装和配置。 3. 下载KubeEdge二进制文件:访问KubeEdge的GitHub仓库(https://github.com/kubeedge/kubeedge)下载最新的二进制文件。您可以选择下载预编译的二进制文件或者自行构建。 4. 部署云端组件:使用kubectl命令行工具,在Kubernetes集群中部署云端组件。这些组件包括kubeedge-cored和kubeedge-cloudhub,可以通过执行`kubectl apply -f <yaml文件>`命令来进行部署。 5. 部署边缘节点:在边缘节点上运行kubeedge-edged组件。您需要在每个边缘节点上执行类似的命令:`kubeedge-edged --edged-endpoint=<云端组件地址> --edged-config=<配置文件路径>`。 6. 验证部署:使用kubectl命令行工具,检查云端组件和边缘节点的状态,以确保它们正常运行。您可以执行`kubectl get pods -n kubeedge`来查看Pod的状态。 请注意,以上步骤仅为部署KubeEdge的基本指南,实际操作可能会有所不同。建议您参考KubeEdge的官方文档和GitHub仓库中的说明,以获取更详细的指导。 希望对您有所帮助!如果您有任何其他问题,请随时提问。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值