目录
--master和edge安装golang(k8s是由go语言写的)
——使用keadm将边缘节点加入K8s集群(Kubeedge)
——前言
为什么要使用KubeEdge呢,这是因为Kubernetes不支持ARM架构的CPU,这就导致我们的板子无法通过k8s加入集群(k8s集群是为AMD架构的服务器服务的)。为了实现边云协同,边缘计算,KubeEdge的部署是必不可少的。(当然也可以采用k3s,虽然效率上远不如Kubeedge,但是安装相较而言比较方便)
附k3s和KubeEdge对比图:
从图上可以看出KubeEdge agent 内存消耗和CPU消耗要远比K3S agent和server都要少很多。
如果你是新手,那么我推荐你使用本文下面的Kubesphere进行一键式部署k8s集群以及KubeEdge。
本文还提供了从命令行暴力部署k8s的方法,推荐老手食用,不过本人用下来发现还是KubeSphere比较方便。(虽然KubeSphere的社会生态环境比较一半,很多问题放着都没人解决,官方文档也有很多问题,但是本文能够帮你解决大部分的问题,而且毕竟KubeSphere是可视化界面,就算环境一般也比命令行上的k8s集群友好很多了。)
那么我们正式进入部署:
使用KubeSphere部署K8s集群、KubeEdge
——什么是KubeSphere?
KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多云与多集群管理,提供全栈的 IT 自动化运维能力,简化企业的 DevOps 工作流。它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用 (plug-and-play) 的集成。
简单来说,他就是一个融合怪,方便用户进行云原生开发的融合怪,把许多的复杂的功能整理到了一起,让用户可以在他的这个平台上通过简单的操作就能完成许许多多命令行上复杂的操作。
附KubeSphere官网:面向云原生应用的容器混合云,支持 Kubernetes 多集群管理的 PaaS 容器云平台解决方案 | KubeSphere
接下来我们将在Linux上使用All-in-One模式安装KubeSphere和部署k8s集群:
——先决条件
注:本文章对应KubeSphere版本为3.2.x,据说3.3.x版本就要更新了,届时将会解决kubeedge版本过低和k8s版本过高的v1beta1和v1beta2不兼容问题...当然这些都是后话了。主要是还请各位读者注意,由于KubeSphere官网明确提出不对旧版本的文档进行维护,所以如果更新了新版本的文档,还请以官方文档为主参考。
--硬件推荐配置
操作系统 | 最低配置 |
---|---|
Ubuntu 16.04, 18.04 | 2 核 CPU,4 GB 内存,40 GB 磁盘空间 |
Debian Buster, Stretch | 2 核 CPU,4 GB 内存,40 GB 磁盘空间 |
CentOS 7.x | 2 核 CPU,4 GB 内存,40 GB 磁盘空间 |
Red Hat Enterprise Linux 7 | 2 核 CPU,4 GB 内存,40 GB 磁盘空间 |
SUSE Linux Enterprise Server 15/openSUSE Leap 15.2 | 2 核 CPU,4 GB 内存,40 GB 磁盘空间 |
虽然这是官方文档的推荐配置,但本人推荐的配置是至少4核CPU,8GB内存,40GB磁盘空间,在后续的应用场景中,无论是在kk初始化还是开启可插拔软件启用Kubeedge,本笔者实测如果你的服务器只有2核4G那么将很容易发生服务器卡死、崩溃。
如果你的服务器能够有8核16G了,那么恭喜你,你可以在KubeSphere上“平步青云”了,甚至可以启动所有的KubeSphere上的可插拔软件(监控、应用商店、事件、日志等)
--修改主节点名称
修改主节点名称并不只是为了辨识方便,如果不进行修改,在使用kubesphere安装k8s集群的时候会报错,且这个错误原因比较含糊,本人最终确定是因为没有修改主节点名称导致的,原因暂且未知。不管怎么样,强烈建议修改主节点名称:
在你的终端输入如下指令查看当前主节点名称:
hostname
输入如下指令修改主节点名称:
hostnamectl set-hostname <主节点名称,例如master>
--容器运行时
你的集群必须有一个可用的容器运行时。如果您使用 KubeKey 搭建集群,KubeKey 会默认安装最新版本的 Docker。或者,您也可以在创建集群前手动安装 Docker 或其他容器运行时。
本人推荐使用Docker作为容器运行时。
支持的容器运行时 | 版本 |
---|---|
Docker | 19.3.8 + |
containerd | 最新版 |
CRI-O(试验版,未经充分测试) | 最新版 |
iSula(试验版,未经充分测试) | 最新版 |
附手动安装docker操作(可选):
安装必要的系统工具:
sudo apt-get -y update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
安装GPG证书,如果不安装则没有权限从软件源下载Docker:
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
写入软件源信息(通过这个软件源下载Docker):
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
开始下载Docker:
sudo apt-get -y update
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
curl后会自动进行安装脚本,这一步的时间可能比较久(3-10分钟),请耐心等待。
安装完之后会弹出docker的版本信息,后续可以再次通过下面这个命令查看:
docker version
或者如果只需要查看版本信息,可以输入:
docker -v
--依赖项要求
KubeKey 可以将 Kubernetes 和 KubeSphere 一同安装。针对不同的 Kubernetes 版本,需要安装的依赖项可能有所不同。您可以参考以下列表,查看是否需要提前在节点上安装相关的依赖项。
依赖项 | Kubernetes 版本 ≥ 1.18 | Kubernetes 版本 < 1.18 |
---|---|---|
socat |
必须 | 可选但建议 |
conntrack |
必须 | 可选但建议 |
ebtables |
可选但建议 | 可选但建议 |
ipset |
可选但建议 | 可选但建议 |
我的建议是:能装的全装。
sudo apt-get -y socat conntrack ebtables ipset
--网络和 DNS 要求
- 请确保
/etc/resolv.conf
中的 DNS 地址可用,否则,可能会导致集群中的 DNS 出现问题。 - 如果您的网络配置使用防火墙规则或安全组,请务必确保基础设施组件可以通过特定端口相互通信。建议您关闭防火墙。有关更多信息,请参见端口要求。(在服务器安全组里把这些要求的端口全部放行,在边缘端上确保防火墙放行这些端口)
- 支持的 CNI 插件:Calico 和 Flannel。其他插件也适用(例如 Cilium 和 Kube-OVN 等),但请注意它们未经充分测试。(咱们暂时用不到,不用考虑)
官方建议您的操作系统处于干净状态(不安装任何其他软件),否则可能会发生冲突。即将服务器更换操作系统,从零开始。(仅供参考)
——下载KubeKey(kk)并开始安装
先执行以下命令以确保您从正确的区域下载 KubeKey。
export KKZONE=cn
执行以下命令下载 KubeKey。
curl -sfL https://get-kk.kubesphere.io | VERSION=v2.0.0 sh -
为 kk
添加可执行权限:
chmod +x kk
通过一个指令进行快速安装:
./kk create cluster --with-kubernetes v1.21.5 --with-kubesphere v3.2.1
注:
- 此处的k8s和kubesphere版本可以更改成你希望下载的版本,建议默认。
-
安装 KubeSphere 3.2.1 的建议 Kubernetes 版本:1.19.x、1.20.x、1.21.x 或 1.22.x(实验性支持)。如果不指定 Kubernetes 版本,KubeKey 将默认安装 Kubernetes v1.21.5。有关受支持的 Kubernetes 版本的更多信息,请参见支持矩阵。
执行该命令后,KubeKey 将检查您的安装环境,结果显示在一张表格中,输入 yes
继续安装流程。
当看到以下输出的时候,证明我们的安装完成了:
#####################################################
### Welcome to KubeSphere! ###
#####################################################
Console: http://192.168.0.2:30880
Account: admin
Password: P@88w0rd
NOTES:
1. After you log into the console, please check the
monitoring status of service components in
"Cluster Management". If any service is not
ready, please wait patiently until all components
are up and running.
2. Please change the default password after login.
#####################################################
https://kubesphere.io 20xx-xx-xx xx:xx:xx
#####################################################
输出信息会显示 Web 控制台的 IP 地址和端口号,默认的 NodePort 是 30880
。现在,您可以使用默认的帐户和密码 (admin/P@88w0rd
) 通过 <你的服务器外网IP>:30880
访问控制台,进入后会自动要求你更改密码。
可以再次通过命令行输入下面的指令以查看安装结果:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
到这一步,我们已经通过kk完成了k8s集群和KubeSphere的部署,接下来我将告诉你如何在KubeSphere上部署KubeEdge(官方文档有坑!)
附:我的KubeSphere Web控制台截图,可能跟你的有地方不一样,因为我已经进行了后续的操作
——在KubeSphere部署KubeEdge
在命令行上暴力部署k8s和KubeEdge
——部署前的准备
对象 | 主机名称 | CPU架构 | IP地址 |
阿里云ECS云服务器 | master | AMD64 | 59.110.4.200 |
Jetson Nano B02板子 | edge | ARM64 | 192.168.123.13 |
登录到root模式,这样后续可以避免很多权限问题。
sudo passwd root
#然后输入密码
su root
#输入之前输入的密码进入root模式
或者使用:
sudo su
#输入当前用户密码
也可以不输入root密码进入root模式。
分别在master和edge上修改主机名称:
hostnamectl set-hostname master
hostnamectl set-hostname edge
更改完成之后可能终端不会马上进行反馈(@后面可能还是旧的hostname)
hostname
#只要输入这个指令返回的hostname变成了我们想要的就可以
分别在master和edge上准备环境:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install wget vim ssh ufw
#一些必要的工具
查看防火墙状态(active为激活,inactive为不激活)
sudo ufw status
关闭防火墙:
sudo ufw disable
关闭交换分区,k8s官方文档要求,否则将无法进行集群初始化,虽然初始化的时候加上--ingore参数也可以避免,但是后续可能会产生不可预知的后果。(如果是服务器貌似交换分区会默认关闭,而且edge端不需要关闭swap,因为k8s集群是在master端初始化的,实际上需要关闭swap的貌似是虚拟机的情况(?)我的服务器貌似无法启动swap,故此处我采用edge端进行演示操作)
输入该指令查看是否开启了交换分区:
sudo free -m
如图所示,Swap后面的total列不为0即为开启了交换分区,执行下面的操作进行关闭:
sudo swapoff -a
#临时关闭交换分区
或者使用下面这个永久关闭交换分区:
sudo vim /etc/fstab
在打开的文件里面找到类似于我图上带swap的若干行,把这两行注释掉(在前头加上#),如图所示,设置完需要重启(不推荐,因为只需要确保本次初始化的时候关闭swap即可):
如果后续需要打开交换分区则输入:
sudo swapon -a
更改后的结果图:
--master和edge安装docker
安装必要的系统工具:
sudo apt-get -y update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
安装GPG证书,如果不安装则没有权限从软件源下载Docker:
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
写入软件源信息(通过这个软件源下载Docker):
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
开始下载Docker:
sudo apt-get -y update
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
curl后会自动进行安装脚本,这一步的时间可能比较久(3-10分钟),请耐心等待。
附安装之后弹出的docker安装成功信息和docker的具体信息:
后续可以再次通过下面这个命令查看docker的具体信息:
docker version
或者如果只需要查看版本信息,可以输入:
docker -v
修改镜像源:
sudo vim /etc/docker/daemon.json
添加以下内容:
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://quay-mirror.qiniu.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}
参数解释:
registry-mirrors为镜像源,后续docker拉取镜像的时候,会通过这个镜像源进行拉取,解决国内无法访问外网镜像站的问题
exec-opts设定执行选项,设定docker为systemd技术(k8s集群需要)
重新载入daemon:
sudo systemctl daemon-reload
重启docker:
sudo systemctl restart docker
查看修改后的docker Cgroup的参数,为systemd即修改成功:
docker info | grep Cgroup