KubeEdge安装
前言
KubeEdge分为云端和边缘端节点,大体上需要安装的内容如下。
云端需要安装:
- docker
- kubernetes组件
- cloudcore
边缘端需要安装:
- docker
- Mosquitto
- edgecore
注意边缘端不需要安装kubernetes组件。
由于KubeEdge建立在kubernetes之上,使用kubernetes为联网、应用部署和云与边缘之间的元数据同步提供核心基础设施支持。因此需要安装kubernetes。
Kubernetes默认的容器运行时(Container Runtime)为Docker,因此需要安装Docker。
Mosquitto是一个MQTT协议的代理服务。
操作系统 | ip | 角色 |
---|---|---|
CentOS 7 | 192.168.110.100 | master,云端 |
CentOS 7 | 192.168.110.101 | node1,边缘端 |
CentOS 7 | 192.168.110.102 | node2,边缘端 |
CentOS 7安装
有以下几点需要说明。
(1)在软件选择时,选择基础设施服务器
。
(2)在网络和主机名
中修改为对应的主机名。
三个服务器分别修改为master、node1、node2。
(3)如果是在虚拟机上安装,建议配置静态ip,否则每次启动时ip可能会变。
在网络和主机名
中,点击配置,然后常规中勾选可用时自动链接到这个网络
。
在ipv4设置中配置静态ip。
准备工作
该部分在所有节点上执行。
安装glibc-2.28
使用strings /lib64/libc.so.6 |grep GLIBC_2.28
命令查看是否存在glibc2.28版本。
如果不存在,则需要安装glibc2.28,否则后面使用keadm会报错。
首先升级GCC编译器,执行如下命令。
yum -y install centos-release-scl
yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
scl enable devtoolset-8 bash
echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile
然后升级make,执行如下命令,安装make4.3版本。
wget http://mirrors.ustc.edu.cn/gnu/make/make-4.3.tar.gz
tar -xzf make-4.3.tar.gz
cd make-4.3
sudo ./configure
sudo make
sudo make install
sudo rm -rf /usr/bin/make
sudo cp ./make /usr/bin/
make -v
最后升级glibc,执行如下命令,安装glibc2.28版本。
wget https://mirror.bjtu.edu.cn/gnu/libc/glibc-2.28.tar.xz --no-check-certificate
tar -xf glibc-2.28.tar.xz -C /usr/local
cd /usr/local/glibc-2.28/
mkdir build
cd build/
yum install -y bison
sudo ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
make install
这里编译所用的时间较长。
服务器配置
(1)修改主机名
可以在安装centos系统时就指定三个服务器的主机名。
也可以使用以下命令修改主机名。
hostnamectl set-hostname --static <hostname>
重启后生效。
(2)添加主机名解析
为了方便后面集群节点间的直接调用,在这里配置主机名解析,企业中推荐使用内部DNS服务器。
在三个节点的/etc/hosts
文件中,添加以下内容。
192.168.110.100 master
192.168.110.101 node1
192.168.110.102 node2
(3)确保每个节点的主机名、MAC和product_uuid不同
- 可以使用命令
ip link
或ifconfig -a
来获取网络接口的 MAC 地址 - 可以使用
sudo cat /sys/class/dmi/id/product_uuid
命令查看 product_uuid
(4)时间同步
在三个节点上使用ntpdate同步时间。
ntp常用服务器:
- 中国国家授时中心:210.72.145.44
- NTP服务器(上海) :ntp.api.bz
- 美国:time.nist.gov
- 复旦:ntp.fudan.edu.cn
- 微软公司授时主机(美国) :time.windows.com
- 台警大授时中心(台湾):asia.pool.ntp.org
这里使用命令如下:
ntpdate ntp.api.bz
(5)禁用firewalld服务
kubernetes和docker在运行中釜产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则。
systemctl stop firewalld
systemctl disable firewalld
(6)禁用selinux
selinux是linux系统下的一个安全服务,但是会造成许多问题。
修改/etc/selinux/config
文件,将SELINUX的值设置为disabled。
(7)禁用交换分区
swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用。为了保证kubernetes正常工作,需要禁用swap分区。
修改/etc/fstab
文件,将swap一行注释。
(8)修改内核参数
首先要确保br_netfilter
模块被内核加载。
#加载br_netfilter模块
sudo modprobe br_netfilter
#查看br_netfilter模块是否被加载
lsmod | grep br_netfilter
修改linux的内核参数,添加网桥过滤和地址转发功能。
编辑/etc/sysctl.d/kubernetes.conf
文件,添加如下配置。
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
使用以下命令重新加载配置。
sysctl -p
(9)配置ipvs功能
在Kubernetes中Service有两种代理模型,一种是基于iptables的,一种是基于ipvs的。
两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块。
首先安装ipset和ipvsadm。
yum install ipset ipvsadm -y
添加需要加载的模块写入脚本文件。
cat <<EOF> /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
执行ipvs.modules脚本。
chmod +x /etc/sysconfig/modules/ipvs.modules
/bin/bash /etc/sysconfig/modules/ipvs.modules
查看是否加载成功。
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
(10)重启服务器
重启服务器,以启用上面的更改。
reboot
安装Docker
首先更换Docker镜像源。
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
安装18.06.3版本的Docker,因为这个版本比较稳定,且不用配置额外的参数。
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
安装完docker后要启用镜像加速器,国内很多云服务商都提供了国内加速器服务。由于镜像服务可能出现宕机,建议同时配置多个镜像。
- 阿里云镜像加速器:在阿里云登陆账户后,在镜像加速器查看加速器地址
- 网易云镜像加速器:https://hub-mirror.c.163.com
添加配置文件,使用镜像加速器。
mkdir /etc/docker
cat <<EOF> /etc/docker/daemon.json
{
"registry-mirrors": [
"https://qsk3lswu.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com"
]
}
EOF
重启docker,并且设置开机自启。
systemctl restart docker
systemctl enable docker
安装kubernetes(K8S)
该部分只在master节点执行。
安装kubernetes相关组件
需要安装kubeadm、kubelet 和 kubectl,尽量使用相同的版本。
kubeadm
:用来初始化集群的指令。kubelet
:在集群中的每个节点上用来启动 Pod 和容器等。kubectl
:用来与集群通信的命令行工具。
首先更换kubernetes镜像源。
编辑/etc/yum.repos.d/kubernetes.repo
文件,添加以下配置。
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgchech=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
安装v1.17.4版本的kubeadm、kubelet、kubectl。
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
编辑/etc/sysconfig/kubelet
,添加下面的配置,使用ipvs代理。
KUBE_PROXY_MODE="ipvs"
设置kubelet的开机自启。
systemctl enable kubelet
准备容器镜像
由于默认仓库k8s.gcr.io
在国外无法访问,所以需要提前准备好集群所需镜像。
所需镜像可通过下面命令查看:
kubeadm config images list
下载镜像,在阿里云的仓库中下载,然后打标签为k8s.gcr.io
,再把原始下载的镜像删掉。
images=(
kube-apiserver:v1.17.17
kube-controller-manager:v1.17.17
kube-scheduler:v1.17.17
kube-proxy:v1.17.17
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
for imageName in ${images[@]};do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
集群初始化
kubeadm init \
--apiserver-advertise-address=192.168.110.100 \
--service-cidr=10.1.0.0/16 \
--kubernetes-version=v1.17.17 \
--pod-network-cidr=10.244.0.0/16
以上命令参数中,apiserver-advertise-address
是master节点ip,kubernetes-version
需要与上面下载的镜像版本一致,cidr
的两个参数都是固定值。
运行成功后,出现以下提示。
按照提示,执行以下命令。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
使用kubectl get nodes
命令,可以看到现在只有master节点,并且状态是NotReady。
安装网络插件
该操作只在master节点上执行,插件使用的是DaemonSet的控制器,它会在每个节点上都运行。
kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可,本次选择flannel。
下载flannel的配置文件。
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
运行安装命令:
kubectl apply -f kube-flannel.yml
安装KubeEdge
安装keadm
在云端和边缘端上都安装keadm。
首先下载keadm。
参考 kubernetes-compatibility 了解 Kubernetes 兼容性来确定安装哪个版本的keadm。
wget https://github.com/kubeedge/kubeedge/releases/download/v1.10.1/keadm-v1.10.1-linux-amd64.tar.gz
服务器连github太慢的话,可以先下载好,再用ftp传到服务器上。
下载后进行解压,并将keadm配置进环境变量,方便使用。
tar -zxvf keadm-v1.10.1-linux-amd64.tar.gz
cd keadm-v1.10.1-linux-amd64/keadm
cp keadm /usr/sbin/
使用keadm version
测试是否安装成功。
设置云端
使用keadm初始化,安装cloudcore。
keadm init --advertise-address=192.168.110.100 --kubeedge-version=1.10.1
以上参数分别为master节点地址和要安装的KubeEdge版本。
执行初始化命令,但因为连不上raw.githubusercontent.com出现报错。
可以在报错信息中,看到是在执行下面命令时出现错误:
bash -c cd /etc/kubeedge/ && wget -k --no-check-certificate --progress=bar:force https://github.com/kubeedge/kubeedge/releases/download/v1.10.1/kubeedge-v1.10.1-linux-amd64.tar.gz
这条命令是要下载kubeedge-v1.10.1-linux-amd64.tar.gz
文件到/etc/kubeedge/
目录中,因此可以手动下载这个文件,然后通过ftp上传到服务器的/etc/kubeedge/目录中。
再执行初始化命令,又在执行下面命令时出现错误:
bash -c cd /etc/kubeedge/ && sudo -E wget -t 5 -k --no-check-certificate https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.10/build/tools/cloudcore.service
这条命令是要下载cloudcore.service
文件到/etc/kubeedge/
目录中,访问网址发现该文件内容较少,所以直接在/etc/kubeedge/目录下新建文件cloudcore.service,然后将内容复制进去。
再次执行初始化命令,安装成功。
获取token。
keadm gettoken
设置边缘端
首先在边缘端节点上安装Mosquitto,Mosquitto是一个MQTT协议的代理服务。
yum -y update
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install mosquitto
使用云端的token,加入边缘节点,安装edgecore。
keadm join --cloudcore-ipport=192.168.110.100:10000 --kubeedge-version=1.10.1 --token=f303a9597fbf15c5ad9abe049b24bae92b129b1831c7823039fce994778dbcaf.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTg3MzkwMjV9.McXWKqSeqzZ6YUPCO4c9-FqPOt9FDbKIZmlpsmtkgFo
执行命令后,同样因为连不上raw.githubusercontent.com出现报错。
在报错信息中,看到是在执行下面命令时出现错误:
bash -c cd /etc/kubeedge/ && wget -k --no-check-certificate --progress=bar:force https://github.com/kubeedge/kubeedge/releases/download/v1.10.1/kubeedge-v1.10.1-linux-amd64.tar.gz
这条命令是要下载kubeedge-v1.10.1-linux-amd64.tar.gz
文件到/etc/kubeedge/
目录中,因此可以手动下载这个文件,然后通过ftp上传到服务器的/etc/kubeedge/目录中。
再次执行keadm join命令,又在执行下面命令时出现错误:
bash -c cd /etc/kubeedge/ && sudo -E wget -t 5 -k --no-check-certificate https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.10/build/tools/edgecore.service
要下载edgecore.service
文件到/etc/kubeedge/
目录中,访问链接发现这个文件内容不多,所以直接在/etc/kubeedge/目录中新建文件edgecore.service,然后将内容复制进去。
再次执行keadm join命令,edgecore安装成功。
在master节点上使用kubectl get nodes
查看,STATUS为ready且ROLES中有edge,则KubeEdge安装成功。
参考资料
Kubernetes文档
KubeEdge文档
Docker-从入门到实践
Kubernetes(K8S) 入门进阶实战完整教程
KubeEdge环境搭建指导书 - CentOS 7.6
kubeEdge v1.7使用keadm安装(半手动安装)
centos /lib64/libc.so.6: version 'GLIBC_2.28' not found
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2020-10-09 栅栏密码&W型栅栏密码-加解密(python实现)