# 工具部署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包、文档、离线镜像、相关软件等。

7F63CRY6ACAFE

# 工具运行原理

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] 之类的节名称,否则会导致脚本无法正常识别。

5AZ4KRY6ABQFK

注意:如果部署高可用组件,k8s的vip地址在脚本内进行设置。

# 其他配置

按照脚本内的注释调整即可,不再赘述。对于不熟悉的参数,保持默认即可。

1742278648627.png

# 文件分发

脚本自动按需查找和分发文件到对应节点中,无需手动执行。

# 安装部署

传参示例: 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

# 部署过程屏幕输出

XCN6KRY6AAQDS

# 异常后卸载

遇到异常后,复制异常块去问AI,然后分析解决问题。

解决问题后执行 bash multi-install-k8s.sh r 命令获取卸载操作步骤,详细按照卸载步骤在各节点执行相关命令!

全部卸载干净后重新执行部署操作。

1756982627743.png

# 新装和扩容后的节点信息

ZHZ6MRY6ADADW

# 常见问题

# kylin-10-sp3-2403-20240426 的版本可能会导致ssh连接失败

1752059369462.png

# 持久化存储

# longhorn 适用场景

需要高性能、高可靠性的分布式块存储。

工作负载是数据库(MySQL, PostgreSQL等)。数据库通常需要低延迟、高IOPS的块设备,并且一个数据库实例通常只由一个Pod访问(RWO模式完美契合)。

应用是有状态的单实例应用(如 Redis, 单实例的ES)。

需要高级功能,如快照、备份、异地恢复。

不需要多个Pod同时读写同一个卷。

# NFS Subdir External Provisioner 适用场景

核心需求是多个Pod共享和读写同一份数据(RWX模式)。

应用是静态网站托管、CI/CD 构建缓存、共享配置文件、用户上传的附件目录(如 uploads)。

追求极致的简单和轻量,并且已经有一台NFS服务器。

对性能要求不是极端苛刻。

编撰人:yangfc、het