K8S 1.18.0 以及KubeEdge 1.10.3 三机安装部署(含过程记录及遇到的报错和解决方法)
K8S和KubeEdge安装部署教程,主要是过程记录、遇到的报错以及解决办法
因为网络上大多数教程只有部署相关的命令,而无输入命令后正确界面的显示样例,因此在参考网络上教程并跟随实现的过程中,我将过程进行截图记录,供大家参考。希望对大家有帮助~
一、 K8S部署
选用了三台虚拟机,系统CentOS 7
hostname | ip |
---|---|
matser | 192.168.12.137 |
node01 | 192.168.12.130 |
node02 | 192.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 | 功能作用/角色 |
---|---|
matser | K8S的master,KubeEdge的cloud端 |
node01 | K8S的node |
node02 | KubeEdge的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就已经部署好啦。
这个教程里主要包括了我部署过程的记录、遇到的报错及解决方法,希望对你有帮助~
更多推荐
所有评论(0)