深入理解 K8S 资源管理和调度 | 青训营笔记

113 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第17天

1. Kubernetes 简介

便携可扩展开源的容器管理平台

Kubernetes 特性

  • 服务发现和负载均衡
  • 存储编排
  • 自动发布,回滚
  • 自愈
  • 秘钥,配置管理
  • 资源管理,应用编排调度

Kubernetes 几个核心概念

  • Pod
  • PVC/PV/StorageClass
  • Deployment
  • Statefulset
  • Node

1.1 Kubernetes架构

image.png

  • ETCD

    • 持久化数据中心
    • 维护集群中所有数据的有序性和一致性
    • 事件机制同步数据变更
  • APIServe

    • 对所有组件提供 API 接口
    • 负责 admission,鉴权等功能
    • 提供后端 etcd 数据 cacher,降低 ETCD 压力
    • 结合 ETCD,提供 List-Watch 机制
  • Controller-manager

    • 提供一系列控制器,负责维护各种对象的生命周期 比如: Node controller, PV controller, Deployment controller, StatefulSet controller 等
  • Kubelet

    • 基于 Pod 声明,真正开始启动容器,负责容器生命周期维护
  • Kube-proxy

    • 网络代理,负责维护节点网络规则,接管 Pod 出入流量

2. Kubernetes 资源管理

  • Pod:pod是k8s的最小管理单元,容器运行在pod,一个容器可运行多个pod。kubectl run运行容器pod,kubectl run -h查看用法
  • PVC/PV/StorageClass
  • Deployment:副本集部署,弹性伸缩。副本集(创建pod,同时复制多个,随机部署到节点上),弹性伸缩(当节点宕机,或者新加入节点时,根据该pod副本集配置数量决定是否在该节点运行pod)。
  • Statefulset:Pod的集合,集合中的Pod可以挂不同的存储卷
  • Node:结点主要分为控制面和数据面,数据面主要是运行机器的地方,node映射到机器的概念。

2.1 资源种类:

计算:CPU,Memory,Socket,Numa,NIC、HugePages,GPU...

存储:Ephemeral Storage,NFS,GlusterFS...RBD,Cinder...ByteDance Storage(FS,Block)...

2.2 资源上报:

  • 计算资源上报:

    • cAdvisor -> Kubelet -> Node
    • Agent -> Device plugin -> Kubelet -> Node
  • 存储资源上报:

    • 临时存储:
      • cAdvisor -> Kubelet -> Node
    • 持久化存储:
      • 托管到存储提供商管理

2.3 资源状态维护:

  • 计算资源状态维护:
    • kubelet/cgroup manager/device manager/evictioner manager -> cpu, memory, extended resources
  • 存储资源维护
    • PV controller -> PV/PVC

2.4 资源回收:

  • 计算资源回收:

    • Kubelet -> cgroup manager -> cpu, memory...
    • Kubelet -> device manager -> extended resources
  • 存储资源回收:

    • Controller manager -> unmounter -> detacher -> deleter

3.Port vs Yarn

  • 基本单位 Pod & Container
  • 资源管理 K8S可以管理CPU、memory,可以进行拓展管理,但对于精细化管理不可靠。
  • 调度模式: K8S:拿着应用找节点,调度质量好 YARN:拿着节点找应用
  • 系统设计 K8S:节点缓存,异常恢复简单 YARN:中心存储

总结

通过这节课我深入的了解了 K8S 资源管理和调度方法,掌握了一些技巧。

参考

  1. 【大数据专场 学习资料六】第四届字节跳动青训营 - 掘金 (juejin.cn)
  2. 示例:使用持久卷部署 WordPress 和 MySQL | Kubernetes