kubernetes版本:1.13.2 背景 由于operator创建的redis集群,在kubernetes apiserver重启后,redis集群被异常删除(包括redis exporter statefulset.redis statefulset).删除后operator将其重建,重新组建集群,实例IP发生变更(中间件容器化,我们开发了固定IP,当statefulset删除后,IP会被回收),导致创建集群失败,最终集群不可用. 经多次复现,apiserver重启后,通过查询redis…
kubernetes版本:1.13.2 接上一节:kubernetes垃圾回收器GarbageCollector Controller源码分析(一) 主要步骤 GarbageCollector Controller源码主要分为以下几部分: monitors作为生产者将变化的资源放入graphChanges队列:同时restMapper定期检测集群内资源类型,刷新monitors runProcessGraphChanges从graphChanges队列中取出变化的item,根据情况放入attem…
Kubernetes client-go Indexer / ThreadSafeStore 源码分析   请阅读原文:原文地址   Contents 概述 Indexer 接口 ThreadSafeStore threadSafeMap.Xxx() Index() 等实现 Index() 方法 ByIndex() 方法 IndexKeys() 方法 Replace() 方法 概述 源码版本信息 Project: kubernetes Branch: master Last commit id:…
概述Queue 接口DeltaFIFO元素增删改 - queueActionLocked()Pop()Replace() 概述 源码版本信息 Project: kubernetes Branch: master Last commit id: d25d741c Date: 2021-09-26 我们在<Kubernetes client-go 源码分析 - 开篇>里提到了自定义控制器涉及到的 client-go 组件整体工作流程,大致如下图: DeltaFIFO 是上面的一个重要组件,今天我们…
介绍 client-go 是一种能够与 Kubernetes 集群通信的客户端,通过它可以对 Kubernetes 集群中各资源类型进行 CRUD 操作,它有三大 client 类,分别为:Clientset.DynamicClient.RESTClient.通过它,我们可以很方便的对 Kubernetes 集群 API 进行自定义开发,来满足个性化需求. client-go 安装 client-go 安装很简单,前提是本机已经安装并配置好了 Go 环境,安装之前,我们需要先查看下其版本针对 k…
概述入口 - Reflector.Run()核心 - Reflector.ListAndWatch()Reflector.watchHandler()NewReflector()小结 概述 源码版本:kubernetes master 分支 commit-fe62fc(2021年10月14日) 回顾一下 Reflector 在整个自定义控制器工作流中的位置: 在<Kubernetes client-go 源码分析 - 开篇>中我们提到过 Reflector 的任务就是向 apiserver w…
概述Deployment 基础创建 DeploymentReplicaSet滚动更新失败回滚历史版本回滚其他特性小结 概述 Deployment 是最常用的 Kubernetes 原生 Workload 资源之一,我们一开始尝试使用 Kubernetes 的时候大概率就是从运行一个 Deployment 类型的工作负载开始的.今天开始我们计划分成几讲来从 Deployment 的特性介绍.源码分析等方面深度剖析 Deployment 资源和其背后的 Deployment 控制器. Deploym…
概述startDeploymentController 入口逻辑DeploymentController 对象DeploymentController 类型定义DeploymentController 初始化ResourceEventHandlerDeployment 变更事件ReplicaSet 变更事件DeploymentController 启动Run()syncDeployment小结 概述 源码版本:kubernetes-v1.22.3 / commit-id: c92036 Depl…
概述ControllerController 的初始化Controller 的启动processLoopHandleDeltas()SharedIndexInformersharedIndexerInformersharedProcessorprocessorListenersharedProcessor.addListener()sharedProcessor.distribute()sharedProcessor.run()sharedIndexInformer.Run()SharedInf…
概述Queue接口和结构体setAdd()Get()Done()DelayingQueue接口和结构体waitForNewDelayingQueuewaitingLoop()AddAfter()RateLimitingQueue接口和结构体RateLimiterBucketRateLimiterItemExponentialFailureRateLimiterItemFastSlowRateLimiterMaxOfRateLimiterWithMaxWaitRateLimiter限速队列的实现…