介绍

通过kubeadm进行一键式部署k8s集群根据不同的启动方式,可部署单节点、一主多从、多主多从高可用的k8s集群通过ansible快速部署k8s的基础组件(helm、nfs、ingress、monitoring【联网|离线镜像】、kuboard)

软件架构

通过部署包中的run.sh进行统一入口,进行初始化环境(部署节点)ansible+shell实现自动获取host文件中的相关信息进行自动化部署

版本介绍

需要提前准备多台主机,根据准备机器的多少,修改host文件,本环境是为了开发环境中快速部署k8s集群采用kubeadm安装,重新编译、修改证书时间、默认100年安装docker的yum源是基于Centos7.9,版本是:23.0.1通过nexus私服进行相关离线环境的管理版本:3.37.3.02安装ansible时,使用docker镜像封装,版本: 2.9.27安装containerd作为k8s运行时,版本时:1.6.6安装helm时,使用离线安装,版本: v3.10.2高可用安装时:采用haproxy(1.5.18-9)+keepalived(1.3.5-19)添加kuboard:v3面板的安装(ansible)主机:单节点、单容器(待完善)

注意事项

采用离线安装时,需要注意,因安装集群时需要同步时间,需要提供时间同步服务的地址安装监控组件时,只能选择在线的方式,因离线镜像未整合到部署包里需要通过脚本提前下载监控组件的镜像,并导入镜像仓库中后方能使用离线的方式启动监控组件采用nexus进行统一管理,导致部署包较大且部署节点所需的资源相对较高、不能复用node节点

操作步骤

环境准备

主机名IP地址操作系统配置作用k8s-master01192.168.1.21CentOS7.9最低配置2C2G管理集群k8s-master02192.168.1.22CentOS7.9最低配置2C2G管理集群k8s-master02192.168.1.23CentOS7.9最低配置2C2G管理集群k8s-node01192.168.1.31CentOS7.9最低配置2C2G作业节点k8s-node02192.168.1.32CentOS7.9最低配置2C2G作业节点k8s-node03192.168.1.33CentOS7.9最低配置2C2G作业节点ansible192.168.1.31CentOS7.9最低配置2C4G-100G部署节点(不可复用)

注意

部署节点通过docker启动nexus服务、nexus服务建议使用CPU是4C由于k8s版本是v1.26.3的版本,运行时采用containerd、部署机采用docker导致部署节点不可复用注意系统版本,尤其时部署节点、其他系统版本可能会出现docker安装失败的情况

结构

master节点只能是三个节点(高可用版本),单节点只需填写一个node节点可以填写多个,根据实际情况确认高可用版本keepalived需要提前确认好vip建议机器处于同一网段中,或者同一局域网内

备注

单独找一台机器用于部署ansible服务,不接受复用但是需要确保机器资源充足,且相关的端口不会冲突(38081【yum】、38082【registry】)相关的网络关系需要提前确认三台master节点,可以是2n+1台,目前因本地环境,只测试了三台master其他节点尚未涉及

解压部署包

#上传部署包(xshell)

cd /opt #目录随意

yum -y install lrzsz

rz install_k8s_kubeadm_v1.26.03_20230402.tar.gz

#解压

tar -xvf install_k8s_kubeadm_v1.26.03_20230402.tar.gz

修改host文件

#部署机器,初始脚本、安装包镜像

[deploy_server]

192.168.1.10 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22

#多主多从

[kubernetes_master]

192.168.1.15 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-master01"

192.168.1.18 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-master02"

192.168.1.19 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-master03"

[kubernetes_node]

#192.168.1.18 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-node01"

#192.168.1.13 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-node02"

#双节点

[haproxy_keepalived]

192.168.1.15 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-master01"

192.168.1.18 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-master02"

[nodes:children]

kubernetes_master

kubernetes_node

[all:vars]

#脚本解析主机信息,层级默认只能添加3个,即3个master,3个node

Number="3"

master_vip="192.168.1.120" #keepalived使用的vip

add_node_hosts="yes" #添加主机信息(yes=合并,no=删除后新建[覆盖])

######################################################################################

#布尔值true or false

Basic_enable="true" #安装基础软件包

set_host_enable="true" #设置主机名注入/etc/hosts文件

metrics_server_enable="true" #安装metrics_server,kubectl top pod

clean_metrics_server="false" #配置出错,删除后重新安装

######################################################################################

#可选组件

######################################################################################

monitoring_enable="false" #是否安装监控组件,默认不安装

k8s_helm_enable="true" #k8s master节点安装helm客户端

