从零实现一个operator工具篇-kubebuilder 背景demo已经开发完成了,在这个过程中使用了kubebuilder作为开发工具,之前也提到了几种工具的对比,但是kubebuilder并没有详细的介绍,这篇文章来介绍一下kubebuilder的架构设计。 架构设计kubebuilder依赖于controller-tools和controller-runtime,所以在了解kubebuilder架构之前先简单了解下这两个工具。 controlle 2024-02-16 #kubernetes
node_exporter源码解析 背景最近想要实现一个关于OS exporter,发现和node exporter类似,所以打算学习一下node exporter源码。这里以centos8作为操作系统。所以相关代码都是Linux相关。 CPU指标获取在具体了解代码之前,在linux中如果想要查看CPU相关指标都有那些工具?耳熟能详的都有以下工具: top 各种stat vmstat iostat pidstat mpstat 2024-02-15 #Observability
Borg论文导读 背景 解决运维操作管理问题 提高服务可靠性 降低服务器成本 设计目标 运维操作自动化 监控系统->自动愈合系统 应用场景系统设计 broglet 评分计算 调度实现 异构架构 尽量让执行过相同任务的机器去执行一样的任务 软件包/镜像拉取速度 任务混合部署 对比K8S思考 Borg如何保证业务能够自动恢复到预期状态? 2024-02-15 #distributed system
并发与并行的区别以及实现 背景不管是在面试的时候,还是在写代码的时候,都会提起什么是并行什么是并发,经常出现搞混的情况。甚至出现并发==并行这种尴尬的场景。为了解决这个问题,尝试从不同角度以及代码上来识别什么是并行,什么是并发。 并发并行 2024-02-05
内存泄漏排查工具-memleak memleakmemleak是BCC工具中的内存分析工具,它用来跟踪(trace)内存和释放请求,并且收集进程的调用堆栈,并展示进程中每个函数的调用情况。 实践这里使用《Linux 性能优化实战》中倪朋飞老师的例子来对memleak进行一个简单上手展示: 1$ docker run --name=app -itd feisky/app:mem-leak 这是一个计算斐波那契数列的进程。之后运行起 2024-02-05 #eBPF
SLA与SLO以及SLI之间的关系 背景做了一年的SRE,虽然大部分时间都在做开发,但是其中一些概念还是需要去了解的,这篇文章主要梳理下关于什么是SLA,SLO,SLI概念以及它们之间的关系。 SLA(Service-Level Agreement) 服务等级协议SLA简单来说就是一种保证下限的协议,没有任何一个服务可以保证自己不会出现问题,停机出现故障时必然的,但是在多长时间之内恢复以及相应的赔偿就是SLA需要做的事情了。SLA 2024-01-30 #Observability
从零开始实现一个operator(2)-控制器实现 控制器-Controller在上一篇中,已经介绍如何去实现一个CR,并且也在集群中创建了,但是并没有相关Pod以及资源被创建,是因为Controller没有被实现。这里来讲下如何实现一个Controller。 控制器实现reconciliation loopreconciliation loop也就是概念篇中提到的控制回路,它用来保证期望状态和当前状态一致性的关键机制。以下是它的工作状态: 监视 2024-01-19 #kubernetes
K8S节点NotReady排错思路 背景在K8S中这种问题节点出现问题导致NotReady的情况并不少见,比如资源不足导致节点不可用,这里简单介绍下我遇到的情况以及我是如何解决的。 排查思路我使用的是VMware虚拟化出来的三个节点,一个master两个node,在kubectl get node的时候发现节点不可用: 以往一般会直接去重启对应节点机器,但是集群是重启过的,进一步查看原因,使用kubectl describe no 2024-01-14 #kubernetes
client-go组件使用与原理 背景之前大部分时间都在用client-go进行开发,也用过informer做一些有意思的事情,但是很多细节方面的东西没有注意,这次算是对client-go原理进行一个整理。 架构设计client-go类型client-go支持四种类型客户端对象来和api server进行交互: RESTClient ClientSet DynamicClient DiscoveryClient 其他三种都是基 2024-01-12 #kubernetes
kubernetes架构设计解析 背景之前对kubernetes有过一些简单的了解,但是并没有去深入的去理解每个组件之间是如何工作的,所以正好复习一下。 概要首先看下官方给出来的架构图: 可以看到架构组件分为两类: 控制平面(control plane) 节点(node) 控制平面组件如下: kube-api-server etcd scheduler Controller Manager cloud-controller 2024-01-12 #kubernetes