什么是Kubernetes

1.Kubernetes是可扩展的开源平台,用以管理容器化的负载和服务,促进声明式的配置和自动化。他拥有巨大且快速成长的生态系统。Kubernetes的服务、支持和工具广泛适用。

为什么需要Kubernetes,它能做什么

Kubernetes拥有多种特性,它能被当作

  • 容器平台
  • 微服务平台
  • 可移植云平台等

Kubernetes提供容器为中心的管理环境。它为用户协调了计算、网络和存储基础架构。这提供了平台即服务的简单性和基础架构即服务的灵活性。促进了基础架构供应者的可移植性。

为什么Kubernetes是一个平台

尽管Kubernetes 提供了很多的功能,但总会有新的场景受益于新特性。它可以简化应用工作流来提高开发速度。受人认可的应用编排需要强大的规模化自动化能力。这就是为什么Kubernetes被设计为构建组件和工具的生态系统平台,使部署、规模化和管理应用更轻松。

Label使用户可以根据个人喜好管理资源。Annotation允许用户使用定制信息来装饰资源以适用于工作流程,并为管理工具提供检查点状态的简单方法。

此外,Kubernetes控制面板基于相同的api,对用户和开发者都可用。用户可以通过通用的CLI命令行工具定位新加的自定义api,来编写自己的控制器、调度器。

这种设计使得其他系统也可以在Kubernetes之上构建。

Kubernetes 不是什么

Kubernetes不是传统的、无所不包的平台即服务系统。Kubernetes运行起来更偏向容器级别而不是硬件级别。它和平台即服务一样提供大体适用的功能,例如部署、规模化、负载均衡、日志和监控。但Kubernetes并不是一体的,这些默认方案是可选可插拔的。

Kubernetes为构建开发平台提供构建块,但保留用户的选择和灵活性。

Kubernetes:

  • 不限制支持的应用类型。Kubernetes旨在提供及其多样的工作负载,包括无状态、状态的、数据处理的工作负载。如果应用能在容器中运行,就能在Kubernetes中良好运行。
  • 不部署源码也不构建应用,持续集成、交付和部署工作流程由组织文化、倾向和技术需求所决定。
  • 不提供应用级别的服务,如中间件、数据处理框架(如spark)、数据库、缓存和集群存储系统(如Ceph)作为嵌入服务。这些组件可以在kubernetes上运行,也可以由kubernetes上运行的应用通过可移植的结构如Open Service Broker访问。
  • 不规定日志、监控和通知方案。它提供一些集成作为概念验证,和结构来收集和导出指标。
  • 不提供和授权配置的语言或系统(如jsonnet)。它提供可作为任意形式声明式规范的目标的声明式Api。
  • 不提供或采用任何全面机器配置、维护、管理或自我修复系统。

此外,Kubernetes不仅仅是编排系统。事实上,它消除编排的需要。编排的技术定义是执行一个规定的流程:先做A、做B再做C。相反,Kubernetes由一系列独立的可组合的控制流程组成,这些控制流程将当前状态朝着目标状态驱动。你不需要知道怎么从A到C,也不需要集中控制。这使得易用、强大、健壮、弹性、可扩展。

为什么用容器

旧的应用部署方式是在主机上使用操作系统包管理器来安装应用。这会耦合应用的可执行程序、配置、依赖库和生命周期和主机操作系统。可以通过构建不可变的虚拟机镜像来达到可预测的发布和回滚。但是虚拟机静态太重太不变。

新的部署方式基于操作系统级别虚拟化而不是硬件级别虚拟化。容器们各自分离并且与主机分离:它们由各自的文件系统,无法看到彼此的进程,并且它们的计算资源可以被限制。它们比起虚拟机更易构建。由于它们与底层的基础架构和主机文件系统解耦,所以它们便于通过云和操作系统分发。

由于容器体积小,速度快。应用可以在每个容器镜像中打包。这种一对一、应用对镜像关系有很多好处。使用容器,不可变的容器镜像可以在构建/发布阶段创建,而不是部署阶段。因为每一个应用不需要由其他应用组成,也不依赖与产品基础架构环境。在构建发布阶段构建容器镜像使得环境的一致性从开发环境保持到了生产环境。

容器也比虚拟机更透明,有利于监控和管理。特别是当容器进程的生命周期由基础架构管理而不是由容器内部的进程监管者隐藏时,更是如此。当每个应用封装于一个容器时,管理容器部署和管理应用部署是等同的。

容器的好处归纳:

  • 敏捷的应用创建和部署:容器比起虚拟机创建起来更快速,更便捷。
  • 持续开发、集成、部署:提供可靠、频繁的容器创建和部署,可以快速便捷地回滚。
  • 关心开发和运维的分离:在构建/发布时期而不是部署时期创建应用的容器镜像,以此解耦应用和基础架构。
  • 可观测性:除表面的操作系统级别信息和指标外,应用健康和其他信号也可以观测到。
  • 开发、测试和生产环境的一致性:在笔记本电脑和在云端运行是一样的。
  • 云端和操作系统的可移植性:可以运行在Ubuntu, RHEL, CoreOS, 内部部署, 谷歌Kubernetes引擎和其他任意地方
  • 应用为中心的管理:提高抽象级别,从在虚拟硬件上 运行操作系统,变成了在使用逻辑资源的操作系统上运行应用。
  • 松耦合、分布式、弹性、开放性微服务:应用被分解成较小、独立的部分,可以动态地部署和管理。而不是庞大的应用运行在专用的大型机上。
  • 资源隔离:可以预见应用性能。
  • 资源利用:高效,高密度。