0
点赞
收藏
分享

微信扫一扫

Kubernetes 1 -- Kubernetes是什么?

进击的铁雾 2022-03-12 阅读 108
kubernetes

** 本页是Kubernetes的概要。 **
Kubernetes是一种用于管理容器化工作和服务的可移植、可扩展、开源平台,它便利了声明式配置和自动化。它有一个巨大、快速增长的生态。Kubernetes服务/支持和工具是随处可以得到的。Kubernetes包含了超过15年的Google用来自社区最佳想法和实践大规模运行产生工作的经验。

回顾:

在这里插入图片描述

通过回顾,看一下Kubernetes为什么如此有用。
传统部署时代:在早期,组织在物理服务器上运行应用程序。在物理机上没有为应用程序定义资源边界的方法,并且者引发了资源分配冲突。例如,如果多个应用程序运行在一台服务服务器上,可能会出现这种情况:一个应用程序会占用大部分资源,并且造成另外的程序表现不佳。解决这种问题的一个方法是在不通物理服务器上运行每个应用程序。但由于资源未被充分利用,这没有大规模,并且对于组织要维护很多物理服务器是昂贵的。

虚拟化部署时代:作为一种解决方法,引入了虚拟化。它允许你在单台物理服务器的CPU上运行多个虚拟机。虚拟化使得应用程序在虚拟机之间被隔离,并且提供了一种一个程序的信息不能被另一个程序自由访问的安全级别。

虚拟化运行更好地利用在一台物理服务器中的资源,并且因为更容易地添加和升级一个程序,减少硬件开销以及更多,使得更好的伸缩性。
每台虚拟机是一台运行所有组件(包括在虚拟化硬件上它自己的操作系统)的完整机器。

容器部署时代:容器类似于虚拟机,但它们已经放松了隔离属性来在程序之间共享操作系统。因而,容器被认为轻量的。类似一个虚拟机,一个容器有它自己的文件系统,CPU份额,内存,进程空间以及更多。由于它们被从下层基础架构解耦,它们是在云和OS发行版之间可移值。

因为容器提供了诸如以下的更多好处,所以它们变得流行:

  1. 敏捷程序创建和部署:对比于虚拟机镜像使用,容器镜像创建更加容器和高效。
  2. 持续开发,继承和部署:(由于镜像不可变性)为可靠和频繁的容器构建和部署提供了快速和高效回滚。
  3. 有关开发和运维分离:在构建/发布时而不是部署时创建应用程序容器镜像,因此从基础架构解耦了应用程序。
  4. 可观测性:不仅OS级别信息和指标,而且应用程序健康和其它信号。
  5. 在开发,测试和生产之间环境一致性:在笔记本上运行与在云上运行相同。
  6. 云和OS发行版可移值性:在Ubuntu, RHEL,CoreOS,内部,在主流公有云和任何其它地址运行。
  7. 以应用程序为中心的管理:抽象级别从使用逻辑资源在虚拟硬件上运行一个操作系统提高到在一个操作系统上运行一个应用程序。
  8. 松耦合,分布的,弹性的,开放的微服务:应用程序被分解为更小,独立的部分,并且可以动态地被部署和管理—不是在一个大的单目的机器上的整体堆叠。
  9. 资源隔离:可预测的程序性能。
  10. 资源利用:高性能和密度。

你为什么需要Kubernetes以及它可以做什么

容器是一种捆绑和运行你应用程序的良好方式。在生产环境中,你需要管理运行程序的容器并且确保没有下线。例如,如果一个容器关闭了,另一个容器需要启动。如果这种行为由一个系统处理,不是更简单吗?

那就是Kubernetes如何出现来拯救的! Kubernetes提供给你一个弹性地运行一个分布式系统的框架。它为你的程序管理伸缩和故障转移,提供部署模式以及更多。例如,Kubernetes可以为你的系统容易地管理一次金丝雀部署。

Kubernetes提供给你:

  1. 服务发行和负载均衡:Kubernetes可以使用DNS名称或使用它们自己的IP地址暴露一个容器。如果到达一个容器的流量高了,Kubernetes能够负载均衡并且分配网络流量使得部署稳定。
  2. 存储编排: Kubernetes允许你自动挂载一个你选择的存储系统,诸如本地存储,公有云提供者以及更多。
  3. 自动的滚动和回滚:你可以使用Kubernetes为你部署的容器描述所需状态,并且它可以以一个受控速率更改实际状态到所需状态。例如,4. 你可以自动化Kubernetes来为你的部署创建新容器,移除已有容器以及选定所有它们的资源到这个新容器。
  4. 自动装箱:你提供给Kubernetes一个其可以用于运行容器化任务的节点集群。你告诉Kubernetes每个容器需要多少CPU和内存(RAM)。Kubernetes可以使容器适应你的节点来最充分地使用你的资源。
  5. 自恢复:Kubernetes重启出错的容器,替换容器,关闭没有响应你用户定义的健康检查的容器,并且在它们准备好前不向它客户端通告它们。
  6. 秘密和配置管理:Kubernetes让你存储和管理敏感信息,诸如密码,OAuth tokens和SSH keys。你可以部署和升级秘密和程序配置,而不用重建你的容器镜像,并且不再米的堆栈配置中暴露秘密。

Kubernetes不是什么

Kubernetes不是一个传统的,包含所有的PaaS(平台即服务)系统。由于Kubernetes在容器级别而非硬件级别运行,它提供了一些与PaaS提供的相同的普遍适用的特性,诸如部署,伸缩,负载均衡,并且让使用者集成它们的日志,监控和警告解决方法。即便如此,Kubernetes不是一个整体,并且这些默认解决方案是可选和可插拔的。
Kubernetes提供了用于构建开发者平台的构建块,但留给用户在重要地方选择和灵活性。

Kubernetes:

  1. 不限制支持的应用程序类型。Kubernetes以支持各种类型负载为目标,包括有状态,无状态以及数据处理负载。如果一个程序可以在运行在一个容器中,它就应该在Kubernetes上运行。
  2. 不要部署源代码并且不要构建你的程序。持续集成,交付和部署(CI/CD)工作流由组织文化和喜好以及技术要求来确定。
  3. 不提供应用程序级别的服务,诸如中间件(例如:消息总线),数据处理框架(例如,Spark),数据库(例如:MySQL),缓存,或者集群存储系统(例如:Ceph)作为内建服务。这些组件可以运行在Kubernetes上,并且/或可以通告可移植机制(诸如开发服务Broker)被运行在Kubernetes上的程序访问。
  4. 没有强行规定日志,监控或者警告解决方法。它提供了一些集成作为概念证明,以及收集和导出指标的机制。
  5. 不提供也不执行一个配置语言/系统。它提供了一个可声明的API,其可以成为任意形式的可声明格式的目标。
  6. 不提供也不采用任何详尽的机器配置,维护,管理或自愈系统。
  7. 此外,Kubernetes不仅仅是一个编排系统。实际上,它消除了对编排的需求。编排的技术定义是一个定义好的工作流的执行:首先做A,接着B,接着C。相比较,Kubernete组合一个独立的,可组合控制过程的集合,这些过程持续驱动当前状态朝向提供的所需状态。它不应该关注你如何从A到C。也不需要中心化控制。这导致一个系统更易于使用以及更强大,健壮,弹性和可扩展。
举报

相关推荐

0 条评论