起源
- 起源: Kubernetes(常简称为K8s)起源于Google内部的Borg项目,是一个开源的容器编排引擎,于2014年首次对外发布。
-
Google Borg
Google Borg 是 Google 内部开发和使用的大规模集群管理系统,用于管理和运行数万台服务器上的应用程序和服务。Borg项目的发展经历了以下阶段:-
2003年-2004年: Borg项目最初由Google的工程团队开发,旨在解决Google内部服务的管理和部署问题。Borg的设计目标是实现高可靠性、高效率的集群管理,支持多种应用程序和服务的托管和调度。
-
2005年-2014年: Borg系统在Google内部广泛应用,成为支撑Google各种服务和应用程序的关键基础设施之一。Borg 通过优化资源利用率、提高服务可靠性等方面为Google提供强大的支持。
-
2014年-至今: 在Borg系统成功运行多年后,Google决定将其集群管理经验和技术开源,于是诞生了Kubernetes项目。Kubernetes 基于Borg的设计思想和经验,在实现上进行改进和优化,以适应更广泛的应用场景和用户群。
Google Borg项目发展经历从内部研发到开源孵化的过程,为云原生技术的发展和普及做出重要贡献。
-
-
Kubernetes最初由Google主导开发,后来成为 Cloud Native Computing Foundation(CNCF)孵化项目,得到众多公司和社区的支持和贡献。它的发展迅速,成为容器编排领域的标准。
-
影响
- Kubernetes改变了应用程序部署和管理的方式,使得容器化应用程序的部署、扩展、管理和调度变得更加简单和高效。
- Kubernetes为跨多个主机的容器集群提供了自动化部署、扩展和运维的能力,为构建云原生应用提供重要的基础设施管理能力。
能力
Kubernetes 是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。
由于 Kubernetes 是在容器级别运行,而非在硬件级别。提供了 PaaS 产品共有的一些普遍适用的功能, 例如部署、扩展、负载均衡,允许用户集成的日志记录、监控和警报方案。
但Kubernetes 不是单体式(monolithic)系统,那些默认解决方案都是可选、可插拔的。 Kubernetes 为构建开发平台提供基础,但在重要的地方保留用户选择权,能有更高的灵活性。
Kubernetes 的主要作用和能力包括:
-
容器编排:Kubernetes 可以管理和编排大量容器化应用程序。可以确保应用程序的各个部分在不同容器中正确运行,并且可以管理应用程序间的依赖关系。
-
自动化部署和扩展:Kubernetes 根据应用程序需求自动扩展容器的数量,以满足流量增长或负载均衡的需求。还可以轻松地部署新的应用程序版本,而无需中断正在运行的服务。
-
服务发现和负载均衡:Kubernetes 可以为应用程序提供内置的服务发现和负载均衡功能。可以轻松地将流量路由到应用程序的不同部分,并确保正常通信。
-
自我修复:Kubernetes 可以监控容器的健康状态,并在出现故障时自动重新启动。提高应用程序的可靠性和稳定性。
-
密钥管理和配置:Kubernetes 提供安全地管理密钥和配置信息的方式,以确保应用程序在不同环境中的一致性和安全性。
-
存储编排:Kubernetes 支持多种存储系统,并提供统一方式来管理应用程序的持久化存储需求。
-
扩展性和可定制性:Kubernetes 提供丰富的 API 和插件系统,可以根据需求扩展和定制平台。
能力以外
Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。
- 不限制支持的应用程序类型。 Kubernetes 旨在支持极其多种多样的工作负载,包括无状态、有状态和数据处理工作负载。 如果应用程序可以在容器中运行,那么也应该可以在 Kubernetes 上很好地运行。
- 不部署源代码,也不构建应用程序。 持续集成(CI)、交付和部署(CI/CD)工作流取决于组织的文化和偏好以及技术要求。
- 不提供应用程序级别服务作为内置服务,例如中间件(例如消息中间件)、 数据处理框架(例如 Spark)、数据库(例如 MySQL)、缓存、集群存储系统 (例如 Ceph)。这样的组件可以在 Kubernetes 上运行,并且可以由运行在 Kubernetes 上的应用程序通过可移植机制(例如开放服务代理)来访问。
- 不是日志记录、监视或警报系统解决方案。 它集成一些功能作为概念证明,并提供了收集和导出指标的机制。
- 不提供也不要求配置用的语言、系统:(例如 jsonnet),提供了声明性 API, 该声明性 API 可以由任意形式的声明性规范所构成。
- 不提供也不采用任何全面的机器配置、维护、管理或自我修复系统。
此外,Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要。 编排的技术定义是执行已定义的工作流程:首先执行 A,然后执行 B,再执行 C。 而 Kubernetes 包含一组独立可组合的控制过程,可以持续地将当前状态驱动到所提供的预期状态。 不需要在乎如何从 A 移动到 C,也不需要集中控制,这使得系统更易于使用且功能更强大、 系统更健壮,更为弹性和可扩展。
组件
-
kube-apiserver(API Server): 提供Kubernetes API 服务端实现,是集群控制面的前端,负责处理API请求。
-
etcd(Key-Value Store): 保存整个集群的状态信息,包括节点信息、Pod信息、Service信息等。
-
kube-scheduler(Scheduler): 负责将新创建的Pod调度到集群中的节点上,根据调度策略选择合适的节点。
-
kube-controller-manager(Controller Manager): 包含一系列控制器,负责管理集群的状态,如ReplicationController、NodeController等。
-
kubelet(Kubelet): 运行在每个节点上,负责管理该节点上的Pod生命周期,与容器运行时(如Docker)交互来创建、启动、停止容器。
-
kube-proxy(Proxy): 负责为Service提供代理和负载均衡功能,实现Kubernetes Service的网络代理和转发。
-
Container Runtime(容器运行时): 负责运行容器的软件,常见的包括Docker、containerd等。
-
Pod(Pod): 是Kubernetes最小的调度单元,可以包含一个或多个紧密相关的容器,并共享网络和存储资源。
-
Service(Service): 定义了一组Pod的逻辑集合,并提供统一的访问入口,可以实现负载均衡、服务发现等功能。
-
Volume(Volume): 提供容器存储的抽象,可以让容器在生命周期内持久化存储数据。
这些组件共同构成了Kubernetes的核心功能,为用户提供了高效、弹性和可靠的容器编排和管理能力。除了上述核心组件外,Kubernetes还有一些附加组件,如Dashboard、DNS插件、Ingress Controller等,用于提供更丰富的功能和扩展性。
附加组件的介绍:
-
Dashboard(仪表盘): Kubernetes Dashboard是一个基于Web的用户界面,用于可视化管理Kubernetes集群。它提供了对集群状态、工作负载、服务和存储等资源的实时监控和管理功能,可以方便地查看和操作集群中的各种资源。
-
DNS插件(DNS Add-on): Kubernetes集群通常会配备一个DNS插件,用于提供服务发现和DNS解析功能。通过DNS插件,用户可以使用域名来访问集群中的服务,而无需关心具体的IP地址。
-
Ingress Controller(入口控制器): Ingress是Kubernetes中的一种资源对象,用于定义对集群中服务的外部访问规则。Ingress Controller负责实现这些规则,通常通过负载均衡器或反向代理来实现对Ingress资源的路由和流量转发。
-
日志插件(Logging Add-on): Kubernetes集群通常会配置日志插件,用于收集、存储和管理Pod的日志信息。常见的日志插件包括Fluentd、Fluent Bit等,它们可以将日志发送到中央日志存储系统,方便用户查看和分析日志数据。
这些附加组件提供丰富的功能和扩展性,可以更好地管理和使用Kubernetes集群。
可根据需求选择合适的组件来增强集群的功能和性能。