helm_add_repo_local="true" #必须打开,后续组件通过helm本地仓库进行安装

helm_repo_online="false" #添加helm仓库(在线)

######################################################################################

#下述组件通过helm安装,默认安装helm

ingress_enable="true" #安装ingress服务

k8s_nfs_enable="false" #安装nfs-client服务,上述的地址必须填写,否则nfs客户端会启动失败

######################################################################################

#监控组件、k8s v1.21.1版本以上(在线)

#监控组件的镜像采用在线的模式,需要联网自动下载,减少离线安装包的大小

#git clone https://github.com/prometheus-operator/kube-prometheus.git

clean_monitoring="false" #是否清理当前已安装的监控组件,注意,修改前需要确认监控组件已经部署完成后需要清理

#监控组件服务

nodeExporter_enable="true" #采集器node_export

prometheus_enable="true" #安装Prometheus服务

grafana_enable="true" #是否安装grafana服务

ControlPlane_enable="true" #部署k8s ControlPlane,控制面板,里面有很多的设置放在一起的,用来设置规则

prometheusAdapter_enable="true" #prometheusAdapter

prometheusOperator_enable="true" #prometheusOperator

kube_state_metrics_enable="false" #kube_state_metrics

alertmanager_enalbe="false" #是否安装alertmanager服务

blackboxExporter_enalbe="false" #是否安装blackboxExporter服务

一主多从需要把kubernetes_master里只添加一个地址多主多从需要把kubernetes_master里添加三个地址, 脚本只支持添加三个master节点多主多从同时需要把haproxy_keepalived角色填写

脚本使用方式

执行方式注解sh run.sh获取脚本的执行帮助信息sh run.sh init初始化ansible机器,初始化环境章节详细介绍sh run.sh online在线安装(kuboard、monitoring组件) ,相关组件的镜像未合并到registry镜像里sh run.sh offline离线安装,通过脚本在线下载并保存离线镜像包,然后配合脚本导入离线环境的机器中使用sh run.sh ping验证ansible的网络是否正常通信sh run.sh install默认在线安装基础组件(monitoring组件),其他的组件则存放在本地的registry镜像仓库里

初始化环境

[root@registry install_k8s_kubeadm]# sh run.sh init

安装docker服务通过docker启动nexus服务,检查服务启动状态,登录镜像仓库通过docker启动ansible镜像服务并修改对应的文件

验证ansible配置

sh run.sh ping

安装k8s集群

[root@registry install_k8s_kubeadm]# sh run.sh offline

Offline(离线) Dashboard

----------------------------------------------------------------------------

1) 初始化环境(ansible))

2) 安装k8s集群[一主多从](1.26.3)

3) 安装k8s集群[多主多从](1.26.3)

4) 添加k8s node节点(1.26.3)

----------------------------------------------------------------------------

5) docker安装kuboard(v3)[离线]

6) k8s安装其他组件(monitoring、helm、nfs、ingress)[离线安装(monitoring)]

----------------------------------------------------------------------------

请输入对应的数字编号:

host文件需要提前修改、上面已介绍、文件内注释已注明确认host中用户名、密码、ip正确且网络连接正常后,回车,等待执行脚本结束

执行结果如下:

登录master的节点

一主多从

kubectl get nodes,pod -A

多主多从

查看master节点信息

kubectl get nodes,pod -A

添加node节点

在host文件下的kubernetes_node分组下添加新增的需要新增的节点,并把之前已添加的节点删除修改后执行 sh run.sh online脚本,选择4,添加node节点脚本正常执行完毕后检查各个节点的/etc/hosts文件,如果确认对应的域名解析,需要手动添加对应的主机关系注意:每次添加node节点时,需要把已填入集群的节点手动删除,否则会出现重复加入的操作导致剧本执行失败

[root@registry install_k8s_kubeadm]# sh run.sh offline

Offline(离线) Dashboard

----------------------------------------------------------------------------

1) 初始化环境(ansible))

2) 安装k8s集群[一主多从](1.26.3)

3) 安装k8s集群[多主多从](1.26.3)

4) 添加k8s node节点(1.26.3)

----------------------------------------------------------------------------

5) docker安装kuboard(v3)[离线]

6) k8s安装其他组件(monitoring、helm、nfs、ingress)[离线安装(monitoring)]

----------------------------------------------------------------------------

请输入对应的数字编号:4

本地环境资源不足、演示截图不添加

组件安装

