KubeEdge环境搭建(支持网络插件flannel)

这篇具有很好参考价值的文章主要介绍了KubeEdge环境搭建(支持网络插件flannel)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

准备工作——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

我这里出现了等待条件超时的错误:
KubeEdge环境搭建(支持网络插件flannel)
解决方法是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
KubeEdge环境搭建(支持网络插件flannel)

在118行左右添加:

- key: node-role.kubernetes.io/agent
  operator: DoesNotExist

KubeEdge环境搭建(支持网络插件flannel)
然后再应用该配置文件:

kubectl apply -f kube-flannel-cloud.yml

过段时间后查看node状态可以看到master已经ready:
KubeEdge环境搭建(支持网络插件flannel)

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

- key: node-role.kubernetes.io/agent
  operator: Exists

并且我的边缘节点架构是arm64,所以也修改了一下
KubeEdge环境搭建(支持网络插件flannel)

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

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

KubeEdge环境搭建(支持网络插件flannel)
然后再应用该配置文件:

kubectl apply -f kube-flannel-edge.yml

部署可视化KuBoard

Kuboard官网
提供的命令如下:

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

部署完成后,进入30080端口可以看到这个命令,运行
KubeEdge环境搭建(支持网络插件flannel)

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

然后就可以看到集群信息了
KubeEdge环境搭建(支持网络插件flannel)

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环境搭建(支持网络插件flannel)

查看kubeedge命名空间里的pods,可以看到cloudcore成功运行。
KubeEdge环境搭建(支持网络插件flannel)
使用

./keadm gettoken

获取token
KubeEdge环境搭建(支持网络插件flannel)

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,则说明部署成功。
KubeEdge环境搭建(支持网络插件flannel)

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

修改EdgeCore配置

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

vim /etc/kubeedge/config/edgecore.yaml

在161行左右配置为true
KubeEdge环境搭建(支持网络插件flannel)
然后重启一下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

可以看到帮助中提到:
KubeEdge环境搭建(支持网络插件flannel)
可以运行join命令时指定该参数为systemd

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

1、杀死运行的容器:

docker kill $(docker ps -a -q)

2、删除所有容器:

docker rm $(docker ps -a -q)

最后再执行join命令,运行成功:
KubeEdge环境搭建(支持网络插件flannel)文章来源地址https://www.toymoban.com/news/detail-416877.html

到了这里,关于KubeEdge环境搭建(支持网络插件flannel)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【K8S系列】深入解析k8s网络插件—Flannel

      做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。 文章标记颜色说明: 黄色:重要标题 红色:用来标记结论 绿色:用来标记论点 蓝色:用来标记论点 Kubernetes (k8s) 是一个容器编排平台,允许在容器中运行应用程序和服务。今天学习一下k8s网络插件

    2024年02月16日
    浏览(44)
  • K8s进阶之网络:pod内不同容器、同节点不同pod通信、CNI插件、不同节点pod通信、Flannel容器网络、Serivce连接外部网络、服务发现、Nginx反向代理与域名、Ingress代理

    Pod是Kubernetes中最小的可部署单元,它是一个或多个紧密关联的容器的组合,这些容器共享同一个网络命名空间和存储卷,因此Pod中的 所有容器都共享相同的网络命名空间和IP地址——PodIP ,所以在同一个Pod内的容器间通信可以 通过localhost直接通信 。 k8s创建Pod时永远都是首先

    2024年02月05日
    浏览(56)
  • 边缘计算环境部署 docker、kubernetes、Kubeedge

    主机配置为16G内存的win11系统,在VMware Workstation 17 PRO上创建两个Ubuntu虚拟机,分别作为主节点master(192.168.159.131)和从节点node(192.168.159.133)。相关的软件版本如下表所示: 节点 Ubuntu版本 docker版本 kubernetes kubernetes master 22.04.3 24.0.7 1.20.2 1.10.3 node 20.04.6 24.0.7 1.20.2 1.10.0 ubunt

    2024年01月16日
    浏览(49)
  • kubernetes+KubeEdge云边环境的安装与部署

    最近在学习云边协同,需要搭建一个云边协同的实验环境,kubernetes+KubeEdge+sedna,安装过程中遇到了一系列的问题,特此记录总结。 云端:Centos7+ kubernetes 1.23.8 + Docker 这里我们的centos使用的是 centos7.9, 不同版本的系统对k8s影响较大,具体看实际情况而定。 有的还需要更新系统

    2024年02月09日
    浏览(36)
  • Kubernetes:(十八)flannel网络

    目录 一:什么是Flannel 1.1 Flannel实现原理 1.2 数据转发流程 二: Flannel网络概述 2.1 Vxlan 模式 2.1.1 通信流程 2.1.2 部署 2.1.3 相关配置 2.1.4 卸载 2.2 Host-GW 模式 2.2.1 通信流程 2.2.2 部署 2.2.3 相关配置  2.2.4 卸载 2.3 Flanneld 作用 2.4 模式对比 三:部署 四:故障分析 4.1 kube-proxy 配

    2024年02月12日
    浏览(39)
  • k8s Calico网络和flannel网络对比

    Calico 和 Flannel 是 Kubernetes(K8s) 中常用的两种网络插件,它们都有各自的优点和适用场景。以下是 Calico 网络与 Flannel 网络的一些主要对比点: Calico 1. 技术基础 :Calico 依赖于 BGP(Border Gateway Protocol)路由协议来实现节点间通信,可以支持大规模的集群。 2. 性能 :由于使用

    2024年04月27日
    浏览(58)
  • k8s kubernetes 1.23.6 + flannel公网环境安装

    准备环境,必须是同一个云服务厂商,如:华为,阿里、腾讯等,不要存在跨平台安装K8S,跨平台安装需要处理网络隧道才能实现所有节点在一个网络集群中,这里推荐使用同一家云服务厂商安装即可 这里使用centos7进行安装: 必须先开通端口 2380 2379 10250 10257 10259 6443 否则会

    2024年02月07日
    浏览(44)
  • 超详细的kubeedge与kubernetes(k8s)环境配置教程

    注意: 对于kubeedge和k8s的监控可以参考这一篇——通过prometheus和grafana来监管数据; 对于虚拟机环境的搭建可以参考这一篇。 对于搭建所需文件:阿里云盘 本文最后由错误归纳。 文章每周更新,如果喜欢的话可以三联!!! 云端只部署一个master节点,边缘端部署一个edgen

    2024年02月04日
    浏览(44)
  • 深入 K8s 网络原理(一)- Flannel VXLAN 模式分析

    这周集中聊下 K8s 的集群网络原理,我初步考虑分成3个方向: Pod-to-Pod  通信(同节点 or 跨节点),以 Flannel VXLAN 模式为例; Pod/External-to-Service  通信,以 iptables 实现为例; Ingress  原理,以 NGINX Ingress Controller 实现为例; 其他:(到时候看心情)Flannel host-gw 模式,Calico,…

    2024年01月17日
    浏览(42)
  • k8s集群环境搭建以及插件安装

    终端工具MobaXterm很好用。 1、虚拟机三台(ip按自己的网络环境相应配置)(master/node) 节点 ip k8s-master 192.168.200.150 k8s-node1 192.168.200.151 k8s-node2 192.168.200.152 2、关闭防火墙(master/node) 查看防火墙状态: systemctl status firewalld 3、关闭selinux(master/node) 4、关闭swap(master/node) 5、添加主机名

    2024年01月22日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包