Kubernetes
Kubernetes 源码分析、问题排查和思路分析
rootlh;
普通开发者如果习惯于在架构师封装好的东西之上,只专注于做业务开发,那久而久之,在技术理解和成长上就会变得迟钝甚至麻木。
展开
-
K8S调度器--优先级与抢占机制、亲和性调度、内置调度算法(1.19版本新特性)
一、优先级与抢占机制Kube-scheduler 在调度过程中,每次从调度队列(SchedulingQueue)中取出 Pod,进行一轮调度。那么调度队列中的 Pod 是按照什么顺序入队的呢?Pod 资源对象支持设置优先级(Priority)属性,通过优先级的不同,将优先级高的 Pod 放在调度队列的前面,优先进行调度。如果优先级高的 Pod 调度失败,没有找到合适的节点时,会放入无法调度队列(UnschedulableQueue)中,进入抢占阶段,在下次调度时将节点上优先级低的 Pod 驱逐。如何为原创 2020-10-26 21:09:47 · 1403 阅读 · 0 评论 -
K8S调度器--kube-scheduler架构设计和启动流程源码分析
文章目录一、kube-scheduler架构设计二、kube-scheduler组件启动流程一、kube-scheduler架构设计调度器的核心功能是为Pod找到最适合的节点运行。对于小规模集群,每个调度周期会遍历集群中的所有节点,找到最合适节点进行调度。而对于大规模集群,每个调度周期只会遍历集群中的部分节点,在这部分节点中找到最合适的节点进行调度。整个调度流程主要分为预选、优选和绑定三个节点。预选阶段首先过滤掉不符合条件的节点,优选阶段主要对预选阶段筛选后的节点进行打分,绑定阶段将分数最高的节点和原创 2020-10-17 16:30:48 · 954 阅读 · 0 评论 -
K8S-APIServer日志报 has no resources 的分析
文章目录一、现象二、源码分析三、APIServer的启动流程对应的源码:1、资源注册2、创建 KubeAPIServer一、现象在生产环境中遇到 api-server 服务发生陆续重启的现象, 查看监控,APIServer 所在的 master 节点的CPU、内存和网络流量发生抖动。在 APIServer 日志中可以看到日志中存在 it has no resources 的警告日志:{"log":"W0814 03:04:44.058851 1 genericapiserver.go:3原创 2020-09-06 11:07:02 · 2257 阅读 · 0 评论 -
Client-go源码分析(四)WorkQueue
文章目录一、WorkQueue 简介二、WorkQueue 结合 Informer 的完整使用案例三、FIFO 队列四、延迟队列五、限速队列本文为《Kubernetes 源码剖析》读书笔记,书籍简介:http://www.broadview.com.cn/book/6104一、WorkQueue 简介在 Informer 中,Delta FIFO 队列触发 Add、Update、Delete 回调,在回调方法中,将需要处理的资源对象变化事件的 key 放入 WorkQueue 工作队列中。等待 Con原创 2020-08-21 22:49:21 · 831 阅读 · 0 评论 -
Client-go源码分析(三)Informer机制
文章目录一、简介二、Reflector 底层原理分析[思考] Informer 中的优化机制本文为《Kubernetes 源码剖析》读书笔记,书籍简介:http://www.broadview.com.cn/book/6104一、简介Kubernetes 中,控制器需要对集群中的资源对象的状态进行监控,使资源对象的实际状态和通过 yaml 定义的期望状态协调达到一致。那么控制器是如何对资源对象进行监控,并根据对象的实际状态变化做出相应的处理呢?实际上就是通过 Client-go 包中的 Informe原创 2020-08-12 21:38:54 · 855 阅读 · 0 评论 -
Client-go源码分析(二) Informer 中的 Resync 机制分析
一、Client-go 中的 Informer 工作流程图Informer 中的 Reflector 通过 List/watch 从 apiserver 中获取到集群中所有资源对象的变化事件(event),将其放入 Delta FIFO 队列中(以 Key、Value 的形式保存),触发 onAdd、onUpdate、onDelete 回调将 Key 放入 WorkQueue 中。同时将 Key 更新 Indexer 本地缓存。Control Loop 从 WorkQueue 中取到 Key,从 Ind原创 2020-08-09 10:52:15 · 1953 阅读 · 0 评论 -
Client-go源码分析(一)客户端对象
一、源码结构discoverydynamickubernetesrestscaleinformerslisterstoolsutiltransportplugin二、Client 客户端对象原创 2020-08-07 20:22:52 · 1075 阅读 · 0 评论 -
Openshift中Route的HAProxy实现无缝重载原理分析
文章目录一、背景二、Haproxy在不同版本中处理无缝重载的策略OpenShift 3.9及更高版本OpenShift 3.7及更早版本一、背景在openshift集群中(以下简称OCP),对外部流量的转发是通过Router控制器控制Route对象中的路由规则来重载Infra节点中的HAProxy配置文件实现的。在上图中的第3步,Router重载Haproxy配置的过程中是会有有一小段时间Haproxy服务不可用,那么在Haproxy重载过程中是如何做到用户请求不丢失呢?二、Haproxy在不同版原创 2020-05-30 14:06:10 · 1062 阅读 · 0 评论 -
Raft算法详解
文章目录一、leader选举过程1、启动时选举:2、运行时选举:3、log replication4、脑裂问题一、leader选举过程raft协议中,一个节点任一时刻处于以下三个状态之一:leader:主节点follower:从节点candidate:候选主节点1、启动时选举:有节点启动时都是follower状态,在一段时间内如果没有收到来自leader的心跳,从follower切换到candidate,发起选举。如果收到集群中大多数的票(含自己的一票)则切换到leader状态;如果发现其原创 2020-05-23 17:01:02 · 3876 阅读 · 0 评论 -
K8S调度器Schduler工作原理--Priority优选算法中的抢占机制
文章目录一、为什么需要抢占机制二、如何使用抢占机制1、创建 PriorityClass 对象:2、在 deployment、statefulset 或者 pod 中声明使用已有的 priorityClass 对象即可三、相关流程一、为什么需要抢占机制当一个 pod 调度失败后,暂时处于 pending 状态,直到 pod 被更新或者集群状态发生变化,调度器才会对这个 pod 进行重新调度。但在实际的业务场景中会存在在线与离线业务之分,若在线业务的 pod 因资源不足而调度失败时,此时就需要离线业务下掉一原创 2020-05-23 15:59:16 · 751 阅读 · 0 评论 -
K8S-APIServer源码分析组件构成、原理、程序流程
文章目录一、组件构成二、组件实现原理三、程序流程源码分析一、组件构成apiserver 由 3 个组件构成(AggregatorServer、APIServer、APIExtensionServer)AggregatorServer:实现请求的代理转发,将来自用户的请求拦截转发给其他服务器,并且负责整个 APIServer 的服务发现功能APIServer:负责对内建资源对象请求的一些处理...原创 2020-05-10 17:16:51 · 2223 阅读 · 0 评论 -
K8S实现资源预留分析
节点可为pod分配的资源计算方法:Node Allocatable Resource = Node Capacity(资源总大小) - Kube-reserved(kubelet保留资源) - system-reserved(系统保留资源) - eviction-threshold(用户设置的驱逐阈值)原创 2020-04-12 15:58:55 · 2296 阅读 · 0 评论 -
K8S基于MutatingAdmissionWebhook实现资源超卖
K8S基于MutatingAdmissionWebhook解决资源超卖问题资源超卖问题分析实现资源超卖的思路MutatingAdmissionWebhook特性MutatingWebhookConfiguration对象简介源码分析资源超卖算法实践参考资料资源超卖问题分析在生产环境中,kubernetes集群的计算节点上运行着许许多多的Pod,分别跑着各种业务容器,我们通常用Deploymen...原创 2020-03-22 15:12:12 · 7228 阅读 · 2 评论 -
K8S的HPA机制
K8S的HPA机制一、HPA简介二、HPA设置一、HPA简介HPA(Horizontal Pod Autoscaler)Pod自动弹性伸缩,通过对Pod中运行的容器各项指标(CPU占用、内存占用、网络请求量)的检测,实现对Pod实例个数的动态新增和减少。早期的kubernetes版本,只支持CPU指标的检测,因为它是通过kubernetes自带的监控系统heapster实现的。到了kube...原创 2020-03-13 14:11:43 · 17906 阅读 · 0 评论 -
K8S调度器Schduler工作原理--Predicates预选算法过程分析
Predicates预选算法过程分析Scheduler工作流程Predicates预选流程predicate的并发过程用 podFitsOnNode 函数实现一个node的预选过程单个predicate执行过程Scheduler工作流程我们在使用K8S集群时,常常需要对Deployment Controller做创建、修改、删除操作,K8S对应的会创建、销毁和重新调度Pod在合适的节点上,这个...原创 2020-01-14 16:02:43 · 1844 阅读 · 0 评论 -
K8S调度器Schduler工作原理--Priority优选算法过程分析
Priority优选算法过程分析Scheduler工作流程Priority优选流程Fucntion类型优选算法Map-Reduce类型优选算法Combine组合结果集Scheduler工作流程我们在使用K8S集群时,常常需要对Deployment Controller做创建、修改、删除操作,K8S对应的会创建、销毁和重新调度Pod在合适的节点上,这个调度过程是通过K8S的Scheduler调度...原创 2020-01-11 19:20:17 · 967 阅读 · 0 评论