因为网络上大多数教程只有部署相关的命令,而无输入命令后正确界面的显示样例,因此在参考网络上教程并跟随实现的过程中,我将过程进行截图记录,供大家参考。希望对大家有帮助~
选用了三台虚拟机,系统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软件对虚拟机文件系统可视化。
vi /etc/hostname
vi /etc/hosts
修改完hosts和hostname之后,需要再reboot虚拟机才能生效
yum update
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
systemctl stop firewalld && systemctl disable firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
swapoff -a
vi /etc/fstab
#注释关于swap的那一行
#关闭selinux
setenforce 0
vi /etc/sysconfig/selinux
#将里面的SELINUX配置为disabled SELINUX=disabled
#安装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
若已安装,查看版本是否一致,不一致卸了重装
yum remove -y docker* container-selinux
sudo rm -rf /var/lib/docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install docker-ce
sudo systemctl enable docker
sudo systemctl start docker
docker version
ssh-keygen -t rsa #连续回车
ssh-copy-id node01
ssh-copy-id node02
scp /etc/hosts node01:/etc
scp /etc/hosts node02:/etc
cat < /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
sysctl -p /etc/sysctl.d/kubernetes.conf
cat < /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
yum makecache fast
出现错误,repomd.xml不能被验证,修改/etc/yum.repos.d/kubernetes.repo
如果之前有下载过,先
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
在 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
查看系统中的镜像,可以我们需要的镜像均已安装完成。
查看上一步执行成功后的提示信息,可以看到系统给了我们两条命令
上面的语句是开启 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 中的集群。
在上述操作完成后,各个工作节点已经加入了集群,但是它们的状态都是 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
这里我们选取的KubeEdge版本为1.10.3。
首先,需要一个台已经初始化好了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卸载)
两台机器同时安装Golang 1.17。主要参考教程:centos 7 安装golang1.17 - nickchou - 博客园 (cnblogs.com)
wget https://golang.google.cn/dl/go1.17.linux-amd64.tar.gz
tar -zxf go1.17.linux-amd64.tar.gz -C /usr/local
vim /etc/profile
#golang config
export GOROOT=/usr/local/go
export GOPATH=/data/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
source /etc/profile
go version
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/ #将其配置进入环境变量,方便使用
安装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的版本
解决办法:
到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文件夹中,就可以顺利通过啦。
keadm gettoken
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFweLPXf-1666059198306)(C:\Users\李逸\Desktop\服务网络组学习资料\2022_10_k8s_KubeEdge安装部署\2022_10_10_双机kubeedge安装部署\10.png)]
$yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$yum -y install mosquitto
参考1.3
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是指定安装版本
kubectl get nodes
至此,K8S和KubeEdge就已经部署好啦。
这个教程里主要包括了我部署过程的记录、遇到的报错及解决方法,希望对你有帮助~