使用 shell 部署二进制 k8s 集群的好处在于时间消耗比较小
- 传统手动部署,在熟练的情况下,也会消耗半天左右的时间,并且操作过程中,也容易出现误操作的情况,非常耗费时间,
- 使用脚本部署,在网络和磁盘性能好的情况下,只需要几分钟即可完成部署,只需要前期配置好配置文件,接杯水的功夫就完成了
- 为了方便脚本更新迭代,脚本上传到 gitee 了,可以直接
git clone https://gitee.com/chen2ha/shell_install_binary_k8s_cluster.git
来获取完整的脚本
请使用
root
用户执行此脚本脚本执行前,请先关闭 firewall 以及 selinux(脚本内不做处理)
- 参考命令:
- 关闭防火墙:
systemctl disable firewalld --now
- 关闭 selinux(重启后生效):
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
- 临时关闭 selinux:
setenforce 0
脚本执行前,请提前做好主机之间的免密操作以及时间同步
- 免密脚本可以参考
bin/ssh_key.sh
[脚本依赖 expect 命令,需要提前安装
]
- 使用方法:
- 在
bin/ssh_list.txt
文件内填写所有主机的信息,主机信息格式:<用户名>
<用户密码> - 执行免密脚本
bash bin/ssh_key.sh
集群部署:
- 脚本执行前,请修改
conf/install_conf.sh
文件,填写需要部署的节点 ip、数据存储路径(注意检查磁盘是否有足够的空间)、服务端口是否被占用(若被占用,可修改配置文件)、相关的服务ip(cluster_cidr、service_cidr、cluster_svc_ip、cluster_dns_ip)是否和宿主机网段有冲突- 执行
bash bin/00.install.sh
开始部署 kubernetes 集群节点扩容:
- 修改
conf/install_conf.sh
文件内的work_nodes
变量值,将 ip 修改为需要扩容的节点 ip
- 执行
bash bin/03.deploy_node.sh
即可脚本执行完成后,
kubectl
命令会找不到,此时执行source /etc/profile
命令即可(因为当前终端没有重新加载PATH变量
,所以只需要通过source
重新加载变量即可)此脚本基于 kubernetes v1.19.7 编写,如若需要安装高版本或者低版本,需要注意 service 文件内的启动参数是否需要修改,因为版本迭代,会导致一些参数不再被使用,或者被其他参数替代,如果不修改,会影响服务启动,导致 kubernetes 集群部署失败
关于二进制文件
- 二进制文件都存放在 packages 目录下,带有目录的,不要变动目录的名称或删除目录,会影响服务的部署
关于镜像
- 镜像都存放在 images 目录下
- 镜像的 tag ,可以在 var_list.sh 文件内修改
- 镜像文件的名称,可以在 var_list.sh 文件内修改
关于 var_list.sh 文件
- 有很多定义的变量存放在 var_list.sh 文件里面,比如 ssh 的端口等等,有特殊需求的时候,可以修改使用
.
├── bin # 脚本存放路径
│ ├── 00.install.sh # 总安装脚本
│ ├── 01.deploy_system.sh # 环境初始化脚本
│ ├── 02.deploy_master.sh # master 节点部署脚本
│ ├── 03.deploy_node.sh # node 节点部署脚本
│ ├── deploy_cert.sh # 生成证书脚本 [ 会用到 cfssl 和 kubectl 命令 ]
│ ├── print_log.sh # 终端输出内容模板
│ ├── ssh_key.sh # ssh 免密脚本
│ ├── ssh_list.txt # ssh 免密脚本调用的主机清单
│ └── var_list.sh # 一些变量的维护,需要自定义的情况下可以修改这个文件
├── conf # 配置文件存放路径
│ ├── install_conf.sh # 安装使用的配置文件
│ └── template # 存放的模板文件
│ ├── cert # k8s 证书模板
│ │ ├── admin-csr.json.template
│ │ ├── ca-config.json.template
│ │ ├── ca-csr.json.template
│ │ ├── etcd-csr.json.template
│ │ ├── kube-controller-manager-csr.json.template
│ │ ├── kubelet-csr.json.template
│ │ ├── kube-proxy-csr.json.template
│ │ ├── kubernetes-csr.json.template
│ │ ├── kube-scheduler-csr.json.template
│ │ └── metrics-server-csr.json.template
│ ├── service # systemctl service 文件模板
│ │ ├── 10-flannel.conflist.template
│ │ ├── cni-default.conf.template
│ │ ├── config.toml.template
│ │ ├── containerd.service.template
│ │ ├── crictl.yaml.template
│ │ ├── daemon.json.template
│ │ ├── docker.service.template
│ │ ├── kube-apiserver.service.template
│ │ ├── kube-controller-manager.service.template
│ │ ├── kube-etcd.service.template
│ │ ├── kubelet.service.template
│ │ ├── kube-nginx.conf.template
│ │ ├── kube-nginx.service.template
│ │ ├── kube-proxy.service.template
│ │ └── kube-scheduler.service.template
│ ├── system # 系统服务使用的一些模板
│ │ ├── history.sh.template
│ │ ├── kubernetes_journald.conf.template
│ │ ├── kubernetes_limits.conf.template
│ │ ├── kubernetes_sysctl.conf.template
│ │ └── rc.local.template
│ └── yaml # yaml 文件模板
│ ├── coredns.yaml.template
│ ├── flannel.yaml.template
│ ├── kubelet-config.yaml.template
│ └── kube-proxy-config.yaml.template
├── images # 镜像存放路径
│ ├── coredns-v1.7.0.tar
│ ├── flannel-v0.15.1.tar
│ └── pause-v3.2.tar
├── packages # 二进制文件存放路径
│ ├── cfssl
│ │ ├── cfssl
│ │ └── cfssljson
│ ├── cni
│ │ ├── bridge
│ │ ├── flannel
│ │ ├── host-local
│ │ ├── loopback
│ │ └── portmap
│ ├── conntrack
│ ├── containerd
│ │ └── bin
│ │ ├── containerd
│ │ ├── containerd-shim
│ │ ├── containerd-shim-runc-v1
│ │ ├── containerd-shim-runc-v2
│ │ ├── crictl
│ │ ├── ctr
│ │ └── runc
│ ├── docker
│ │ ├── containerd
│ │ ├── containerd-shim
│ │ ├── ctr
│ │ ├── docker
│ │ ├── dockerd
│ │ ├── docker-init
│ │ ├── docker-proxy
│ │ └── runc
│ ├── etcd
│ │ ├── etcd
│ │ └── etcdctl
│ ├── kubernetes
│ │ ├── kubeadm
│ │ ├── kube-apiserver
│ │ ├── kube-controller-manager
│ │ ├── kubectl
│ │ ├── kubelet
│ │ ├── kube-proxy
│ │ └── kube-scheduler
│ └── nginx
│ └── nginx
└── README.md