k8s技术全景:架构、应用与优化
参考:
这是之前调研k8s的时候写过的一篇总结,现在分享出来,后面可能会做一些补充。
一、介绍
1、Kubernetes 的历史和演进
Kubernetes(简称 K8s)是一个开源的容器编排系统,用于自动化应用程序的部署、扩展和管理。它最初是由 Google 内部的 Borg 系统启发并设计的,于 2014 年作为开源项目首次亮相。
1.1 初始阶段
Kubernetes 的诞生源于 Google 内部对大规模容器管理的需求。早在 2014 年之前,Google 已经在其内部系统 Borg 上积累了大量关于容器编排和管理的经验。这些经验和技术最终孕育出 Kubernetes。
1.2 发展阶段
随着云计算和微服务架构的兴起,Kubernetes 迅速成为行业标准。它的设计哲学、可扩展性和社区支持是其成功的关键因素。2015 年,Cloud Native Computing Foundation(CNCF)成立,并接管了 Kubernetes 的发展。在 CNCF 的支持下,Kubernetes 经历了快速发展,吸引了一大批贡献者和用户。
1.3 演进阶段
Kubernetes 不断演进,增加了对多种云平台的支持,改进了网络和存储功能,增强了安全性。其社区也不断扩大,衍生出众多相关项目和工具,形成了一个庞大的生态系统
2、k8s 的核心概念和设计理念
2.1 核心概念(简单列举几个)
- 1、Pod:Pod 是 Kubernetes 的基本运行单位,代表了在集群中运行的一个或多个容器的组合。
- 2、Volumes:属于存储类别,是用来生命在 Pod 中的容器可以访问的文件目录的,是一个抽象的对象,不仅支持本地存储,也支持网络存储和分布式存储。
- 3、Deployment:Deployment 提供了对 Pods 和 ReplicaSets(副本集)的声明式更新能力。
- 4、Service:Service 是对一组提供相同功能的 Pods 的抽象,它提供了一个稳定的网络接口。
- 5、Label:对 k8s 中各种资源进行分类、分组,添加具有特别属性的标签,相当于给资源打标签,从而过滤出匹配的资源。
- 6、Namespace:提供一种机制,将同一集群中的资源划分为相互隔离的组。用于给集群中任何对象组进行分类、筛选和管理(便于划分团队、项目、产品阶段、权限访问控制等)。
- 7、Master:指的是集群控制节点,负责整个集群的管理和控制,支持高可用部署,可以看作“控制面”。
- 8、Worker:工作负载节点,特指一台物理机,可以看作“数据面”。
2.2 设计理念
-
声明式配置:Kubernetes 使用声明式配置(而非命令式),用户定义期望状态,系统负责实现这一状态。
-
自我修复:系统能够自动替换、重启、复制和扩展集群中的节点(达到用户期望的状态)。
-
可扩展性: CRD(Custom Resource Definition)、可扩展接口、Device Plugin、CNI(Container Network Interface)、CRI(Container Runtime interface)、CSI(Container Storage Interface)、调度框架扩展
-
高内聚、低耦合(代码层面):API 对象是彼此互补而且可组合的。
二、k8s 架构
引自: