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

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

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

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

关于脚本

  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 文件内修改
    1. 关于 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
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
8月前
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
509 0
|
7月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
8月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
826 33
|
8月前
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
313 25
|
8月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
484 19
|
8月前
|
存储 测试技术 对象存储
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。
|
9月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
505 12
|
9月前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
537 5
|
9月前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
255 3
|
9月前
|
边缘计算 调度 对象存储
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
216 0
下一篇
oss云网关配置