“好久没更新了,因为最近在做云原生开发,所以打算从本文开始开启一个云原生核心技术分享系列。”
在云原生发展的浪潮之中,Kubernetes作为容器编排领域的事实标准和云原生领域的核心项目,伴随着容器技术的发展,目前已成为云时代的操作系统,是云原生时代工程师最需要理解与实践的核心技术。本文从Kubernetes的发展历史与架构设计两个方面,来完成对Kubernetes的概述。
一、Kubernetes发展历史
Kubernetes源于希腊语,意为“舵手”。k8s缩写是因为k和s之间有八个字符的原因。Google 在2015将其作为初始和核心项目贡献给 CNCF(云原生计算基金会),近年来逐渐发展出了云原生生态。Kubernetes平台前身是Borg系统,基于Go语言开发,是Google在容器化基础设施领域十多年来实践经验的沉淀与升华。Kubernetes建立在Google大规模运行生产工作负载(Borg系统)十几年经验的基础上, 结合了社区中最优秀的想法和实践,已经成为了目前容器编排的事实标准。

Kubernetes 的目标不仅仅是一个编排系统,而是提供一个规范用以描述集群的架构,定义服务的最终状态,使系统自动地达到和维持该状态。Kubernetes 作为云原生应用的基石,相当于一个云原生操作系统,其重要性不言而喻。
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施 和 声明式 API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
二、Kubernetes架构设计
Kubernetes架构

整个系统由Master与Worker Node组成。
Master核心组件:
API Server。核心功能是提供Kubernetes各类资源对象的增、删、改、查及Watch等HTTP REST接口,成为集群内各个功能模块之间数据交互和通信的中心枢纽,是整个系统的数据总线和数据中心。除此之外,它还是集群管理的API入口,提供了完备的集群安全机制。API Server是由多实例同时工作,各个组件通过负载均衡连到具体的API Server实例上。
controller-mananger。负责编排,用于调节系统状态。内置了多种控制器,是Kubernetes维护业务和集群状态的最核心组件。
scheduler。集群的调度器,它负责在Kubernetes集群中为Pod资源对象找到合适节点并使其在该节点上运行。
etcd。用于存储Kubernetes集群的数据与状态信息。
Work Node组件:
kubelet。负责Pod对应容器的创建、启停等任务,是部署在Node上的一个agent。
kube-proxy。实现Service通信与负载均衡机制。
容器运行时。负责本机的容器创建和管理。
Kubernetes核心设计
Kubernetes取的巨大的成功,与它良好的核心设计紧密相关。Kubernetes有三大核心设计:
编排抽象。容器平台核心点在于上层架构抽象出各种对象,便于去统一管理。Kubernetes创造性的抽象出了各个编排的关系,例如Pod对象、Service对象等。
声明式API。声明式API是整个系统自动化的核心,Kubernetes提供了以声明式API的方式将抽象对外暴露,同时也便于了用户管理对象。
开放插件。支持系统资源插件化;同时也支持用户自定义CRD和开发Operator。

Kubernetes的强大功能还进一步提供了:均衡负载、服务发现、弹性扩缩、自动修复等分布式应用管理的能力。Kubernetes的出现将开发、运维人员从繁重的应用部署与管理工作中解放出来。现在Kubernetes已经成为了容器编排的事实标准,是新一代的基于容器技术的PaaS平台的重要底层框架。
“今天就到这里了,下次为大家介绍Kubernetes分布式集群的快速搭建,尽请期待!”




