介绍
kubernetes:声明式系统
kubernetes 的所有管理能力构建在对象抽象的基础上,核心对象包括:
- Node: 计算节点的抽象,用来描述计算节点的资源抽象、健康状态等。
- Namespace: 资源隔离的基本单位,可以简单理解为文件系统中的目录结构。
- Pod: 用来描述应用实例,包括镜像地址、资源需求等。 Kubernetes 中最核心 的对象,也是打通应用和基础架构的秘密武器。
- Service: 服务如何将应用发布成服务,本质上是负载均衡和域名服务的声明。
结构图
Master Node(主节点)
- APIServer API服务器:
这是 Kubernetes 控制面板中唯一带有用户可访问 API 以及用户可交互的组件。API 服 务器会暴露一个 RESTful 的 Kubernetes API 并使用 JSON 格式的清单文件(manifest files)。
- Cluster Data Store 集群的数据存储:
Kubernetes 使用“etcd”。这是一个强大的、稳定的、高可用的键值存储,被 Kubernetes 用于长久储存所有的 API 对象。
- Controller Manager 控制器:
被称为“kube-controller manager”,它运行着所有处理集群日常任务的控制器。包 括了节点控制器、副本控制器、端点(endpoint)控制器以及服务账户等。
- Scheduler 调度器:
调度器会监控新建的 pods(一组或一个容器)并将其分配给节点。
Worker Node(工作节点)
- kubelet 节点客户端:
负责调度到对应节点的 Pod 的生命周期管理,执行任务并将 Pod 状态报告给主节 点的渠道,通过容器运行时(拉取镜像、启动和停止容器等)来运行这些容器。它 还会定期执行被请求的容器的健康探测程序。
- kube-proxy 网络代理:
它负责节点的网络,在主机上维护网络规则并执行连接转发。它还负责对正在服务 的 pods 进行负载平衡。
etcd
etcd 是 CoreOS 基于 Raft 开发的分布式 key-value 存储,可用于服务发现、共享配置以及一致性保障(如 数据库选主、分布式锁等)。
- 基本的 key-value 存储;
- 监听机制;
- key 的过期及续约机制,用于监控和服务发现;
- 原子 CAS 和 CAD,用于分布式锁和 leader 选举。
APIServer
Kube-APIServer 是 Kubernetes 最重要的核心组件之一,主要提供以下功能:
- 提供集群管理的 REST API 接口,包括:
- 认证 Authentication;
- 授权 Authorization;
- 准入 Admission(Mutating & Valiating)
- 提供其他模块之间的数据交互和通信的枢纽(其他模块通过 APIServer 查询或 修改数据,只有 APIServer 才直接操作 etcd)。
- APIServer 提供 etcd 数据缓存以减少集群对 etcd 的访问。
APIServer 展开图
Controller Manager
- Controller Manager 是集群的大脑,是确保整个集群动起来的关键;
- 作用是确保 Kubernetes 遵循声明式系统规范,确保系统的真实状态(Actual
State)与用户定义的期望状态(Desired State)一致;
- Controller Manager 是多个控制器的组合,每个 Controller 事实上都是一个 control loop,负责侦听其管控的对象,当对象发生变更时完成配置;
- Controller 配置失败通常会触发自动重试,整个集群会在控制器不断重试的机 制下确保最终一致性( Eventual Consistency)。
工作流程:
代码结构Informer 内部机制
.//staging/src/k8s.io/kubectl/README.md:- Code must be usefully commented.