因为网络上大多数教程只有部署相关的命令,而无输入命令后正确界面的显示样例,因此在参考网络上教程并跟随实现的过程中,我将过程进行截图记录,供大家参考。希望对大家有帮助~

一、 K8S部署

选用了三台虚拟机,系统CentOS 7

hostnameip
matser192.168.12.137
node01192.168.12.130
node02192.168.12.138

K8S安装实现最好为1 master + n nodes(n≥1),我一共申请了三台虚拟机,ip和hostname分别如上所示。
在K8S部署教程中我分别在一台虚拟机上部署了master,另外两台上部署了node。但后来在部署KubeEdge时发现edge端需要的是纯净的虚拟机(未部署K8S),便在node02上使用了kubeadm reset清空了配置,并卸载了K8S三大件之后才开始Edge端的配置。
在K8S配置教程中我使用了三台,读者可按需使用台数。
如果你有三台虚拟机,并希望体验K8S和KubeEdge的完整部署的话,推荐配置:

hostname功能作用/角色
matserK8S的master,KubeEdge的cloud端
node01K8S的node
node02KubeEdge的edge端

同时我也使用了MobaXterm软件对虚拟机文件系统可视化。

1.1 更改三台主机hostname

vi /etc/hostname 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 修改三台主机hosts

vi /etc/hosts

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改完hosts和hostname之后,需要再reboot虚拟机才能生效

1.3 更新yum

yum update

1.4 安装依赖包

yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp

在这里插入图片描述

1.5 关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

1.5.1 重置iptables

iptables -F  && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT

1.5.2 关闭交换

 swapoff -a

1.5.3 永久关闭

vi /etc/fstab

#注释关于swap的那一行

#关闭selinux

setenforce 0

在这里插入图片描述

vi /etc/sysconfig/selinux

#将里面的SELINUX配置为disabled    SELINUX=disabled

在这里插入图片描述

1.5.4 同步时间

#安装ntpdate

yum install ntpdate -y

#添加定时任务

crontab -e

插入内容:

0-59/10 * * * * /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP

在这里插入图片描述

#先手动同步一次

ntpdate us.pool.ntp.org

在这里插入图片描述

1.6 安装Docker

若已安装,查看版本是否一致,不一致卸了重装

1.6.1 卸载现有版本

yum remove -y docker* container-selinux

1.6.2 删除容器镜像:

sudo rm -rf /var/lib/docker

1.6.3 安装依赖包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2 

1.6.4 设置阿里云镜像源

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

1.6.5 安装 Docker-CE

sudo yum install docker-ce

在这里插入图片描述

1.6.6 开机自启

sudo systemctl enable docker 

1.6.7 启动docker服务

sudo systemctl start docker

1.6.8 查看docker版本 确定三机docker版本一致

docker version 

在这里插入图片描述

1.7 免密登录(三台)

1.7.1 生成密钥

ssh-keygen -t rsa  #连续回车

1.7.2 复制密钥到其他主机

ssh-copy-id node01

ssh-copy-id node02

其他两台node虚拟机也做同类操作
在这里插入图片描述

1.7.3 把域名解析复制到其他主机

scp /etc/hosts node01:/etc

scp /etc/hosts node02:/etc

在这里插入图片描述

1.8 打开路由转发和iptables桥接功能(三台)

1.8.1 写入配置文件

cat <<EOF > /etc/sysctl.d/kubernetes.conf

vm.swappiness=0

vm.overcommit_memory = 1

vm.panic_on_oom=0

net.ipv4.ip_forward = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

fs.inotify.max_user_watches=89100

EOF

1.8.2 生效配置文件

 sysctl -p /etc/sysctl.d/kubernetes.conf

在这里插入图片描述

2.1 指定yum安装kubernetes的yum源(三台)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

下载完成之后,查看一下仓库是否可用

 yum repolist 

在这里插入图片描述

2.2 创建本地缓存(三台)

yum makecache fast

在这里插入图片描述

解决错误:repomd.xml不能被验证

出现错误,repomd.xml不能被验证,修改/etc/yum.repos.d/kubernetes.repo
在这里插入图片描述
在这里插入图片描述

2.3 各节点安装所需安装包

  • kubeadm:部署集群用的命令
  • kubelet:在集群中每台机器上都要运行的组件,负责管理pod、容器的生命周期
  • kubectl:集群管理工具

2.3.1 三台主机下载版本号自行更改

如果之前有下载过,先

yum remove kubeadm

yum remove kubectl

yum remove kubelet

因为k8s在v1.20.0宣布放弃对docker的支持并在1.24.0版本后就移除了docker,kubeadm版本过高的话就会报错。(在这里我们均选用1.18.0版本)
在这里插入图片描述
此处指定版本为 1.18.0,如果不指定默认下载最新版本。

#下载软件

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

#开机自启动

systemctl enable kubelet

2.4 在 Master 节点中部署集群

在 master节点中执行以下命令,注意将 master 节点 IP(apiserver-advertise-address) 和 kube 版本号(kubernetes-version)修改为自己主机中所对应的。

kubeadm init \

--apiserver-advertise-address=192.168.12.137 \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version v1.18.0 \

--service-cidr=10.96.0.0/12 \

--pod-network-cidr=10.244.0.0/16

在这里插入图片描述

出现这个错误是因为我在之前因为kubeadm版本问题装失败了一次,所以配置文件已经存在。解决办法:kubeadm reset
在这里插入图片描述

查看提示信息,看到 initialized successfully 说明我们 master 节点上的 k8s 集群已经搭建成功

