前言:这几天着重学习了k8s,又重新对k8s有了一些新的理解,在之前三篇文章中都是直接搭建环境,使用docker和k8s,至于为什么这么做不是很理解,比如就部署k8s就有很多方式,我只是按照网上的步骤直接来的,通过学习之后知道有多种方式进行部署,每个部署方式都有它的优缺点,我还在持续的学习中,根据学习进度后续应该会补充一些文章,同时会意识到之前的部署文章有一些错误也会一同纠正,如果还有别的问题也欢迎大家指出,接下来进入今天的正题,认识k8s。
目录
一、什么是kubernetes?
Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。
Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。
二、为什么需要kubernetes?
2.1 应用部署的三个阶段
2.1.1 传统部署
程序员/运维工程师手动操作部署应用,直接将应用部署在目标机器上,由于资 源 不隔离,容易出现资源争抢、依赖冲突等各方面问题。
2.1.2 虚拟化部署
利用 OpenStask / VMware 等虚拟化技术,将一台目标机器虚拟化为多个虚拟机器,按照需求将应用部署到不同的虚拟机中,对虚拟机进行动态的水平扩容等管理操作。
相对传统部署自动化、资源隔离的能力提升了,带来的问题是虚拟化的逻辑过重,导致效率不高,且耗费资源较多。
2.1.3 容器化部署
可以理解为轻量级的虚拟化,完美弥补虚拟化技术过重的问题,且由于直接共享主机硬件资源,只是通过系统提供的命名空间等技术实现资源隔离,损耗更小,且效率更高。
2.2 k8s的特点
- 自我修复
- 弹性伸缩
- 自动化部署和回滚
- 服务发现和负载均衡
- 机密和配置管理
- 存储编排
- 批处理
三、企业级容器调度平台对比
3.1 Apache mesos
3.1.1 基本概念
Mesos 是一个分布式调度系统内核,早于 Docker 产生,Mesos 作为资源管理器,从 DC/OS (数据中心操作系统)的角度提供资源视图。主/从结构工作模式,主节点分配任务,并用从节点上的 Executor 负责执行,通过 Zookeeper 给主节点提供服务注册、服务发现功能。通过 Framework Marathon 提供容器调度的能力。
3.1.2 优势
经过时间的检验,作为资源管理器的 Apache Mesos 在容器之前就已经出现很久了,支持运行容器化化和非容器化的工作负载。可以支持应用程序的健康检查,开放的架构。支持多个框架和多个调度器,通过不同的 Framework 可以运行 Haddop/Spark/MPI等多种不同的任务。
支持超大型规模的节点管理,模拟测试支持超过 5w+ 节点,在大规模上拥有较大优势。
PS:针对的是对节点的支持,针对容器可能就差点意思。
3.2 docker swarm
3.2.1 基本概念
Docker Swarm 是一个由 Docker 开发的调度框架。由 Docker 自身开发的好处之一就是标准 Docker API 的使用,Swarm 由多个代理(Agent)组成,把这些代理称之为节点(Node)。这些节点就是主机,这些主机在启动 Docker Daemon 的时候就会打开相应的端口,以此支持 Docker 远程 API。这些机器会根据 Swarm 调度器分配给它们的任务,拉取和运行不同的镜像。
3.2.2 优势
从 Docker1.12 版本开始,Swarm 随 Docker 一起默认安装发布。由于随 Docker 引擎一起发布,无需额外安装,配置简单。支持服务注册、服务发现,内置 Overlay Network 以及 Load Balancer。与 Docker CLI 非常类似的操作命令,对熟悉 Docker 的人非常容易上手学习。
入门门槛、学习成本较低,使用更便捷,适用于中小型系统。
PS:docker官方自己都不用这个,主流也很少用。
3.3 google kubernetes
3.3.1 基本概念
Kubernetes 是基于 Google 在过去十五年来大量生产环境中运行工作负载的经验。Kubernetes 的实现参考了 Google 内部的资源调度框架,但并不是 Borg 的内部容器编排系统的开源,而是借鉴 Google 从运行 Borg 获得的经验教训,形成了 Kubernetes 项目。
它使用 Label 和 Pod 的概念来将容器划分为逻辑单元。Pods 是同地协作(co-located)容器的集合,这些容器被共同部署和调度,形成了一个服务,这是 Kubernetes 和其他两个框架的主要区别。相比于基于相似度的容器调度方式(就像 Swarm 和Mesos),这个方法简化了对集群的管理。
3.3.2 优势
最流行等容器编排解决方案框架,基于 Google 庞大的生态圈及社区产生的产品。通过 Pods 这一抽象的概念,解决 Container 之间的依赖于通信问题。Pods,Services,Deployments 是独立部署的部分,可以通过 Selector 提供更多的灵活性。内置服务注册表和负载平衡。
适用度更广,功能更强大,相较于 Mesos 来说节点规模较小。
PS:目前主流,docker官方指定,但k8s在1.24版本后就不支持docker,因为Docker 不支持 Kubernetes 主推的 CRI(容器运行时接口)标准,但是docker在改,可以间接使用加上一个中间层 cri-docker。
文章写的再细也不如看视频理解的透,我主要参照了该up主的视频,讲的非常好
【完整版Kubernetes(K8S)全套入门+微服务实战项目,带你一站式深入掌握K8S核心能力】 https://www.bilibili.com/video/BV1MT411x7GH/?p=13&share_source=copy_web&vd_source=921dd22b5670d69481670cf6655563f5