发布网友 发布时间:2022-10-07 03:27
共1个回答
热心网友 时间:2023-10-25 09:57
Kubernetes 这个名字来自于希腊语,意思是舵手。还是很符合这个平台的作用的。Kubernetes 负责管理部署的应用并报告它们的情况,而用户就像是船长,只需要决定想要整个系统达到怎样的状态。
Kubernetes 是一个负责自动化部署和管理应用的软件系统,主要针对由容器构成的复杂的大型应用系统。
抽象化基础设施
Kubernetes 为用户和应用在底层的硬件之上提供了一个抽象层,底层的基础设施如计算机、网络及其他组件等对应用都是不可见的。用户通过这个抽象层部署和管理应用,不需要再面对每一台特定的机器。因此配置起来更加方便。
标准化部署
由于底层基础设施的具体细节不会再影响到应用的部署,本地数据中心和云环境都可以使用同样的部署方式。任何底层基础设施的差异都交给 Kubernetes 去处理,用户可以只关注产品及其内部逻辑。
声明式部署
Kubernetes 使用声明式的模型来定义具体的应用。用户只需要完成对应用中各组件的描述,Kubernetes 就会将这些描述转化成运行的应用。并在之后保证该应用的健康运行,在必要的时候重启或重新创建某个组件。
当用户修改了某些描述,Kubernetes 会根据改动自动采取必要的步骤重新配置应用,令应用满足最新的描述。
接管应用的日常管理
一旦用户通过 Kubernetes 部署了某个应用,该应用的日常管理就会被 Kubernetes 接管。假如服务停止运行,Kubernetes 会自动重启该应用;或者由于硬件失效、基础设施架构调整导致该应用需要移动到其他机器上,Kubernetes 也会自行处理。
就像之前提到的,用户类似于船长负责更高层级的决策,而 Kubernetes 则类似于舵手负责执行具体的底层任务。
之前的年头,绝大多数应用都是单体应用。应用里的各个组件是强耦合的,全部运行在同一个进程里。
当应用的容量需要提升时,水平扩展单体应用是非常困难的。只能不断升级服务器的硬件,即垂直扩展。
微服务范式是后来才出现的。单体应用被分割成数十甚至数百个独立的进程(微服务)。每一个微服务都拥有自己所独有的开发和部署周期,不同微服务的依赖会随着时间的推移差距越来越大。这使得在同一个操作系统内部运行两个微服务应用变得非常困难。
容器正好方便解决这个问题。但每个微服务都是一个独立的应用,需要单独进行管理。随着应用数量的上升这将会越来越困难。
整个应用系统的各个部分不需要部署到同一台机器上,这使得扩展起来更加方便。但同时也意味着各组件之间需要配置成能够相互通信的状态。同样增加了维护成本。
因此当微服务的规模变得很大时,自动化管理就显得尤为必要。Kubernetes 则正好提供了这种自动化功能。
Kubernetes 可以看作是一个面向服务器集群的操作系统。
操作系统用来支撑计算机的基本功能比如 CPU 调度,作为应用和计算机硬件之间沟通的接口。类似的,Kubernetes 负责在服务器集群的各台机器上调度安排分布式应用的各个组件,作为应用和集群之间的接口。
一个 Kubernetes 集群包含两组节点:
Control Plane 负责控制整个集群。它运行在一台主节点上,或者以副本的方式运行在多个主节点上。包含 Scheler、Controllers、Kubernetes API Server、etcd 等几个组件。
工作节点就是实际上运行应用的节点,它们构成了 Workload Plane。负责运行、监控各个应用,并在各应用之间提供连通性。
其中各组件的功能如下:
Kubernetes 中的所有元素都由对象表示,可以通过 API 创建和获取这些对象。用户需要几种不同的对象来定义自己的应用,通常在 YAML 或 JSON 格式的清单文件中定义。
向 Kubernetes 部署应用的具体步骤为:
Kubernetes in Action, Second Edition