# 工具部署Kubernetes
工具类型: shell 脚本
文档更新: 2025-02-22 16:43:06
适用场景: 非云化产品的的私有化部署(自建环境)
# 免责申明和使用须知
1.工具定位声明
- 本工具为 辅助部署工具,旨在帮助快速搭建云原生环境所依赖的中间件(包含并不仅限于Kubernetes、Nacos、Kafka等),便于项目组快速部署微服务应用。
- 不承诺提供中间件的长期完整维护、支持或安全保障。
2.开源组件免责声明
- 本工具使用的 Kubernetes、etcd、calico、Nacos、Kafka等组件均为开源软件,受各自开源许可证保护。
- 本工具 不修改、不篡改 任何开源组件,仅作为安装和部署的辅助工具。
- 使用本工具即表示您已阅读并同意相关开源组件的 使用许可协议。
3.安全与责任声明
- 本工具 不承担 因使用过程中出现的安全问题、系统崩溃、数据丢失等后果的责任。
- 建议用户自行评估部署环境的安全性,并根据自身需求选择合适的版本和配置。
4.不提供长期维护
- 本工具仅为临时部署工具,不承诺对中间件进行持续更新、补丁修复、安全处置和兼容性支持。
- 用户应自行关注官方更新,并根据实际需要决定是否升级或更换工具。
5.商业使用提醒
- 若您将本工具用于 商业环境,请确保所有使用组件符合其 开源许可证,并遵守相关法律法规。
- 本工具不提供任何形式的商业支持或担保。
6.用户自主决策
- 本工具仅供参考和学习使用,最终部署方案由用户自行决定。
- 在使用前,请确保您具备足够的技术能力,并了解Kubernetes、Nacos、Kafka等等云原生组件的运行机制和配置方法。
# 相关下载
安装工具-新脚本: https://pan.baidu.com/s/1WSUpcnKpjUezYiwJXbYqwQ?pwd=2025
安装工具-老脚本: https://pan.baidu.com/s/1kkZ1JhpVJxFUA2fpvJ4DWg?pwd=2023
新脚本特性
1、支持 单主集群/多主集群 多种组合及节点扩容
2、支持 密码/密钥 两种登录方式进行远程部署
3、支持 docker/containerd 两种容器运行时
4、支持 flannel/calico/cilium 三种CNI插件
5、支持 kube-vip/keepalived+haproxy/external-lb 三种种高可用组件
6、支持 控制平面端点采用 IP/域名 两种方式
7、支持部署 metallb 负载均衡器
8、支持部署 ingress-nginx|traefik|nginx-ingress 三种 ingress 控制器
9、支持部署 longhorn/nfs-subdir-external-provisioner 两种持久化存储方案
10、支持部署 metrics-server/dashboard 等仪表盘/面板
11、支持部署 prometheus/grafana 等监控组件
12、支持调整 k8s 证书期限为10年或100年
13、支持开启 bgp 模式
# 环境支持
# 平台架构
只支持 amd64 和 arm64 两种硬件平台。
# 红帽家族
RHEL 7/8/9/10
CentOS 7/8
AlmaLinux 8/9/10
Rocky 8/9/10
OracleLinux 7/8/9/10
# 德班家族
Debian 10/11/12/13
Ubuntu 18.04/20.04/22.04/24.04
# Suse家族
SLES 15.4/15.5/15.6/15.7
openSuse 15.4/15.5/15.6
# 国产系统
OpenCloudOS 8/9
UOS 1050/1060/1070 A/D/E系列
Kylin V10/v11 SP1/SP2/SP3
OpenEuler 20.03/22.03/24.03 SP1/SP2/SP3/SP4
Anolis 7/8/9/10
bclinux 8
# 节点个数
节点个数: 奇数个 master 节点 + 任意个 worker 节点
具体节点个数与当前部署的环境作用和并发等有关,请参考资源准备手册提前准备相对应的节点个数。
# 相关组件
集群版本: containerd 1.7.x/2.0.x | docker 27.x.x + k8s 1.3[0-2].x
网络插件: calico 3.29.x | cilium 1.1[6-9].x
存储插件: longhorn 1.[7-9].x
ingress : traefik 3.[2-9].x | ingress-nginx 4.12.x
高 可 用: kube-vip 0.[89].x | keepalived+haproxy
负载均衡: metallb 0.14.x
# 脚本用法
本小节只是概述,不用深究,具体操作见后续章节:
安装准备: 上传 脚本/安装文件 到运维机上
参数修改: 设置 .sh 脚本内的相关参数以及 cfg/k8s.hosts 文件中的节点信息 并保存
new表示全新安装,add表示扩容安装
传参示例: bash multi-install-k8s.sh [i|c|d] <new|add> | [r|t|v]
执行部署: bash multi-install-k8s.sh i <new|add>
卸载部署: bash multi-install-k8s.sh r
需求检查: bash multi-install-k8s.sh c <new|add>
部署测试: bash multi-install-k8s.sh t
安装依赖: bash multi-install-k8s.sh d <new|add>
版本信息: bash multi-install-k8s.sh v
# 补充说明
1、只支持离线部署,不支持在线部署,故需要提前下载本工具并上传到运维服务器。
2、执行stat -fc %T /sys/fs/cgroup
检查 cgroup 版本 在 1.31.0 开始 cgroup v1 转为维护模式 1.32.0 开始不再支持。
3、为了减少潜在的问题和确保最佳的功能兼容性和稳定性,要求所有节点都使用相同的硬件平台、相同的操作系统、相同的内核版本、相同的unix时间戳。
4、如果有高级需求且熟悉bash以及K8S和各组件 可适当调整脚本 实现完全脱离 iptables/ipvs 的依赖。
5、所有集群节点必须确保可正常使用,systemd/systemctl/ssh/sftp-server
这几个命令需要确保可用,节点之间可正常互访互联。
6、keepalived/haproxy 不支持在 master 节点之外的主机上进行部署,将与 k8s 集群件一起集中部署在所有 master节点中(包含扩容的master节点)。
7、为避免后续扩容带来的复杂性,强烈建议,无论是单主集群还是多主集群,都提供一个虚拟IP部署HA组件。
8、不支持从23年发布的老脚本扩容,不支持对非当前脚本部署的集群进行扩容。扩容时尽量使用部署时的采用的软件版本,避免因软件版本不一致引发兼容问题。
9、为避免误删,不支持自动卸载k8s集群。但是会输出卸载操作的方法供参考。
# 安装准备
# 磁盘规划
脚本默认把容器和kubelet的相关数据放在 /data
的不同目录下,从而避免撑爆系统盘。
如果有独立磁盘的,请把独立磁盘挂载到 /data
目录后再进行安装。
正式环境强烈建议挂载独立存储盘给 docker/containerd/kubelet
使用。
部署期间会产生临时文件,集群节点及运维机需预留至少 50G 到 100G 的存储空间。
# 压缩包说明
<arch>
表示平台架构,<version>
表示版本号。
1、两种架构下的压缩包分别带有amd64 和 arm64 字样。
2、两种压缩格式:7z 和 tgz。
3、K8S集群件和容器运行时都是采用二进制离线部署。
4、K8S的可选组件calico采用清单方式部署,其他一律采用helm chart包部署。
如果不想单独下载各自的软件和镜像,可下载全量包,全量包包含了部署脚本、chart包、文档、离线镜像、相关软件等。
# 工具运行原理
K8S工具部署原理是:[Linux运维机(最普通配置)] —-SSH远程部署—-> [K8s Master/K8s Worker]
故,如果是多台机器部署K8S,需要指定一台机器作为运维机,并且能SSH远程到别的服务器进行部署:
- 可以是K8S服务器之外的机器,专门一个机器放工具,但要确保该机器能SSH到所有K8S服务器
- 也可以是K8S中的一个服务器兼职做运维机,比如放到K8S Master一台服务器上,也要确保该机器能SSH到所有K8S服务器
强烈建议在安装部署前先临时关掉所有K8S服务器的防火墙,避免不必要的异常发生!
# 文件上传
1、上传 脚本/安装文件/镜像文件 到运维机上。
2、将脚本文件上传并解压,7z格式使用7zzs,tgz格式的使用tar。
3、可以使用自己准备的离线镜像包,也可以使用预置离线镜像包。随脚本预置的镜像的各版本都已在 amd64/arm64 上做了测试。
4、建议下载全量包进行安装
# 解包命令示例
在脚本所在目录执行解压。
7z格式解压命令参考
linux下首次解压全量包时,可能操作系统没有 7zzs 的命令,可在全量包的目录下下载对应平台架构的 7zzs 上传到脚本旁边,授予可执行权限后,用来执行解压7z后缀名的压缩包。
# 解压全量包-amd64
7zzs x -y multi-install-k8s-v1.32.1-amd64.7z
# 解压全量包-arm64
7zzs x -y multi-install-k8s-v1.32.1-arm64.7z
tgz格式解压命令参考
# 解压脚本安装文件-amd64
tar -xf multi-install-k8s-amd64.tgz
# 解压脚本安装文件-arm64
tar -xf multi-install-k8s-arm64.tgz
非全量包按照脚本中已设置为启用的组件按需解包
# 其他的7z包依此类推
7zzs x -y release/images/calico-v3.29.2-images-amd64.7z
当全量包为 tgz 格式时,使用以下命令解压
# amd64
tar -xf multi-install-k8s-v1.33.1-amd64.tgz
# arm64
tar -xf multi-install-k8s-v1.33.1-arm64.tgz
# 快速部署
脚本部署工具把K8S集群按照节点数和运行模式,分为以下两种部署类型
# 单主集群
- 高可用1+N单主集群:1个master节点 + N个worker节点
脚本里设置 haSolution="kv" 或 haSolution="kh" 或 haSolution="el" 此时支持 master 或 worker 节点扩容
- 非高可用1+N单主集群:1个master节点 + N个worker节点
脚本里设置 haSolution="no" 此时不支持 master 节点扩容 但是支持 worker 节点扩容
通俗说:如果没有VIP,纯粹部署POC使用,需要设置成 haSolution="no"
# 多主集群
- 高可用N+N多主集群:奇数个master节点 + 正整数个worker节点
脚本里设置 haSolution="kv" 或 haSolution="kh" 或 haSolution="el" 此时支持 master 或 worker 节点扩容
必须预先准备1个VIP地址
# 快速部署大致步骤
1、修改脚本关键配置
1.1 按需调整 cfg/k8s.hosts
1.2 按需调整 multi-install-k8s.sh 以下参数
k8sVipAddr="192.168.100.190"
haSolution="kv"
2、修改SSH登录配置
cfg/k8s.hosts
3、运行脚本
# 脚本参数调整
根据实际情况,修改脚本内的相关参数并保存。
# 节点清单
集群节点清单文件:multi-install-k8s.nodes 或 cfg/k8s.hosts 或 etc/k8s.hosts 不要修改节点清单文件的文件名,也不要删除或修改 .nodes 或 .hosts 文件内的类似 [master] 之类的节名称,否则会导致脚本无法正常识别。
注意:如果部署高可用组件,k8s的vip地址在脚本内进行设置。
# 其他配置
按照脚本内的注释调整即可,不再赘述。对于不熟悉的参数,保持默认即可。
# 文件分发
脚本自动按需查找和分发文件到对应节点中,无需手动执行。
# 安装部署
传参示例: bash multi-install-k8s.sh [i|c|d] <new|add> |[r|t|v]
执行部署: bash multi-install-k8s.sh i <new|add>
卸载集群: bash multi-install-k8s.sh r
需求检查: bash multi-install-k8s.sh c <new|add>
部署测试: bash multi-install-k8s.sh t
安装依赖: bash multi-install-k8s.sh d <new|add>
版本信息: bash multi-install-k8s.sh v
# 部署过程屏幕输出
# 异常后卸载
遇到异常后,复制异常块去问AI,然后分析解决问题。
解决问题后执行 bash multi-install-k8s.sh r
命令获取卸载操作步骤,详细按照卸载步骤在各节点执行相关命令!
全部卸载干净后重新执行部署操作。
# 新装和扩容后的节点信息
# 常见问题
# kylin-10-sp3-2403-20240426 的版本可能会导致ssh连接失败
# 持久化存储
# longhorn 适用场景
需要高性能、高可靠性的分布式块存储。
工作负载是数据库(MySQL, PostgreSQL等)。数据库通常需要低延迟、高IOPS的块设备,并且一个数据库实例通常只由一个Pod访问(RWO模式完美契合)。
应用是有状态的单实例应用(如 Redis, 单实例的ES)。
需要高级功能,如快照、备份、异地恢复。
不需要多个Pod同时读写同一个卷。
# NFS Subdir External Provisioner 适用场景
核心需求是多个Pod共享和读写同一份数据(RWX模式)。
应用是静态网站托管、CI/CD 构建缓存、共享配置文件、用户上传的附件目录(如 uploads)。
追求极致的简单和轻量,并且已经有一台NFS服务器。
对性能要求不是极端苛刻。
快速跳转
