Kainstall
Use shell scripts to install kubernetes(k8s) high availability clusters and addon components based on kubeadmin with one click.使用shell脚本基于kubeadmin一键安装kubernetes 高可用集群和addon组件。
Install / Use
/learn @lework/KainstallREADME
kainstall = kubeadm install kubernetes
使用 shell 脚本, 基于 kubeadm 一键部署 kubernetes HA 集群
为什么
为什么要搞这个?Ansible PlayBook 不好么?
因为懒,Ansible PlayBook 编排是非常给力的,不过需要安装 Python 和 Ansible, 且需要下载多个 yaml 文件 。因为懒,我想要个更简单的方式来快速部署一个分布式的 Kubernetes HA 集群, 使用 shell 脚本可以不借助外力直接在服务器上运行,省时省力。 并且 shell 脚本只有一个文件,文件大小100 KB 左右,非常小巧,可以实现一条命令安装集群的超快体验,而且配合离线安装包,可以在不联网的环境下安装集群,这体验真的非常爽啊。
要求
OS: centos 7.x x64 , centos 8.x x64, debian 9.x x64 , debian 10.x x64, ubuntu 20.04 x64, ubuntu 20.10 x64, ubuntu 21.04 x64
CPU: 2C
MEM: 4G
认证: 集群节点需统一认证; 使用密码认证时,集群节点需使用同一用户名和密码,使用密钥认证时,集群节点需使用同一个密钥文件登陆。
未指定离线包时,需要连通外网,用于下载 kube 组件和 docker 镜像。
架构

