# shell_install_binary_k8s_cluster **Repository Path**: chen2ha/shell_install_binary_k8s_cluster ## Basic Information - **Project Name**: shell_install_binary_k8s_cluster - **Description**: 使用 shell 脚本部署二进制 k8s 集群 - **Primary Language**: Shell - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 0 - **Created**: 2023-02-24 - **Last Updated**: 2025-06-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 关于脚本 1. 请使用`root`用户执行此脚本 2. 脚本执行前,请先关闭 firewall 以及 selinux(脚本内不做处理) - 参考命令: - 关闭防火墙:`systemctl disable firewalld --now` - 关闭 selinux(重启后生效):`sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config` - 临时关闭 selinux:`setenforce 0` 3. 脚本执行前,请提前做好主机之间的免密操作以及时间同步 - 免密脚本可以参考 `bin/ssh_key.sh` [`脚本依赖 expect 命令,需要提前安装`] - 使用方法: - 在 `bin/ssh_list.txt` 文件内填写所有主机的信息,主机信息格式: `<用户名> <用户密码>` - 执行免密脚本 `bash bin/ssh_key.sh` 4. 集群部署: - 脚本执行前,请修改 `conf/install_conf.sh` 文件,填写需要部署的节点 ip、数据存储路径(注意检查磁盘是否有足够的空间)、服务端口是否被占用(若被占用,可修改配置文件)、相关的服务ip(`cluster_cidr`、`service_cidr`、`cluster_svc_ip`、`cluster_dns_ip`)是否和宿主机网段有冲突 - 执行 `bash bin/00.install.sh` 开始部署 kubernetes 集群 - 集群部署过程中,会在脚本上一级目录下创建 `.output` 隐藏文件,目的是防止误操重新覆盖集群的证书,避免出现异常问题 5. 节点扩容: - 修改 `conf/install_conf.sh` 文件内的 `work_nodes` 变量值,将 ip 修改为需要扩容的节点 ip - 执行 `bash bin/03.deploy_node.sh` 即可 6. 集群卸载: - 集群卸载脚本也是调用的 `conf/install_conf.sh` 文件,注意查看对应的节点 ip,避免卸载错节点 - 集群卸载的前提是集群中没有运行非 k8s 组件的服务,例如:`flannel`,`coredns` 等以外的服务 - `bash bin/99-uninstall.sh work_node` # `卸载 worker 节点` - `bash bin/99-uninstall.sh master_node` # `卸载 master 节点(不包括 etcd 组件)` - `bash bin/99-uninstall.sh etcd_node` # `卸载 etcd 节点(不包括 master 组件)` - `bash bin/99-uninstall.sh cluster` # `卸载 kubernetes 集群` 7. 集群部署执行完成后,`kubectl`命令会找不到,此时执行 `source /etc/profile` 命令即可(因为当前终端没有重新加载`PATH变量`,所以只需要通过`source`重新加载变量即可) 8. 此脚本基于 `kubernetes v1.19.7` 编写,如若需要安装高版本或者低版本,需要注意 `service 文件`内的启动参数是否需要修改,因为版本迭代,会导致一些参数不再被使用,或者被其他参数替代,如果不修改,会影响服务启动,导致 kubernetes 集群部署失败 9. 关于二进制文件 - 二进制文件都存放在 packages 目录下,带有目录的,不要变动目录的名称或删除目录,会影响服务的部署 10. 关于镜像 - 镜像都存放在 images 目录下 - 镜像的 tag ,可以在 var_list.sh 文件内修改 - 镜像文件的名称,可以在 var_list.sh 文件内修改 ### 目录结构 ```shell . ├── bin # 脚本存放路径 │   ├── 00.install.sh # 总安装脚本 │   ├── 01.deploy_system.sh # 环境初始化脚本 │   ├── 02.deploy_master.sh # master 节点部署脚本 │   ├── 03.deploy_node.sh # node 节点部署脚本 │   ├── 99-uninstall.sh # 卸载 kubernetes 集群 │   ├── 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 ```