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

2023-11-14

准备工作——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/agent
  operator: DoesNotExist

修改
然后再应用该配置文件:

kubectl apply -f kube-flannel-cloud.yml

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

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

- key: node-role.kubernetes.io/agent
  operator: 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成功运行。
pods
使用

./keadm gettoken

获取token
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
打开metaServer
然后重启一下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命令,运行成功:
运行成功

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KubeEdge环境搭建(支持网络插件flannel) 的相关文章

随机推荐

  • 用c语言对文件进行加密

    用C语言对文件进行简单加密的操作 这里主要用的加密思路是破坏文件头 使得系统无法识别文件从而进行加密 最初的思路是将用户输入的加密口令转成ASCII码 再与文件头数据循环进行异或操作 从而破坏文件头数据 使得系统无法识别文件 而从安全性上来
  • 最新!Photoshop 2022 (ps2022)中文

    Photoshop 2022拥有超强的图片编辑功能 对图片调整强度 饱和度 亮度 从照片编辑和合成到数字绘画 动画和图形设计 只要能想到 就能在Photoshop中创作出来 包括神经滤镜 天空更换以及增强的云文档等 可以让设计者的工作更加高
  • ORA-01502: 索引或这类索引的分区处于不可用状态

    一 问题描述 插入数据时 出现如下报错 ORA 01502 索引或这类索引的分区处于不可用状态 英文 ora 01502 index schema index name or partition of such index is in un
  • (五)unity shader基础之——————学习shader所需的数学基础:下篇(坐标空间:模型空间、世界空间、观察空间、裁剪空间、屏幕空间、法线变换等)

    一 坐标空间 上篇文章讲述了如何使用矩阵来表示基本的变换 如平移 旋转和缩放 在本节我们将关注如何使用这些变换来对坐标空间进行变换 渲染游戏的过程可以理解成是把一个个顶点经过层层处理最终转换为屏幕上的过程 本节我们就将学习这个转换过程是如何
  • Python类和对象编写一个小游戏【含注释】

    定义一个鱼类和龟类并编写游戏 假设游戏场景为范围 x y 为0 lt x lt 10 0 lt y lt 10 游戏生成1只乌龟和10条鱼 它们的移动方向均随机 乌龟的最大移动能力是2 Ta可以随机选择1还是2移动 鱼儿的最大移动能力是1
  • 集合--10万随机数问题

    1 求十万个数据每个数据出现的次数 import java util ArrayList import java util Random import java util HashMap import java util Iterator
  • torch.optim.SGD()

    其中的SGD就是optim中的一个算法 优化器 随机梯度下降算法 PyTorch 的优化器基本都继承于 class Optimizer 这是所有 optimizer 的 base class torch optim是一个实现了各种优化算法的
  • QT之Excel表格操作

    QT之Excel表格操作 提前准备 打开读取excel文件 写入保存excel文件 提前准备 pro文件中添加 QT axcontainer 在需要使用excel的文件中添加 include
  • GitLab 仓库管理 创建一个仓库详细步骤

    Gitlab 仓库管理 GitLab 是通过组 group 的概念来统一管理仓库 project 和用户 user 通过创建组 在组下再创建仓库 再将用户加入到组 从而实现用户与仓库的权限管理 创建仓库之前先创建组 创建组 New grou
  • 状态空间模型

    一 状态空间模型简述 状态空间模型是动态时域模型 以隐含着的时间为自变量 状态空间模型包括两个模型 一是状态方程模型 反映动态系统在输入变量作用下在某时刻所转移到的状态 二是输出或量测方程模型 它将系统在某时刻的输出和系统的状态及输入变量联
  • html文字下排输入,HTML input text单行文本输入框简介说明

    摘要 下文讲述html代码中input type text 时的相关属性简介说明 如下所示 input type text 简介 当 input标签中 type text 时 代表此标签是一个单行文本输入框 单行文本框还包括一些属性 如下
  • 新项目需求调研

    从三个方面帮你建立起了对这个项目基本认识 概念层面 何谓访客管理系统 产品层面 访客管理系统通常有啥功能 客户层面 什么样的目标客户会产生这种需求 需求调研四个维度 那么 了解了这些基本信息后 我们就可以开展需求调研了吗 显然是不够的 对于
  • 三菱fx2n64mr说明书_三菱PLC模块FX3U-64MR/DS使用手册

    三菱PLC模块FX3U 64MR DS使用手册 FX1N 24MR 001 是三菱PLC FX1N系列 是一种卡片大小的PLC 适合在小型环境中进行控制 它具有的性能 串行通讯功能以及紧凑的尺寸 这使得它们能用在以前常规PLC无法安装的地方
  • 代码随想录--哈希--四数相加II

    给定四个包含整数的数组列表 A B C D 计算有多少个元组 i j k l 使得 A i B j C k D l 0 为了使问题简单化 所有的 A B C D 具有相同的长度 N 且 0 N 500 所有整数的范围在 2 28 到 2 2
  • 用DOS命令合并多个文本文件

    作者 iamlaosong 从总部系统下的干线数据 有30个文本文件 希望变成一个Excel文件 方法是先用copy命令将文本合成一个 再用excel打开 最后保存为Excel文件 步骤如下 1 将所有的文本文档拷贝到同一个文件夹 然后单击
  • 半透明信息显示浮动窗口的实现

    实现目的 在一些画图软件中 经常需要向用户展示鼠标移动到的位置的对象的一些参数信息 此时 完成一个交互性友好的信息显示界面就相当的重要了 因为一个软件的好坏 在用户的眼中 第一感觉甚至是第一重要的就是视觉效果和可操作性 当然 软件本身的稳定
  • 阿里云轻量应用服务器防火墙配置(全网最简单)

    阿里云轻量应用服务器防火墙配置 1 命令行配置 1 开启防火墙 systemctl start firewalld 2 限制端口 firewall cmd zone public add port 5672 tcp permanent 开放
  • 过拟合:所表现的就是模型训练误差很小,但测试误差很大,对于产生这种现象以下说法正确

    过拟合 所表现的就是模型训练误差很小 但测试误差很大 对于产生这种现象以下说法正确 提示 基础知识 1 深度学习机器学习笔试面试知识 正则化 文章目录 过拟合 所表现的就是模型训练误差很小 但测试误差很大 对于产生这种现象以下说法正确 TO
  • 关于echarts 图,在切换tab后,返回时宽度变窄的问题

    项目场景 提示 这里简述项目相关背景 最近在做一个统计报表的项目 需要插入ECharts 图表和表格做统计 并且可以导出Excel 表格 问题描述 提示 这里描述项目中遇到的问题 在开发过程中 碰到了一个 echarts 图在切换到 tab
  • KubeEdge环境搭建(支持网络插件flannel)

    KubeEdge环境搭建 准备工作 K8s集群环境搭建 准备开始 配置国内镜像 仅amd64架构 如果是arm架构的不要更改镜像 安装docker 安装K8s 初始化Master节点 网络插件安装 部署可视化KuBoard Cloud节点配