如需按照步骤安装集群,可参考 https://lework.github.io/2019/10/01/kubeadm-install/
功能
- 服务器初始化。
- 关闭
selinux - 关闭
swap - 关闭
firewalld - 配置
epel源 - 修改
limits - 配置内核参数
- 配置
history记录 - 配置
journal日志 - 配置
chrony时间同步 - 添加
ssh-login-info信息 - 配置
audit审计 - 安装
ipvs模块 - 更新内核
- 关闭
- 安装
kube组件。 - 初始化
kubernetes集群,以及增加或删除节点。 - 安装
ingress组件,可选nginx,traefik。 - 安装
network组件,可选flannel,calico,cilium。 - 安装
monitor组件,可选prometheus。 - 安装
log组件,可选elasticsearch。 - 安装
storage组件,可选rook,longhorn。 - 安装
web ui组件,可选dashboard,kubesphere。 - 安装
addon组件,可选metrics-server,nodelocaldns。 - 安装
cri组件,可选docker,containerd,cri-o - 升级到
kubernetes指定版本。 - 更新集群证书。
- 添加运维操作,如备份etcd快照。
- 支持离线部署。
- 支持sudo特权。
- 支持10年证书期限。
- 支持脚本更新。
默认版本
| 分类 | 软件 | kainstall 默认版本 | 软件最新版本 |
| ------------------------------------------------ | ------------------ | ------------------------------------------------------------ | ------------------------------------------------ |
| common | containerd | latest | |
| common | kubernetes | latest |
|
| network | flannel | 0.24.0 |
|
| network | calico | 3.27.0 |
|
| network | cilium | 1.14.5 |
|
| addons | metrics server | 0.6.4 |
|
| addons | nodelocaldns | latest | 1.22.28 |
| ingress | ingress nginx controller | 1.9.5 |
|
| ingress | traefik | 2.10.7 |
|
| monitor | kube_prometheus | 0.13.0 |
|
| log | elasticsearch | 8.11.3 |
|
| storage | rook | 1.13.1 |
|
| storage | longhorn | 1.5.3 |
|
| ui | kubernetes_dashboard | 2.7.0 |
|
| ui | kubesphere | 3.3.0 |
|
除 kube组件 版本可以通过参数(--version) 指定外,其他的软件版本需在脚本中指定。
使用
下载脚本
# centos
wget https://ghproxy.com/https://raw.githubusercontent.com/lework/kainstall/master/kainstall-centos.sh
# debian
wget https://ghproxy.com/https://raw.githubusercontent.com/lework/kainstall/master/kainstall-debian.sh
# ubuntu
wget https://ghproxy.com/https://raw.githubusercontent.com/lework/kainstall/master/kainstall-ubuntu.sh
帮助信息
# bash kainstall-centos.sh
Install kubernetes cluster using kubeadm.
Usage:
kainstall-centos.sh [command]
Available Commands:
init Init Kubernetes cluster.
reset Reset Kubernetes cluster.
add Add nodes to the cluster.
del Remove node from the cluster.
renew-cert Renew all available certificates.
upgrade Upgrading kubeadm clusters.
update Update script file.
Flag:
-m,--master master node, default: ''
-w,--worker work node, default: ''
-u,--user ssh user, default: root
-p,--password ssh password
--private-key ssh private key
-P,--port ssh port, default: 22
-v,--version kube version, default: latest
-n,--network cluster network, choose: [flannel,calico,cilium], default: flannel
-i,--ingress ingress controller, choose: [nginx,traefik], default: nginx
-ui,--ui cluster web ui, choose: [dashboard,kubesphere], default: dashboard
-a,--addon cluster add-ons, choose: [metrics-server,nodelocaldns], default: metrics-server
-M,--monitor cluster monitor, choose: [prometheus]
-l,--log cluster log, choose: [elasticsearch]
-s,--storage cluster storage, choose: [rook,longhorn]
--cri cri runtime, choose: [docker,containerd,cri-o], default: containerd
--cri-version cri version, default: latest
--cri-endpoint cri endpoint, default: /var/run/dockershim.sock
-U,--upgrade-kernel upgrade kernel
-of,--offline-file specify the offline package file to load
--10years the certificate period is 10 years.
--sudo sudo mode
--sudo-user sudo user
--sudo-password sudo user password
Example:
[init cluster]
kainstall-centos.sh init \
--master 192.168.77.130,192.168.77.131,192.168.77.132 \
--worker 192.168.77.133,192.168.77.134,192.168.77.135 \
--user root \
--password 123456 \
--version 1.20.6
[reset cluster]
kainstall-centos.sh reset \
--user root \
--password 123456
[add node]
kainstall-centos.sh add \
--master 192.168.77.140,192.168.77.141 \
--worker 192.168.77.143,192.168.77.144 \
--user root \
--password 123456 \
--version 1.20.6
[del node]
kainstall-centos.sh del \
--master 192.168.77.140,192.168.77.141 \
--worker 192.168.77.143,192.168.77.144 \
--user root \
--password 123456
[other]
kainstall-centos.sh renew-cert --user root --password 123456
kainstall-centos.sh upgrade --version 1.20.6 --user root --password 123456
kainstall-centos.sh update
kainstall-centos.sh add --ingress traefik
kainstall-centos.sh add --monitor prometheus
kainstall-centos.sh add --log elasticsearch
kainstall-centos.sh add --storage rook
kainstall-centos.sh add --ui dashboard
kainstall-centos.sh add --addon nodelocaldns
初始化集群
# 使用脚本参数
bash kainstall-centos.sh init \
--master 192.168.77.130,192.168.77.131,192.168.77.132 \
--worker 192.168.77.133,192.168.77.134 \
--user root \
--password 123456 \
--port 22 \
--version 1.20.6
# 使用环境变量
export MASTER_NODES="192.168.77.130,192.168.77.131,192.168.77.132"
export WORKER_NODES="192.168.77.133,192.168.77.134"
export SSH_USER="root"
export SSH_PASSWORD="123456"
export SSH_PORT="22"
export KUBE_VERSION="1.20.6"
bash kainstall-centos.sh init
默认情况下,除了初始化集群外,还会安装
ingress: nginx,ui: dashboard两个组件。
还可以使用一键安装方式, 连下载都省略了。
bash -c "$(curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/lework/kainstall/master/kainstall-centos.sh)" \
- init \
--master 192.168.77.130,192.168.77.131,192.168.77.132 \
--worker 192.168.77.133,192.168.77.134 \
--user root \
--password 123456 \
--port 22 \
--version 1.20.6
增加节点
操作需在 k8s master 节点上操作,ssh连接信息非默认时请指定
# 增加单个master节点
bash kainstall-centos.sh add --master 192.168.77.135
# 增加单个worker节点
bash kainstall-centos.sh add --worker 192.168.77.134
# 同时增加
bash kainstall-centos.sh add --master 192.168.77.135,192.168.77.136 --worker 192.168.77.137,192.168.77.138
删除节点
操作需在 k8s master 节点上操作,ssh连接信息非默认时请指定
# 删除单个master节点
bash kainstall-centos.sh del --master 192.168.77.135
# 删除单个worker节点
bash kainstall-centos.sh del --worker 192.168.77.134
# 同时删除
bash kainstall-centos.sh del --master 192.168.77.135,192.168.77.136 --worker 192.168.77.137,192.168.77.138
重置集群
bash kainstall-centos.sh reset \
--user root \
--password 123456 \
--port 22 \
其他操作
操作需在 k8s master 节点上操作,ssh连接信息非默认时请指定 注意: 添加组件时请保持节点的内存和cpu至少为
2C4G的空闲。否则会导致节点下线且服务器卡死。
