Kubernetes技术详解-从理论到实践-(1)-环境部署-Setup
1 简介
本文旨在阐述如何快速搭建一套可用的k3s环境,并简要说明如何使用这套环境。
搭建k3s环境所需的安装包、镜像文件、可执行文件均在1-setup目录。k3s示例在2-17开头的目录,其中2-12只需要一台虚拟机即可进行示例验证,13-17为多节点集群模式,至少需要2台虚拟机才可以进行示例验证。
k3s环境搭建的整体思路为:
- 安装操作系统:首先安装一个OpenEular22.03操作系统,再安装一些常见的rpm软件包
- 安装docker:有了操作系统,接下来就可以安装docker(k3s依赖docker),然后再安装nginx和busybox等docker镜像。在本文中镜像是通过离线导入的。
- 安装k3s:docker安装完成,就可以安装k3s了,本文对k3s官方的安装脚本进行了一些改造,可以非常方便地进行单控制平面安装、高可用控制平面安装和混合模式安装。混合模式安装最为简单,只需要一台虚拟机,执行一个简单命令就可以完成,刚入门k3s推荐使用此种安装方式,后续对k3s有一定了解再研究其他安装模式。
- 安装Helm:Helm在k3s不是必需的,如果需要用Helm管理资源清单文件,则需要安装Helm。
- 安装nfs服务:nfs服务在k3s也不是必需的,但如果通过nfs进行网络共享存储,就需要安装。
2 vmware虚拟机配置
创建vmware虚拟机。
新建的虚拟机需要调整的参数见下:
- 客户机操作系统:Linux,其他Linux 5.x及更改版本内核64位
- 处理器数量:1
- 每个处理器的内核数量:6
- 内存:4GB
- 硬盘:80GB
处理器选项下,虚拟化引擎,以下三项全部勾选上:
- 虚拟化Intel VT-x/EPT或AMD-V/RVI(V)
- 虚拟化CPU性能计数器(U)
- 虚拟化IOMMU(IO内存管理单元)(I)
3 安装操作系统
安装OpenEular系统。镜像名如下所示,各大镜像站可以下载到。
openEuler-22.03-LTS-x86_64-dvd.iso
4 安装常用rpm软件包
常用rpm软件包目录为k8s-test/1-setup/rpm-packages,包括如下常用rpm包:
- busybox-1.34.1-13.oe2203.x86_64.rpm(常见命令工具集)
- tar-1.34-1.oe2203.x86_64.rpm(tar命令,压缩解压)
- tree-1.8.0-2.oe2203.x86_64.rpm(tree命令,查看目录树)
- net-tools-2.10-1.oe2203.x86_64.rpm(ifconfig、netstat等命令,调试网络)
- nfs-utils-2.5.4-4.oe2203.x86_64.rpm(nfs相关,网络共享)
安装命令:rpm -ivh *.rpm,为防止安装失败,最好逐个软件包安装。
5 安装Docker
docker安装目录在k8s-test/1-setup/install-docker下。
执行install_docker.sh脚本即可安装。
6 导入镜像
镜像文件目录在k8s-test/1-setup/images下,包括如下用到的images:
- busybox_1.34.1.tar.gz (busybox镜像,常用工具集,需要安装)
- nginx_1.27.3.tar.gz (nginx服务,需要安装)
- nfs-provisioner-v4.0.2.tar.gz (nfs网络共享提供者,k8s的pv网络存储相关,可以在后续用到时再安装)
- ingress-nginx-controller-v1.12.0.tar (k8s的ingress相关,可以在后续用到的时候再安装)
- kube-webhook-certgen-v1.5.0.tar (k8s的ingress相关,可以在后续用到的时候再安装)
- dashboard-v2.7.0.tar (k8s的dashboard相关,可以在后续用到的时候再安装)
- metrics-scraper-v1.0.8.tar (k8s的dashboard相关,可以在后续用到的时候再安装)
离线导入命令:# docker load -i 镜像文件名
如: # docker load -i nfs-provisioner-v4.0.2.tar.gz
7 安装K3s
注意:k3s安装依赖docker,请确认docker已经安装成功。
在Kubernetes官方文档中,节点的角色(role)有以下几种:
- 控制平面节点:Control-plane Node
- 额外控制平面节点:Additional Control-plane Node
- 工作节点:Worker Node
日常使用中,我们会把控制平面节点叫做master,额外控制平面节点叫做slave1,slave2…,工作节点叫做worker1,worker2…。
k3s的安装目录在k8s-test/1-setup/install-k3s下。
集群部署的脚本为:
k8s-test/1-setup/install-k3s/install-k3s.sh
本脚本支持三种部署模式:
- 单控制平面模式:只有一个Control-plane Node时(Work Node至少要有1个),官方文档称为 Single-node Control Plane(单控制平面模式)。
- 高可用控制平面模式:拥有多个Control-plane Node时(Work Node至少要有1个),则称为 High-Availability Control Plane(高可用控制平面模式,简称 HA Control Plane)。
- 混合模式:只有一个Control-plane Node,且该节点作为控制平面节点的同时还提供工作节点功能,这种模式称为混合模式,又称为控制平面节点兼工作节点模式。该模式虽然简单,但官方并不推荐,因为它不符合控制平面和数据平面分离的基本思想。如果集群规模较小或者处于开发阶段,可以使用该模式简化部署流程。本系列文章的2-12章,就是用的这种模式。
7.1 单控制平面模式安装及卸载
这种模式至少两台虚拟机,hostname分别命名为master,worker1,worker2,master为控制平面节点,worker1,worker2为工作节点(也可以只有worker1节点)。
单控制平面模式集群的安装分三步:先安装master控制平面节点,再安装worker1工作节点,最后安装worker2工作节点。每个步骤具体操作如下:
(1) master上执行:
[root@master install-k3s]# ./install-k3s.sh master
其中参数master为本节点的名称,由于是控制平面节点,我们起名为master
(2) worker1上执行:
[root@worker1 install-k3s]# ./install-k3s.sh worker1 192.168.88.132 033d7d2a6381aea7330f334e92228cde
参数含义:
worker1:worker1节点的名称,一般与hostname相同。
192.168.88.132:master节点的IP地址
033d7d2a6381aea7330f334e92228cde:master节点的token,在master节点安装完成后,通过cat /var/lib/rancher/k3s/server/node-token | awk -F: '{print $4}'命令获取。
(3) 在woker2上执行与worker1相同的命令,参数也一样,就可以加入集群。如果没有搭建worker2虚拟机,则可以跳过本步骤,组成master-worker1的集群。
以上步骤执行完,单控制平面模式集群就搭建完了,可以在主节点上通过如下命令查看集群节点信息:
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 1h v1.29.6+k3s1
worker1 Ready <none> 1h v1.29.6+k3s1
worker2 Ready <none> 1h v1.29.6+k3s1
上面ROLES表明节点角色,master是一个控制平面节点,而worker1和worker2是工作节点,角色是<none>。
单控制平面模式k3s卸载
如果想要将安装的k3s卸载,可以在控制平面节点和工作节点分别执行如下命令。
控制平面节点:
[root@master ~]# /usr/local/bin/k3s-uninstall.sh
工作节点1:
[root@worker1 ~]# /usr/local/bin/k3s-agent-uninstall.sh
工作节点2(如果有安装过工作节点2):
[root@worker2 ~]# /usr/local/bin/k3s-agent-uninstall.sh
7.2 高可用控制平面模式安装及卸载
如果需要演示高可用效果,至少需要三台虚拟机,且全部安装成高可用控制平面模式。由于节点安装完之后模式为控制平面节点兼工作节点,就不需要额外的虚拟机安装工作节点了。生产环境中,一般还需要对所有控制平面节点前面再部署一个负载均衡节点,才能实现真正的高可用。
准备三台虚拟机,hostname分别为master,slave1,slave2,master为控制平面节点,slave1和slave2为额外控制平面节点。这些节点安装之后,又都是工作节点,因此不用再额外部署工作节点。
安装过程分为三步,首先在master上安装k3s,然后在slave1上安装,最后在slave2上安装。具体操作如下:
(1) master上执行:
./install-k3s.sh master --cluster-init 192.168.x.a 192.168.x.b 192.168.x.c [...]
参数含义
master:为本节点名,为了便于后续管理,一般和hostname相同。
192.168.x.a:本节点的IP地址,脚本内部会自动为这几个IP添加–tls-san参数,用于TLS认证。
192.168.x.b/c:如果规划后面将会有两个控制平面节点加入到本集群,那在master节点初始化时就需要把这两个IP添加进来。
(2) slave1上执行:
./install-k3s.sh slave1 192.168.88.a K1035906be46970b59529c518db9fafa3ad7f10b11c51eba6ef03bda9aa7d81113c::server:033d7d2a6381aea7330f334e92228cde --node-ip 192.168.88.b --tls-san 192.168.88.a --tls-san 192.168.88.b --tls-san 192.168.88.c [...]
参数含义:
slave1:为本节点名,为了便于后续管理,一般和hostname相同,所有节点名称均不能相同,否则加入集群时会报错。
192.168.88.a:主节点IP地址,表示本节点要加入主节点。
K1035***:这一串很长的字符串为Token,与worker节点加入master时的token不同,这个token是一个长串,通过在主节点上执行cat /var/lib/rancher/k3s/server/node-token得到。
node-ip 192.168.88.b:本节点的IP地址,如果后续有slave2节点添加到集群,这个地址需要变化。
–tls-san xxx:TLS认证相关,把所有加入本集群的IP地址都填进来,即使这个IP还没加到集群。IP需要与master初始化时的IP完全一致。
(3) 在slave2节点上,修改node-name和node-ip,其他与slave1参数相同,执行如下命令。(如果没有slave2虚拟机,可以不执行此步骤)
./install-k3s.sh slave2 192.168.88.a K1035906be46970b59529c518db9fafa3ad7f10b11c51eba6ef03bda9aa7d81113c::server:033d7d2a6381aea7330f334e92228cde --node-ip 192.168.88.c --tls-san 192.168.88.a --tls-san 192.168.88.b --tls-san 192.168.88.c [...]
slave2后面的192.168.88.a也可以替换成192.168.88.b,因为这个IP地址是slave1虚拟机的地址,该虚拟机已经在第(2)步骤加入集群,后续节点可以使用任意地址加入集群,不一定必须是master地址。
执行以上三个步骤,高可用控制平面模式的集群就安装完成,可以在任意一台虚拟机上执行如下命令查看集群节点信息:
[root@slave1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane,etcd,master 1h v1.29.6+k3s1
slave1 Ready control-plane,etcd,master 1h v1.29.6+k3s1
slave2 Ready control-plane,etcd,master 1h v1.29.6+k3s1
可以看到上面三个节点都是控制平面节点,与单控制平面模式不同,高可用控制平面节点的ROLES还多了个etcd。
高可用控制平面模式k3s卸载
如果想要将安装的k3s卸载,可以在控制平面节点和额外控制平面节点执行如下命令。
控制平面节点:
[root@master ~]# /usr/local/bin/k3s-uninstall.sh
额外控制平面节点1:
[root@slave1 ~]# /usr/local/bin/k3s-uninstall.sh
额外控制平面节点2(如果有安装过额外控制平面节点2):
[root@slave2 ~]# /usr/local/bin/k3s-uninstall.sh
工作节点(如果有安装过工作节点):
[root@worker1 ~]# /usr/local/bin/k3s-agent-uninstall.sh
7.3 混合模式安装及卸载
混合模式是这三种模式中最简单的一个,也仅需要一台虚拟机。执行如下命令即可完成安装:
[root@master install-k3s]# ./install-k3s.sh master
安装完成后,就有了一个由控制平面节点和工作节点在同一虚拟机上的k3s混合节点环境,可以对2-12开头目录的示例进行验证。
混合模式k3s卸载
混合模式k3s的卸载非常简单,只需要执行如下命令。
[root@master ~]# /usr/local/bin/k3s-uninstall.sh
8 安装Helm
注意:Helm只能装在主节点上,且前提是k3s已经安装成功。Helm无法装在工作节点!!!
Helm是Kubernetes的包管理器,用Chart来打包、版本化、发布和管理K8s应用,和Linux系统的apt/yum类似。在第12节会有详细介绍,如果不需要使用Helm,也可以不安装,跳过本节。
进入k8s-test/0-components/install-helm目录,执行./install_helm.sh。
如果出现如下错误,可以手动执行一遍source /etc/profile或重启系统:
[root@master ~]# helm list
Error: Kubernetes cluster unreachable: Get "http://localhost:8080/version": dial tcp [::1]:8080: connect: connection refused
执行下面的命令,重新加载配置:
[root@master install-helm]# source /etc/profile
看到如下提示,表示helm安装成功:
[root@master install-helm]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
9 搭建nfs服务器
Kubernetes 持久化存储,PV/PVC将通过nfs提供跨节点共享存储,这就需要用到nfs服务。
我们可以将nfs服务部署在之前安装了k3s的这台虚拟机上,这样的好处是2-12节全部示例都在一台虚拟机就可以演示。当然,为了更好地达到演示效果,也可以将nfs服务部署在其他主机或虚拟机上,这样可以很直观地观察到本地存储和网络存储的区别。nfs服务和k3s服务两者相互独立,只要网络可达即可。
nfs服务的搭建步骤如下。
(1) 安装NFS服务
首先,安装NFS服务。打开终端并执行以下命令:
yum install nfs-utils
如果有离线安装包,也可以使用如下命令:
rpm -ivh nfs-utils-2.5.4-4.oe2203.x86_64.rpm
(2) 启动NFS服务
安装完成后,启动NFS服务:
systemctl start nfs-server
(3) 设置NFS服务开机自启
为了确保NFS服务在系统启动时自动启动,使用以下命令设置开机自启:
systemctl enable nfs-server
(4) 配置NFS共享目录
选择一个目录作为共享目录,例如/opt/nfs。首先,创建这个目录:
mkdir -p /opt/nfs
然后,设置该目录的权限,使其可供NFS使用:
chown -R nobody: /opt/nfs
chmod 0777 /opt/nfs
(5) 编辑NFS配置文件
编辑NFS的配置文件/etc/exports来添加共享规则。
vi /etc/exports
在文件中添加以下行来配置共享(例如,允许所有IP访问):
/opt/nfs *(rw,sync,no_root_squash)
这行配置的意思是:将/opt/nfs目录以读写方式(rw)、同步方式(sync)共享给所有主机,并且不禁止root用户访问(no_root_squash)。
(6) 应用配置并重启NFS服务
应用/etc/exports文件的更改,并重启NFS服务以使更改生效:
exportfs -arv
systemctl restart nfs-server(如发现更改未生效,可以重启nfs服务,正常情况,不需要重启)
(7) 测试NFS共享
在客户端机器上,安装NFS客户端工具:
yum install nfs-utils
然后,挂载NFS共享:
mount -t nfs <server_ip>:/opt/nfs /opt/nfs_share
至此,NFS服务搭建成功。
10 使用
2-12开头的目录为基于k3s环境的一些单机示例,这些示例仅在一个虚拟机环境下即可完成,不需要多台虚拟机,因为使用./install-k3s.sh master安装成功后,本机为控制平面节点兼工作节点模式。
13-17开头的目录需要多节点集群环境才可以进行验证,正常需要三台虚拟机,如果只有两台虚拟机,有一些示例将无法顺利演示。
11 本文配套资料地址
本文配套资料。
点击下载:https://download.csdn.net/download/field1003/91965690
更多推荐

所有评论(0)