NOTE

Apiserver 问题排查: too old resource version

回顾一下常见的 too old resource version 问题,该报错错误信息如下,其中 1785219 是请求带过去的 rv(resource version),1787027 是 apiserver 缓存中最新的 rv,本文基于的 K8s 版本是 K8s1.16。 [kubelet] E0225 18:46:00.688601 62642 reflector.go:227] ...

Apiserver 中缓存层 Cacher 的实现

因为前段时间集群遇到了 Too large resource version 的问题,感觉有必要理解下 Apiserver 中的缓存层是怎么工作的,以及其事件窗口是怎么设计的。本文参考的 K8s 版本为 1.16。缓存层主要设计到三个组件 Cacher、watchCache、cacherWatcher,本文不会面面俱到的介绍,重在理解整个过程。 分析过程以 Deployment 资源为例,...

Apiserver 问题排查: Too large resource version

前段时间集群内的 elastic-operator 一直报错,报错跟下面类似,都是报 Too large resource version 的问题。记录下排查过程和相关知识点。 E0513 19:45:35.671005 598 reflector.go:178] object-"kube-system"/"kube-router-token-4px26": Failed to li...

使用 xfs_quota 实现磁盘容量隔离

使用 xfs_quota 可以实现磁盘容量隔离,本文介绍一下 xfs_quota 工具的使用 准备 分为未挂载设和已挂载设备两种,对于未挂载设备,在挂载设备的时候指定 prjquota 就可以了,比如: root@ubuntu:~# mount -o prjquota /dev/loop5 /data/volumes/xfs32m root@ubuntu:~# mount | grep l...

K8s 调度器 SchedulerCache 工作原理

目录 Cache State Machine schedulerCache 结构体及其 Cache 接口实现 清空 Assume 过期的 Pod K8s调度器的SchedulerCache是其工作的核心,用来缓存所有已经调度过的pod,这些pod按照Node来进行划分,每个Node包含一个NodeInfo,包含一个该节点上的所有的pod。本文基于K8s1.14分析下Sche...

PV Controller 的本地 cache 及其 indexer

众所周知,在 K8s 的 informer 缓存里,通过添加 indexer 能加快查询,这里看看为什么。 以pv controller为例,在初始化pv controller的时候,创建了两份本地cache,这个cache实际上跟informer cache工作原理一致,其中一个添加了索引,看一下这个缓存是怎么使用,以及怎么实现的。 controller := &Persiste...

实现 K8s client-go 的监控

这里的client-go的监控是指,对client-go的请求时延、QPS等的监控,任何第三方控制器可以使用client-go来向K8s apiserver发送请求,并实现对client-go的监控。本文以k8s 1.14为例,介绍如何实现client-go的监控。 client-go监控接口 client-go提供的监控接口定义在client-go/tools/metrics/metric...

Local volume provisioner 架构分析

目录 main 函数 Local Controller 主流程 生成 pv 缓存 发现 pv 删除 pv local volume provisioner,一个提供本地存储的组件,主要是不用管理员手动创建pv 了,可以根据目录自动发现并创建 pv,梳理一下其工作过程。 main 函数 main 函数做的工作不多,就...

Kubelet 容器运行时/CRI/CNI 初始化

kubelet的 syncPod方法 是同步Pod的主要方法,在这个方法的最后调用了kl.containerRuntime.SyncPod方法,其实现是kubeGenericRuntimeManager.SyncPod,其代码目录为:pkg/kubelet/kuberuntime/kuberuntime_manager.go 本文按照代码顺序,依次介绍 CRI(服务端/客户端)、kubeG...

理解 K8s CSI 存储插件机制

目录 CSI Spec中的RPC接口 Identity Service Controller Service Node Service In Tree CSI Plugin 关于通信方式 推荐的部署以及开发方式 开发CSI驱动 Kubernetes CS...