• 使用 shell 脚本二进制部署 k8s 环境 [支持 docker 和 containerd]


    使用 shell 部署二进制 k8s 集群的好处在于时间消耗比较小

    • 传统手动部署,在熟练的情况下,也会消耗半天左右的时间,并且操作过程中,也容易出现误操作的情况,非常耗费时间,
    • 使用脚本部署,在网络和磁盘性能好的情况下,只需要几分钟即可完成部署,只需要前期配置好配置文件,接杯水的功夫就完成了
    • 为了方便脚本更新迭代,脚本上传到 gitee 了,可以直接 git clone https://gitee.com/chen2ha/shell_install_binary_k8s_cluster.git 来获取完整的脚本

    关于脚本

    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 集群
    5. 节点扩容:

      • 修改 conf/install_conf.sh 文件内的 work_nodes 变量值,将 ip 修改为需要扩容的节点 ip
        • 执行 bash bin/03.deploy_node.sh 即可
    6. 脚本执行完成后,kubectl命令会找不到,此时执行source /etc/profile命令即可(因为当前终端没有重新加载PATH变量,所以只需要通过source重新加载变量即可)

    7. 此脚本基于 kubernetes v1.19.7 编写,如若需要安装高版本或者低版本,需要注意 service 文件内的启动参数是否需要修改,因为版本迭代,会导致一些参数不再被使用,或者被其他参数替代,如果不修改,会影响服务启动,导致 kubernetes 集群部署失败

    8. 关于二进制文件

      • 二进制文件都存放在 packages 目录下,带有目录的,不要变动目录的名称或删除目录,会影响服务的部署
    9. 关于镜像

      • 镜像都存放在 images 目录下
      • 镜像的 tag ,可以在 var_list.sh 文件内修改
      • 镜像文件的名称,可以在 var_list.sh 文件内修改
    10. 关于 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
  • 相关阅读:
    第三章 常用布局
    iPhone 的健康数据采用的是 FHIR 传输格式
    C++类模板学习笔记
    如何安装ideaIU-2020.3.3并使用无限重置插件达到永久使用
    Spring中事务嵌套这么用一定得注意了!!
    用PHP实现极验验证功能
    如何一键重装win7系统?重装win7系统详细教程
    Spring Cloud OpenFeign - - - > 契约配置
    Vue的路由
    【Node.js从基础到高级运用】七、基本的网络编程
  • 原文地址:https://blog.csdn.net/u010383467/article/details/127146308