所属章节:

第14章. 云原生架构设计理论与实践

          第3节 云原生架构相关技术

14.3.1 容器技术

1. 容器技术的背景与价值

2. 容器编排

Kubernetes已经成为容器编排的事实标准(前边提到,Docker是应用分发的事实标准),被广泛用于自动部署、扩展和管理容器化应用。Kubernetes提供了分布式应用管理的核心能力。

  • 资源调度

根据应用请求的资源量CPU、Memory,或者GPU等设备资源,在集群中选择合适的节点来运行应用。

  • 应用部署与管理

支持应用的自动发布与应用的回滚,以及与应用相关的配置的管理;也可以自动化存储卷的编排,让存储卷与容器应用的生命周期相关联。

  • 自动修复

Kubernetes能监测这个集群中所有的宿主机,当宿主机或者OS出现故障,节点健康检查会自动进行应用迁移;K8s也支持应用的自愈,极大地简化了运维管理的复杂性。

  • 服务发现与负载均衡

通过Service资源出现各种应用服务,结合DNS和多种负载均衡机制,支持容器化应用之间的相互通信。

  • 弹性伸缩

K8s可以检测业务上所承担的负载,如果这个业务本身的CPU利用率过高,或者响应时间过长,它可以对这个业务进行自动扩容。

Kubernetes的控制平面包含四个主要的组件APIServiceControllerScheduler以及etcd

  • 声明式API

开发者可以关注于应用自身,而非系统执行细节。比如Deployment(无状态应用)、StatefulSet(有状态应用)、Job(任务类应用)等不同资源类型,提供了对不同类型工作负载的抽象;对Kubernetes实现而言,基于声明式API的“level-triggerred”实现比“edge-triggered”方式可以提供更加健壮的分布式系统实现。

  • 可扩展性建构

所有K8s组件都是基于一致的、开放的API实现和交互;三方开发者也可通过CRD(Custom Resource Definition)/Operator等方法提供领域相关的扩展实现,极大提升了K8s的能力。

  • 可移植性

K8s通过一系列抽象如Load Balance Service(负载均衡服务)、CNI(容器网络接口)、CSI(容器存储接口),帮助业务应用可以屏蔽底层基础设施的实现差异,实现容器灵活迁移的设计目标。