引言:
Kubernetes 是为运行分布式集群而建立的,分布式系统的本质使得网络成为 Kubernetes 的核心和必要组成部分,了解 Kubernetes 网络模型可以使你能够正确运行、监控和排查应用程序故障。
一、Kubernetes的核心组件
1.1、Master组件
1.1.1 kube-apiserver
- 用于暴露 kubernetes API,任何资源请求或调用操作都是通过 kube-apiserver 提供的接口进行。
- 以 HTTP Restful API 提供接口服务,所有对象资源的增删改查和监听操作都交给 API Server 处理后再提交给Etcd 存储。
- 可以理解成 API Server 是 K8S 的请求入口服务。API Server 负责接收 K8S 所有请求(来自 UI界面或者CLI 命令行工具),然后根据用户的具体请求,去通知其他组件干活。可以说 API Server 是 K8S 集群架构的大脑。
1.1.2 Kube-controller-manager
运行管理控制,是 K8S 集群中处理常规任务的后台线程,是 K8S 集群里所有资源对象的自动化控制中心。
在 K8S 集群中,一个资源对应一个控制器,而 Controller manager 就是负责管理这些控制器的。由一系列控制器组成,通过 API Server 监控整个集群的状态,并确保集群处于预期的工作状态,比如当某个 Node 意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
控制器 | 说明 |
---|---|
Node Controller(节点控制器) | 负责在节点出现故障时发现和响应 |
Replication Controller(副本控制器) | 负责保证集群中一个RC(资源对象Replication Controller)所关联的Pod副本数始终保持预设值。可以理解成确保集群中有且仅有N个Pod实例,N是RC中定义的Pod副本数量 |
Endpoints Controller(端点控制器) | 填充端点对象(即连接Services和Pods),负责监听Service和对应的Pod副本的变化。可以理解端点是一个服务暴露出来的访问点,如果需要访问一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道它的endpoint |
Service Account & Token Controllers(服务账户和令牌控制器) | 为新的命名空间创建默认账户和API访问令牌 |
ResourceQuota Controller(资源配额控制器) | 确保指定的资源对象在任何时候都不会超量占用系统物理资源 |
Namespace Controller(命名空间控制器) | 管理namespace的声明周期 |
Service Controller(服务控制器) | 属于K8S集群与外部的云平台之间的一个接口控制器 |
1.1.3 kube-scheduler
是负责资源调度的进程,根据调度算法为新创建的 Pod 选择一份合适的 Node 节点。可以理解成 K8S 所有 Node 节点的调度器。当用于要部署服务时,Scheduler 会根据调度算法选择最合适的 Node 节点来部署 Pod。
- 预算策略(predicate)
- 优选策略(priorities)
1.1.4 配置存储中心 — etcd
K8S 的存储服务,负责存储K8S集群的重要信息。etcd 是分布式键值存储系统,存储了 K8S 的关键配置和用户配置,K8S 中仅 API Server 才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据。
1.1.5 主节点工作流程
API Server 接收到请求创建一批 Pod,API Server 会让 Co