默认安装helm,其中nfs和ingress服务通过helm部署、监控组件进行默认镜像不存在(在线安装可以)默认不安装,手动修改后安装,可以在安装k8s集群后进行安装使用也可以在安装集群的是否安装

安装方式

#离线安装

[root@registry install_k8s_kubeadm]# sh run.sh install

需要前修改上述图片中的布尔值,改为true时,开始执行安装因本地环境资源不足,不做演示截图

监控组件

注意:

因nexus占用的磁盘相对较大、为减少部署包的大小、监控方面的相关镜像未导入到nexus中提供脚本在线下载相关镜像并打包到相关路径中离线镜像(监控)下载地址链接:

拉取镜像

cd /opt/install_k8s_kubeadm

#pull相关镜像

sh init/load_monitoring.sh

导入镜像仓库(nexus)

[root@registry install_k8s_kubeadm]# sh init/load_monitoring.sh warehouse

【test 2023-04-02 17:14:13】 offline image not found,Please save and try again

【test 2023-04-02 17:14:13】 请把下载后的镜像monitoring-2023-04-02.tar.gz存放执行目录

【test 2023-04-02 17:14:13】 指定目录: /tmp/offline

通过上面的脚本先下载镜像并对应的安装包存放到指定路径下后执行脚本导入nexus仓库通过网盘下载并把对应的安装包存放指定路径后执行脚本导入nexus仓库两种方式二选一即可

界面查看

访问prometheus

访问地址: http://k8s-ip:30090

访问grafana

访问地址: http://k8s-ip:30000/ 登陆密码: admin/admin

添加node-exporter面板

下载k8s master节点的第一台机器上/opt/deploy/grafana/node_export.json文件通过浏览器登陆grafana平台,通过Dashboards按钮,鼠标停放,选择import出现导入界面,选择upload json file按钮,选择下载到本地的文件其他都是自动填充的,最后一个选择prometheus data source数据源后点击导入即可

ingress-nginx

使用方式,自行百度

kuboard的安装

#在线下载,网速较慢的情况下建议使用云主机下载

docker pull swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3

docker save swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3 -i kuboard.tar.gz

docker load -i kuboard.tar.gz

[root@registry ~]# docker load -i kuboard.tar.gz

2d8252e11370: Loading layer [==================================================>] 3.072kB/3.072kB

22d9813f1d6a: Loading layer [==================================================>] 9.216kB/9.216kB

331120fa4807: Loading layer [==================================================>] 23.75MB/23.75MB

b6e875ecbb12: Loading layer [==================================================>] 18.77MB/18.77MB

9b6a33d74d53: Loading layer [==================================================>] 42.52MB/42.52MB

87405db6d205: Loading layer [==================================================>] 2.024MB/2.024MB

c502deb85597: Loading layer [==================================================>] 28.67kB/28.67kB

f062a9dd21ed: Loading layer [==================================================>] 61.95kB/61.95kB

20f6f032efed: Loading layer [==================================================>] 42.06MB/42.06MB

ba47fe085ef6: Loading layer [==================================================>] 13.32MB/13.32MB

Loaded image: swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3

#网速ok,则无需上述操作,直接执行即可

[root@registry install_k8s_kubeadm]# sh run.sh online

online(在线) Dashboard

----------------------------------------------------------------------------

1) 初始化环境(ansible))

2) 安装k8s集群[一主多从](1.26.3)

3) 安装k8s集群[多主多从](1.26.3)

4) 添加k8s node节点(1.26.3)

----------------------------------------------------------------------------

5) docker安装kuboard(v3)[在线]

6) k8s安装其他组件(monitoring、helm、nfs、ingress)[在线安装(monitoring)]

----------------------------------------------------------------------------

请输入对应的数字编号:5

访问kuboard

http://ansible-ip:80

纳管集群

详细功能请查看kuboard的官方https://www.kuboard.cn/

证书查看

kubeadm 命令查看

#可以通过 kubeadm alpha certs check-expiration 命令查看相关证书是否过期。

#注:该命令仅在 v.15 之后的版本可用

kubeadm alpha certs check-expiration

# k8s v1.26.3

kubeadm certs check-expiration

openssl 命令查看

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '

kuboard界面查看

下载地址

链接:https://pan.baidu.com/s/1rtreX-EzQSthLgxpxBi4Pw?pwd=tyd6

新版本链接保留7天用于测试验证

总结

上述则是当前部署中可运行正常的服务执行sh Run.sh debug,则可以调试脚本,对应的启动文件,修改,则可以进行调试执行sh Run.sh install,修改host文件,则可以进行安装组件

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: