深入理解K8S资源管理和调度 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第13天
-
Kubernetes 简介
Kubernetes(通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写)是一个以容器为中心的基础架构,可以实现在物理集群或虚拟机集群上调度和运行容器,提供容器自动部署、扩展和管理的开源平台。满足了应用程序在生产环境中的一些通用需求:应用实例副本、水平自动扩展、命名与发现、负载均衡、滚动升级、资源监控等。Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。
- Kubernetes的优点
- 快速部署功能:定义对应的charts,可以方便把大型的应用部署上去。
- 智能的缩扩容机制:部署时候会自动去考虑容器应该部署在哪个服务器上,以及副本的数量可以自定义。
- 自愈功能:某个节点的服务崩溃了,可以自动迁移到另外一个服务器节点来恢复来实现高可用。
- 智能的负载均衡:利用Ingress,可以实现流量通过域名访问进来时候,进行流量的分流到不同服务器上。
- 智能的滚动升降级:升级或者降级时候,会逐个替换,当自定义数量的服务升级OK后,才会进行其他的升级以及真正销毁旧的服务。
-
Kubernetes核心组件
| 组件名称 | 作用 |
|---|---|
| etcd | 保存整个集群的状态 |
| apiserver | 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制 |
| controller manager | 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等 |
| scheduler | 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上 |
| kubelet | 负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理 |
| Container runtime | 负责镜像管理以及Pod和容器的真正运行(CRI) |
| kube-proxy | 负责为Service提供cluster内部的服务发现和负载均衡 |
-
Kubernetes的调度流程
调度主要分为以下几个部分:
-
首先是预选过程,过滤掉不满足条件的节点,这个过程称为 Predicates(过滤),该首先遍历全部节点,过滤掉不满足条件的节点,属于强制性规则,这一阶段输出的所有满足要求的节点将被记录并作为第二阶段的输入,如果所有的节点都不满足条件,那么 Pod 将会一直处于 Pending 状态,直到有节点满足条件,在这期间调度器会不断的重试。
-
然后是优选过程,对通过的节点按照优先级排序,称之为 Priorities(打分),该阶段即再次对节点进行筛选,如果有多个节点都满足条件的话,那么系统会按照节点的优先级(priorites)大小对节点进行排序,最后选择优先级最高的节点来部署 Pod 应用。
-
最后从中选择优先级最高的节点,如果中间任何一步骤有错误,就直接返回错误
(待补充)