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

77 阅读2分钟

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

1 Kubernetes 简介

介绍k8s核心功能以及设计准则、架构、组件等

如何部署你的WordPress应用?

  • 登录服务器,手动安装各种依赖,然后部署二进制?
  • 或是自己编译,打包镜像,手动启动容器?容器可以一次打包,任意运行,解决了环境依赖的问题。

有了容器技术为什么还需要k8s?

  • 应用数量巨大怎么办?(一个个启动或者用脚本已经力不从心了)
  • 如何自动化部署?
  • 如何编排?(哪个应用运行在哪个节点更好?)
  • 出了问题如何恢复?

k8s是什么?

  • 目的:管理容器应用和服务
  • 作用:声明式配置和自动化
  • 特点:便携,可扩展、开源

1.1 Kubernetes核心概念

  • Pod:k8s最小单位,一个或多个container的组合
  • Deployment、Statefulset:Pod的集合
  • Volume/PVC/PV/StorageClass:存储相关
  • Node

1.2 Kubernetes设计准则

  • Declarative > imperative:声明式的,只需要告诉系统你想达到的效果
  • Control loops:观察、纠正、循环
  • Simple > Complex:让用户用得简单,把复杂留给系统
  • Modularity:模块化
  • Legacy compatible:向下兼容
  • Open > Close:开源

1.3 Kubernetes架构

如图,k8s大体可以分为两块,一个是蓝色虚线框内,控制面的东西,另一个就是浅灰色框里面的节点层面的东西

控制层

  • ETCD

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

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

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

    • 负责应用实例的调度,把Pod绑定到合适的Node

节点层

  • Kubelet:基于Pod声明,真正开始启动容器,负责容器生命周期维护
  • Kube- proxy:网络代理,负责维护节点网络规则,接管Pod出入流量

1.4 Kubernetes核心通信机制 List-Watch

这块没太明白,以后再看看

1.5 Kubernetes核心功能

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

2 资源管理

介绍k8s如何做资源管理,包括上报、维护、分配以及回收等

2.1 可管理的资源种类

  • 计算

    • CPU,Memory,HugePages,GPU……
    • Socket,Numa……
  • 存储

    • Ephemeral Storage,NFS,GlusterFS,RBD,Cinder……
    • ByteDance Storage(FS,Block)……

2.2 资源上报

2.3 资源分配

2.4 状态维护

2.5 资源回收

3 调度

介绍k8s的调度机制、流程等

4 优化实践

总结k8s与yarn的一些不同点,以及k8s还可以做哪些改进