K8s-从基础到进阶-部署方式大全-掌握所有技巧 (基于k8s)
Kubernetes 是一个流行的容器编排平台,用于部署、管理和扩展容器化应用程序。 为了简化 Kubernetes 集群的部署和管理,有各种工具可用。
kubeadm
kubeadm 是Kubernetes 官方提供的用于在系统上快速设置和管理 Kubernetes 集群的初始化过程的工具。 它是针对生产环境中部署多节点 Kubernetes 集群而设计的,而不只是本地开发环境中的单节点。
特性 | 优势 |
---|---|
用于生产环境初始化 Kubernetes 集群 | 在复杂的生产环境中设置集群的能力 |
负责初始化控制平面和加入节点 | 专注于核心集群初始化任务 |
kind
kind (Kubernetes in Docker)是一个轻量级的工具,用于在本地开发环境中快速部署和运行 Kubernetes 集群。 它通过在 Docker 容器中模拟 Kubernetes 集群的节点来工作。
特性 | 优势 |
---|---|
在本地运行 Kubernetes 集群 | 方便在开发环境中测试应用程序 |
使用 Docker 或 Podman 进行模拟 | 无需设置物理或虚拟节点 |
minikube
与 kind 类似,minikube 是一个工具,可以让您在本地运行 Kubernetes。 它在您的个人计算机(包括 macOS 和 Linux PC)上运行一个一体化或多节点的本地 Kubernetes 集群,以便您尝试 Kubernetes 或开展日常开发工作。
特性 | 优势 |
---|---|
一体化本地 Kubernetes 集群 | 设置方便,适合快速原型设计和测试 |
用于本地开发和实验 | 无需使用云提供商或复杂的集群设置 |
基于二进制文件
此方法涉及从 GitHub 下载发行版的二进制包并手动部署和安装每个组件以组成 Kubernetes 集群。 它提供了对集群组件的完全控制,但需要大量的技术知识和手动配置。
特性 | 优势 |
---|---|
灵活的集群定制 | 对集群组件的全面控制 |
手动安装和配置 | 需要对 Kubernetes 组件有深入的了解 |
Kubespray
Kubespray (也称为 Kargo)是一个开源项目,提供一组基于 Ansible 的 Playbooks,用于部署、管理和扩展 Kubernetes 集群。 它自动执行设置和配置 Kubernetes 集群的过程。
特性 | 优势 |
---|---|
自动化集群管理 | 使用 Ansible Playbooks 简化集群部署 |
用于复杂的集群拓扑 | 支持多主机和分布式集群配置 |
kOps
kOps 是一个用于在 Amazon Web Services (AWS) 上自动化大规模 Kubernetes 集群的工具。 它提供了一个易于使用的界面,可以部署和管理生产级集群。
特性 | 优势 |
---|---|
AWS 上的 Kubernetes 部署 | 针对 AWS 环境的优化设置和管理 |
自动化部署和管理 | 简化复杂集群的设置和维护 |
选择正确的工具
选择合适的 Kubernetes 集群部署工具取决于您的特定需求和环境。- 对于生产环境中的多节点集群,kubeadm 是官方推荐的选择。
- 对于本地开发和测试,kind 或 minikube 是理想的选择。
- 对于高级用户和开发人员,基于二进制文件的方法提供了最大的灵活性。
- 对于自动化的集群管理,Kubespray 是一个强大的选择。
- 对于 AWS 环境上的 Kubernetes 集群,kOps 是一个易于使用的解决方案。
使用kube-vip部署高可用K8S集群
目前高可用部署方式 +keepalived(复杂) (一键部署,目前高版本底层使用的是containerd) +kube-vip(灵活,方便) 本文使用第三种方式,K8S版本1.20.4 环境:centos7.6 m1-192.168.50.201 m2-192.168.50.202 m3-192.168.50.203 vip-192.168.50.200 三台服务器均需要操作
k8s系列02-kubeadm部署flannel网络的k8s集群
本文主要在centos7系统上基于 docker 和 flannel 组件部署 v1.23.6 版本的k8s原生集群,由于集群主要用于自己平时学习和测试使用,加上资源有限,暂不涉及高可用部署。 此前写的一些关于k8s基础知识和集群搭建的一些 方案 ,有需要的同学可以看一下。 机器均为8C8G的虚拟机,硬盘为100G。 同一个k8s集群内的所有节点需要确保 mac 地址和 product_uuid 均唯一,开始集群初始化之前需要检查相关信息 如果k8s集群的节点有多个网卡,确保每个节点能通过正确的网卡互联访问 这里可以根据自己的习惯选择ntp或者是chrony同步均可,同步的时间源服务器可以选择阿里云的 或者是国家时间中心的 。 k8s集群之间通信和服务暴露需要使用较多端口,为了方便,直接禁用防火墙 这里主要是需要配置内核加载 br_netfilter 和 iptables 放行 ipv6 和 ipv4 的流量,确保集群内的容器能够正常通信。 虽然新版本的k8s已经支持双栈网络,但是本次的集群部署过程并不涉及IPv6网络的通信,因此关闭IPv6网络支持 IPVS是专门设计用来应对负载均衡场景的组件, kube-proxy 中的 IPVS 实现 通过减少对 iptables 的使用来增加可扩展性。 在 iptables 输入链中不使用 PREROUTING,而是创建一个假的接口,叫做 kube-ipvs0,当k8s集群中的负载均衡配置变多的时候,IPVS能实现比iptables更高效的转发性能。 详细的官方文档可以参考 这里 ,由于在刚发布的1.24版本中移除了 docker-shim ,因此安装的 版本≥1.24 的时候需要注意 容器运行时 的选择。 这里我们安装的版本低于1.24,因此我们继续使用docker。 docker的具体安装可以参考我之前写的 这篇文章 ,这里不做赘述。 CentOS7使用的是 systemd 来初始化系统并管理进程,初始化进程会生成并使用一个 root 控制组 ( cgroup ), 并充当cgroup管理器。 Systemd与cgroup集成紧密,并将为每个systemd单元分配一个cgroup 。 我们也可以配置 容器运行时 和kubelet使用cgroupfs 。 连同systemd一起使用cgroupfs意味着将有两个不同的cgroup 管理器 。 而当一个系统中同时存在cgroupfs和systemd两者时,容易变得不稳定,因此最好更改设置,令容器运行时和 kubelet 使用systemd作为cgroup驱动,以此使系统更为稳定。 对于 Docker, 需要设置=systemd参数。 k8s官方有 详细的文档 介绍了如何设置kubelet的 cgroup driver ,需要特别注意的是,在1.22版本开始,如果没有手动设置kubelet的cgroup driver,那么默认会设置为systemd 一个比较简单的指定kubelet的 cgroup driver 的方法就是在 加入 cgroupDriver 字段 我们可以直接查看configmaps来查看初始化之后集群的kubeadm-config配置。 当然因为我们需要安装的版本高于1.22.0并且使用的就是systemd,因此可以不用再重复配置。 kube三件套就是 kubeadm 、 kubelet和kubectl ,三者的具体功能和作用如下: 需要注意的是: CentOS7的安装比较简单,我们直接使用官方提供的 yum 源即可。 需要注意的是这里需要设置 selinux 的状态,但是前面我们已经关闭了selinux,因此这里略过这步。 在集群中所有节点都执行完上面的三点操作之后,我们就可以开始创建k8s集群了。 因为我们这次不涉及高可用部署,因此初始化的时候直接在我们的目标master节点上面操作即可。 此时我们再查看对应的配置文件中的镜像版本,就会发现已经变成了对应阿里云镜像源的版本 当我们看到下面这个输出结果的时候,我们的集群就算是初始化成功了。 刚初始化成功之后,我们还没办法马上查看k8s集群信息,需要配置kubeconfig相关参数才能正常使用kubectl连接apiserver读取集群信息。 配置完成后,我们再执行相关命令就可以查看集群的信息了。 这时候我们还需要继续添加剩下的两个节点作为worker节点运行负载,直接在剩下的节点上面运行集群初始化成功时输出的命令就可以成功加入集群: 如果不小心没保存初始化成功的输出信息也没有关系,我们可以使用kubectl工具查看或者生成token 添加完成之后我们再查看集群的节点可以发现这时候已经多了两个node,但是此时节点的状态还是 NotReady ,接下来就需要部署CNI了。 flannel 应该是众多开源的CNI插件中入门门槛最低的CNI之一了,部署简单,原理易懂,且相关的文档在网络上也非常丰富。 针对 文件,我们需要修改一些 参数 以适配我们的集群: 修改完成之后我们直接部署即可 集群部署完成之后我们在k8s集群中部署一个nginx测试一下是否能够正常工作。 首先我们创建一个名为 nginx-quic 的命名空间( namespace ),然后在这个命名空间内创建一个名为 nginx-quic-deployment 的 deployment 用来部署pod,最后再创建一个 service 用来暴露服务,这里我们先使用 nodeport 的方式暴露端口方便测试。 部署完成后我们直接查看状态 最后我们进行测试,这个nginx-quic的镜像默认情况下会返回在nginx容器中获得的用户请求的IP和端口
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。