此步骤执行完成之后,使用命令docker images查看系统中的镜像,可以我们需要的镜像均已安装完成。
在这里插入图片描述

2.5 将 node 节点加入集群

查看上一步执行成功后的提示信息,可以看到系统给了我们两条命令
在这里插入图片描述

上面的语句是开启 kubectl 工具的使用(该命令在master节点中执行)。

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

第二条命令是将 node 节点加入 master 中的集群(该命令在工作节点node中执行)。

直接复制,并在node终端里运行

执行完成之后在 master 节点中使用命令 kubectl get nodes 查看此时集群中的工作节点。可以看到,node1 和 node2 工作节点已加入至 master 中的集群。

2.6 部署 CNI 网络插件

在上述操作完成后,各个工作节点已经加入了集群,但是它们的状态都是 NoReady,这是由于无它们无法跨主机通信的原因。而 CNI 网络插件的主要功能就是实现 pod 资源能够跨宿主机进行通信。在master节点中执行以下命令进行配置:

kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml

然后使用命令

kubectl get pods -n kube-system

查看运行状态,1 代表运行中;

最后再次使用

kubectl get nodes

查看集群中的工作节点;
在这里插入图片描述
至此,三机配置k8s步骤结束。

二、双机部署KubeEdge

在这里插入图片描述

这里我们选取的KubeEdge版本为1.10.3。

1 环境要求

1.1 机器要求

首先,需要一个台已经初始化好了k8s主节点的机器(这里我选用的上面k8s教程中部署好的master,IP为192.168.12.137),以及若干台纯净的机器(这里我选用了k8s教程中的node02,IP为192.168.12.138。这里的纯净指未安装启动k8s的kubeadm、kubelet、kubectl,因为如果后台有kube-proxy这种进程,会导致edgecore.service服务不可用。由于我在k8s教程中该虚拟机已经安装了k8s,因此我先使用

kubeadm reset

在这里插入图片描述

将后台服务全部停止,为保证纯净使用

yum remove

将kubeadm、kubelet、kubectl卸载)

1.2 安装Golang

两台机器同时安装Golang 1.17。主要参考教程:centos 7 安装golang1.17 - nickchou - 博客园 (cnblogs.com)

1.2.1 下载文件
wget https://golang.google.cn/dl/go1.17.linux-amd64.tar.gz

在这里插入图片描述

1.2.2 解压Go包
tar -zxf go1.17.linux-amd64.tar.gz -C /usr/local
1.2.3 配置环境变量
vim /etc/profile
#golang config
export GOROOT=/usr/local/go 
export GOPATH=/data/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

在这里插入图片描述

1.2.4 将变量配置生效
source /etc/profile

go version

在这里插入图片描述

1.3 安装keadm(按需修改版本号)

wget https://github.com/kubeedge/kubeedge/releases/download/v1.10.3/keadm-v1.10.3-linux-amd64.tar.gz  #下载keadm
tar -zxvf keadm-v1.10.3-linux-amd64.tar.gz # 解压keadm的tar.gz的包

cd keadm-v1.10.3-linux-amd64/keadm/ 

cp keadm /usr/sbin/ #将其配置进入环境变量,方便使用

2 部署云端

2.1 keadm init

安装cloudcore

./keadm-v1.10.3-linux-amd64/keadm/keadm init --advertise-address="192.168.12.137" --kubeedge-version=1.10.3

将advertise-address后接的地址换成master的IP,kubeedge-version换成指定安装的KubeEdge的版本

报错

这里的意思是无法下载devicemodel.yaml文件。
在这里插入图片描述

解决办法:

到kubeedge下载界面手动下载对应版本的对应文件到主机上,再通过主机传输到虚拟机的对应位置上。
(这里我未使用VMware,使用的Xshell)
在这里插入图片描述

此处传输文件参考教程:

Widows主机与CentOS虚拟机实现文件传输_蓝晶之心的博客-CSDN博客_windows往centos传文件

将这几个文件都传输到对应的位置就不会报错啦。

再次键入

./keadm-v1.10.3-linux-amd64/keadm/keadm init --advertise-address="192.168.12.137" --kubeedge-version=1.10.3

发现一直卡在checksum_kubeedge-v1.10.3这一个地方,首先以为是check需要时间,但等了半个多小时发现可能是出了问题。

解决办法:

去官网将对应版本的checksum文件下载下来,放在虚拟机的kubeedge文件夹中,就可以顺利通过啦。
在这里插入图片描述

2.2 获取token

keadm gettoken

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFweLPXf-1666059198306)(C:\Users\李逸\Desktop\服务网络组学习资料\2022_10_k8s_KubeEdge安装部署\2022_10_10_双机kubeedge安装部署\10.png)]

3 部署边缘端

3.1 添加EPEL软件库

$yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

3.2 下载mosquitto

$yum -y install mosquitto

3.3 下载keadm

参考1.3

3.4 加入cloud

cd keadm-v1.10.3-linux-amd64/keadm

./keadm join --cloudcore-ipport=192.168.12.137:10000 --edgenode-name=node02 --kubeedge-version=1.10.3 --token=<上面keadm gettoken里面的返回内容>

将cloudcore-ipport修改为master的ip,edgenode-name按需修改,kubeedge-version是指定安装版本
在这里插入图片描述

4 查看

kubectl get nodes

在这里插入图片描述

至此,K8S和KubeEdge就已经部署好啦。
这个教程里主要包括了我部署过程的记录、遇到的报错及解决方法,希望对你有帮助~

更多推荐