成为一名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种通信模式:
- 容器和容器之间的通信
- Pod和Pod之间的通信
- Pod和Service之间的通信
- 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