随笔分类 - Kubernetes源码
摘要:1、概述 GoRoutineMap 定义了一种类型,可以运行具有名称的 goroutine 并跟踪它们的状态。它防止创建具有相同名称的多个goroutine,并且在上一个具有该名称的 goroutine 完成后的一段退避时间内可能阻止重新创建 goroutine。 使用GoRoutineMap场景:
阅读全文
摘要:1、概述 Kubernetes的CSI Plugin注册机制的实现分为两个部分,第一部分是 sidecar "node-driver-registrar",第二部分是Kubelet的pluginManager,第一部分详细内容请参见《Kubernetes CSI插件注册(一)—— node-driv
阅读全文
摘要:1、概述 node-driver-registrar是一个由官方K8s sig小组维护的辅助容器(sidecar),它的主要作用则是获取CSI插件信息并通过GRPC服务(即RegistrationServer)向Kubelet提供插件的注册信息。Kubelet基于node-driver-regist
阅读全文
摘要:1、概述 在 kubernetes API中,我们经常使用属于 GVK 或者 GVR 来区分特定的 kubernetes 资源。其中 GVK 是 Group Version Kind 的简称,而 GVR 则是 Group Version Resource 的简称。 Kind 是 API “顶级”资源
阅读全文
摘要:1、概述 在使用controller-runtime框架进行kubernetes二次开发的时候,程序中通常都会使用GetConfigOrDie()方法获取集群配置以便与kubernetes集群进行连接,示例如下: opts := ctrl.Options{ Scheme: scheme, Metri
阅读全文
摘要:1、概述 Kubernetes 的各个组件都有一定的定时任务,比如任务的定时轮询、高可用的实现、日志处理、缓存使用等,Kubernetes 中的定时任务都是通过 wait 包实现的。 注意,本文源码基于Kubernetes 1.21.5。 2、Golang 的定时任务 在讲 Kubernetes 的
阅读全文
摘要:1、概述 Kubernetes的事件(Event)是一种资源对象(Resource Object),用于展示集群内发生的情况,Kubernetes系统中的各个组件会将运行时发生的各种事件上报给Kubernetes API Server。例如,调度器做了什么决定,某些Pod为什么被从节点中驱逐。由于K
阅读全文
摘要:1、概述 在Kubernetes中,为了实现组件高可用,同一个组件需要部署多个副本,例如多个apiserver、scheduler、controller-manager等,其中apiserver是无状态的,每个组件都可以工作,而scheduler与controller-manager是有状态的,同一
阅读全文
摘要:1、概述 在kubernetes上扩展资源类型的方式有三种,第一种是CRD,CRD是kubernetes内建的资源类型,该类型资源主要用来创建用户自定义资源类型的资源;即通过CRD资源,可以将用户自定义资源类型转换为kubernetes上资源类型;第二种是自定义apiserver;这种方式要比第一种
阅读全文
摘要:1、概述 应用为用户提供完整的业务功能,由一个或多个特定功能的组件组成。一般来说,根据一个应用的功能以及与外部环境通信的方式,它可以由一个或多个 Kubernetes 工作负载(例如部署、有状态副本集和守护进程集)、服务和CRD等资源类型组成。 Application资源类型是Kubernetes特
阅读全文
摘要:1、概述 绝大部分Kubernetes资源对象都包含status.conditions字段,用来表示资源状态,比如deployment资源中的status.conditions如下所示: conditions: - lastTransitionTime: "2021-12-27T01:50:58Z"
阅读全文
该文被密码保护。
摘要:一、队列介绍 client-go为什么要实现队列呢?在client-go中,队列有点类似于golang中的chan,主要用于开发并行程序间的数据同步。比如各种Controller通过client-go的informer监听对象变化,当有资源变化时通过回调函数将资源写入队列中,再由其他的协程完成处理。
阅读全文
摘要:前言 经常操作 Kubernetes 集群的同学肯定对 finalizers 字段不陌生,每当删除 namespace 或 pod 等一些 Kubernetes 资源时,有时资源状态会卡在 Terminating,很长时间无法删除,甚至有时增加 --force flag 之后还是无法正常删除。这时就
阅读全文
该文被密码保护。
摘要:SchemeBuilder 用于存放处理 Scheme 的函数 type SchemeBuilder []func(*Scheme) error NewSchemeBuilder 创建并初始化 SchemeBuilder func NewSchemeBuilder(funcs ...func(*Sc
阅读全文