乐趣区

关于k8s:成为一名k8s专家需要掌握哪些知识当我读完k8s源码之后总结

成为一名 k8s 专家须要把握哪些常识

  • 在残缺的浏览了 k8s 源码,梳理了 160 多篇文档之后我进行如下的总结:
  • 当然次要目标是列举一些关键点:具体细节受限篇幅不会贴出来

教程地址

  • k8s 底层原理和源码解说之进阶篇
  • k8s 底层原理和源码解说之精髓篇

k8s 常识图谱

01 容器底层常识

  • 01 到底什么是容器:简略说就是受限制的过程,底层相干的两个技术是 linux 的 namespace 和 cgrop

    • namespace 的分类和 sandbox 容器的关系,哪些 ns 是共享的,波及到容器的隔离不彻底问题
    • cgroup v1 和 v2 的区别,cpu/mem 限度的原理,cpu 绑核如何操作
  • 02 容器镜像:镜像不是 docker 的专利

    • OCI(Open Container Initiative)标准是事实上的容器规范,曾经被大部分容器实现以及容器编排零碎所采纳。
    • 任何实现了 OCI 标准的工具都能够打镜像
    • 标准要求镜像内容包含以下 几个 局部:

      • 3 个必须的

        • Image Manifest:提供了镜像的配置和文件系统层定位信息,能够看作是镜像的目录,文件格式为 json。
        • Image Layer Filesystem Changeset:序列化之后的文件系统和文件系统变更,它们可按程序一层层利用为一个容器的 rootfs,因而通常也被称为一个 layer(与下文提到的镜像层同义),文件格式能够是 tar,gzip 等存档或压缩格局。
        • Image Configuration:蕴含了镜像在运行时所应用的执行参数以及有序的 rootfs 变更信息,文件类型为 json。
      • 1 个可选的

        • image-index : 图像索引是一种更高级别的清单,它指向特定的图像清单,非常适合一个或多个平台
  • 03 容器联结文件系统:overlayfs 的了解

    • 容器 run 起来时对应的 3 个层:

      • image layer (只读),镜像的层
      • init layer 容器在启动时写入的一些配置文件,产生在 container layer 之前
      • container layer 新增的可写层
    • copy on write 技术

      • 益处是缩小镜像体积,晋升启动速度,
      • 毛病就是写入的速度慢,所以在 container layer 中不适宜进行大量的文件读写,应该应用 Volume
  • 04 容器运行时 CRI 次要包含两个 gRPC 服务,ImageService 和 RuntimeService

    • grpc 服务剖析

      • ImageService 服务次要是拉取镜像、查看和删除镜像等操作
      • RuntimeService 则是用来治理 Pod 和容器的生命周期,以及与容器交互的调用(exec/attach/port-forward)等操作
      • Exec 等交互服务也能够独自进去做一个 StreamService
    • low/high level 容器运行时

      • 如 runc、lxc、containerd、docker、libcontainerd 他们有什么区别
    • docker 的组件被拆分成什么样子了,它们都负责干什么

02 k8s 计算

  • 01 内置资源的惯例操作

    • deployment、statefulset、daemonset、job
    • 扩 / 缩容:慢启动 slowBatchStart 创立 pod 的实现和目标
    • 更新策略:滚动更新 vs 裸露重建
    • 删除策略:级联删除 vs 保留 pod
  • 02 k8s-pod 中几种容器的关系

    • sandbox 都干了什么
    • init 容器的目标和利用场景
    • app 容器的启动过程:internal hook 和给用户裸露的 lifecycle hook
    • 三种探针的作用
    • 总结就是 pod 的生命周期,几种容器的启动程序,几个 hook 的作用,最初还有探针
  • 03 拓扑管理器 kubelet 多种资源管理器独立分配资源不足对立的视角

    • 多种资源管理器在给 pod 调配设施时,都是独立工作的,不会有一个全局观念,这可能会造成资源分配不合理的问题
    • Topology Manager 就是提供全局的视角,为了尽量将资源分配在同一个 numa 节点下,晋升性能
  • 04 pod 的三种 QOS 和 cpu 内存资源的关系

    • 不同 qos oom_score_adj 值的设置
    • qos 和 资源共享池的关系,波及到前面的 cpu/mem manager 的 numa 设置
  • 05 kubelet 调用 CRI 的流程和 docker-shim 这个奇葩的存在

    • k8s 如何麻木 docker 的
    • OCI 规范的制订

