所属章节:
第14章. 云原生架构设计理论与实践
第3节 云原生架构相关技术
14.3.1 容器技术
1. 容器技术的背景与价值
2. 容器编排
Kubernetes已经成为容器编排的事实标准(前边提到,Docker是应用分发的事实标准),被广泛用于自动部署、扩展和管理容器化应用。Kubernetes提供了分布式应用管理的核心能力。
- 资源调度
根据应用请求的资源量CPU、Memory,或者GPU等设备资源,在集群中选择合适的节点来运行应用。
- 应用部署与管理
支持应用的自动发布与应用的回滚,以及与应用相关的配置的管理;也可以自动化存储卷的编排,让存储卷与容器应用的生命周期相关联。
- 自动修复
Kubernetes能监测这个集群中所有的宿主机,当宿主机或者OS出现故障,节点健康检查会自动进行应用迁移;K8s也支持应用的自愈,极大地简化了运维管理的复杂性。
- 服务发现与负载均衡
通过Service资源出现各种应用服务,结合DNS和多种负载均衡机制,支持容器化应用之间的相互通信。
- 弹性伸缩
K8s可以检测业务上所承担的负载,如果这个业务本身的CPU利用率过高,或者响应时间过长,它可以对这个业务进行自动扩容。
Kubernetes的控制平面包含四个主要的组件:APIService、Controller、Scheduler以及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(容器存储接口),帮助业务应用可以屏蔽底层基础设施的实现差异,实现容器灵活迁移的设计目标。