当前位置: 首页 > news >正文

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

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

  • 传统手动部署,在熟练的情况下,也会消耗半天左右的时间,并且操作过程中,也容易出现误操作的情况,非常耗费时间,
  • 使用脚本部署,在网络和磁盘性能好的情况下,只需要几分钟即可完成部署,只需要前期配置好配置文件,接杯水的功夫就完成了
  • 脚本下载路径
  • 压缩包 292MB,解压完,大约 0.98G

关于脚本

  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 文件内填写所有主机的信息,主机信息格式: <用户名> <ip> <用户密码>
        • 执行免密脚本 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 文件内修改

目录结构

.
├── 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

相关文章:

  • windows 和 ubuntu 系统区别
  • Docker基础:Dockerfile相关知识介绍
  • Elastic实战:canal自定义客户端,实现mysql多表同步到es
  • R语言dplyr包select_if函数筛选dataframe数据中的所有因子类型变量(筛选所有的因子数据列、is.factor)
  • LVC | 一种简单的小样本目标检测方法
  • TypeScript 贪吃蛇游戏详细教程
  • 无需内嵌代码的全新GUI截图方案在TouchGFX,ThreadX GUIX,emWin,LVGL,AWTK全部测试通过,含多缓冲方式玩法
  • 【信息科学技术与创新】机器学习 深度学习 人工神经网络相关分析
  • YOLO v7详解
  • 简简单单的结构体
  • Spring Cloud Zookeeper 优雅下线优化
  • 《计算机视觉基础知识蓝皮书》第3篇 卷积神经网络
  • 【JavaScript】四个常用功能/案例:表格排序 | 替换链接 | 倒计时 | 双色球机选一注
  • 数据结构-复杂度(深入学习版+Java版)
  • 【opencv-c++】cv::addWeighted图像加权混合
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Brief introduction of how to 'Call, Apply and Bind'
  • Git 使用集
  • JAVA SE 6 GC调优笔记
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • magento 货币换算
  • Mybatis初体验
  • Vue实战(四)登录/注册页的实现
  • 实战|智能家居行业移动应用性能分析
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 学习使用ExpressJS 4.0中的新Router
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #NOIP 2014# day.1 T2 联合权值
  • (02)vite环境变量配置
  • (07)Hive——窗口函数详解
  • (1)Nginx简介和安装教程
  • (LeetCode C++)盛最多水的容器
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)php投票系统 毕业设计 121500
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (转)ORM
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET中GET与SET的用法
  • @Async注解的坑,小心
  • @Conditional注解详解
  • @在php中起什么作用?
  • [1525]字符统计2 (哈希)SDUT
  • [BZOJ3757] 苹果树
  • [CERC2017]Cumulative Code
  • [Codeforces] number theory (R1600) Part.11
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
  • [delphi]保证程序只运行一个实例
  • [FC][常见Mapper IRQ研究]
  • [Firefly-Linux] RK3568修改控制台DEBUG为普通串口UART