03 k8s 存储

  • 01 常见 volume 类型
  • 02 configMap 和 secret 的热加载原理
  • 03 动动态 pv 和 StorageClass 动静生成 PV

    • PV 和 PVC 之间的相互作用遵循这个生命周期:供给 –> 绑定 –> 应用 –> 开释 –> 循环
    • 随着 PV 数量的减少,管理员须要不停的定义 PV 的数量,衍生了通过 StorageClass 动静生成 PV
    • StorageClass 通过 PVC 中申明存储的容量,会调用底层的提供商生成 PV。
  • 04 kubelet volume-manager 挂载 volume 的过程
  • 05 CSI 插件

    • 动静 Provisioner 机制

04 k8s 网络

  • 01 Kubernetes 须要解决 4 种通信模式:

    1. 容器和容器之间的通信
    2. Pod 和 Pod 之间的通信
    3. Pod 和 Service 之间的通信
    4. Internet 和 Service 之间的通信
  • 02 svc 4 种负载平衡模式:其实说白了就是流量由谁来转发
  • 03 svc 的服务发现:dns 和环境变量
  • 03 iptables 是如何转发 svc 的流量的:

    • 几条 KUBE-XXX 的链的数据流转
  • 04 svc 的 cluster-ip 能被 ping 通吗:

    • 须要分状况,比方 iptables reject 了 icmp 的报文
  • 05 cni 插件:calico 和 Flannel 的区别
  • 06 ingress 机制:原理能够简化为 nginx+ 服务发现 + 热更新

    • traefik 源码解读
  • 07 无头服务的真正生产用处

05 k8s 的插件机制

  • 01 准入控制器:能够注入 sidecar 或者做 vpa 扩容

    • 数据申请流程是什么样的?
  • 02 CRI、CSI、CNI 就是 k8s 给第三方实现者提供的 计算存储网络插件机制
  • 03 apiserver 的聚合插件,不便扩大 API:典型利用 metrics.k8s.io 和 custom.metrics.k8s.io

    • 源码了解的如何?
  • 04 kubelet 的 device-plugins 设施插件机制,不便如 nvidia GPU 设施的接入:grpc 注册 device 和 grpc server 提供 device 的治理

    • grpc 哪里怎么注册和治理
  • 05 严格说来 crd+controller 的 operator 模式也算

    • reconcile 调谐怎么写

06 k8s 的管制立体源码了解

  • 01 创立 pod 的流程在管制立体组件间的流转
  • 02 informer 机制的作用

    • 消息中间件?升高 etcd 的压力
  • 03 leaderelection 选主机制
  • 04 kubelet 中的 syncLoop 大循环

    • 5 类事件循环 7 个 chan
  • 05 各个控制器的 syncXXX 流程

    • 读写都混在一起的 sync 流程
  • 06 kubelet 中的各个资源 manager

    • statusManger 怎么同步状态的
    • containerManger 怎么限度 ephemeral storage
    • EvictionManager 源码中怎么工作的
  • 07 apiserver

    • 认证
    • 鉴权:rbac 源码
    • 准入:mutate vs validate,当然还有 webhook
    • 限速
    • event broadcast 机制

07 k8s 编排

  • 01 基于 cpu 的 hpa:快起慢缩

    • 怎么做到快起快缩
  • 02 基于 mem 的 hpa:怎么和 metrics-server 交互的,波及到 apiserver 的聚合插件
  • 03 基于 prometheus-operator 的 vpa

    • custom.metrics.k8s.io apigroup 的流程
    • 其中为什么须要准入控制器的接入
    • vertical-pod-autoscaler 源码浏览之 Recommender、updater、admission-controller 源码解读
  • 04 metrics-server 的源码了解和 kubelet top 的原理

    • 底层的数据来自哪里
    • 怎么存储的
    • cpu rate 如何算出的

08 k8s crd 开发

  • 01 为什么要 crd:封装根底对象来实现对分布式 / 有状态服务的疾速部署
  • 02 crd 开发过程:定义 CRD 和实现 controller reconcile 的 具体逻辑,其余交给代码生成工具

09 k8s 的监控

  • 01 metrics,那没的说必定就是 prometheus,那么 prometheus on k8s 那么计划也太多了

    • 存储怎么选
    • kube-prometheus 中的原理和提醒又是什么
  • 02 logging
  • 03 event
退出移动版