摘要: 每日一问系列 ### 镜像的在节点上的存储结构是怎么样的? > 我们经常会使用 docker 或者其他 cri 工具拉取镜像来运行容器,却没有去实际了解 pull 下来的镜像在机器上是怎么存储的。以下以常用的 overlay2 存储驱动为例,解析镜像的存储结构,其他存储驱动也是类似 编写如下 Doc 阅读全文
posted @ 2023-07-10 19:35 JL_Zhou 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 锁的获取和释放模式 先理解两种不同的锁的获取和释放模式"Barging" 和 "Handoff",它们影响着等待锁的 goroutines 的行为。 Barging(插队) 在 Barging 模式下,当一个锁被释放时,任何尝试获取该锁的 goroutine 都有机会立即抢占("插队")并尝试获取锁 阅读全文
posted @ 2024-04-15 16:01 JL_Zhou 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 一个 Kubernetes 控制器是一个主动的协调过程,它会监视某个对象的期望 desired 状态,并且还会监视实际 current 状态,然后不断的尝试使当前的实际状态更接近期望的状态。最简单的实现方式是一个循环: for { desired := getDesiredState() curre 阅读全文
posted @ 2024-02-28 11:56 JL_Zhou 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 每日一问系列 ### 为什么 kubelet 不使用容器化部署? > 通过脚本(shell/ansible 等)在节点上部署 kubelet 服务时,涉及 kubelet 进程 service 启动配置、证书等,为什么不使用容器化部署 kubelet 呢?直接 docker run ... 一键部署 阅读全文
posted @ 2023-07-12 11:58 JL_Zhou 阅读(344) 评论(2) 推荐(0) 编辑
摘要: GO 语言中 chan 的理解 ### chan 的底层实现是怎么样的? > chan 是 Go 语言中的一个关键字,用于实现并发通信。chan 可以用于在不同的 goroutine 之间传递数据,实现数据的同步和异步传输。 在底层实现上,chan 是通过一个结构体来表示的,这个结构体包含了一个指向 阅读全文
posted @ 2023-07-03 19:17 JL_Zhou 阅读(382) 评论(0) 推荐(0) 编辑
摘要: GO 语言中 slice 理解 ### 为什么说 Go 语言的 slice 是引用类型,其底层实现明明是一个结构体? > slice 的底层实现是一个包含三个字段的结构体:指向底层数组的指针、slice 的长度和 slice 的容量。当我们对 slice 进行操作时,例如添加或删除元素,实际上是在底 阅读全文
posted @ 2023-06-25 10:07 JL_Zhou 阅读(42) 评论(0) 推荐(0) 编辑
摘要: GO 语言 map 的理解 ### map 的底层实现原理是怎么样的? > map 的底层实现是一个哈希表的桶数组,每个桶都是一个链表,用于存储哈希值相同的键值对。当我们需要查找一个键时,首先计算出其哈希值,然后找到对应的桶,遍历链表查找对应的键值对。 但是,如果桶中的链表过长,遍历链表的时间复杂度 阅读全文
posted @ 2023-06-21 15:53 JL_Zhou 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 说明 一个典型的 kubeconfig 文件如下: apiVersion: v1 clusters: - cluster: certificate-authority-data: {BASE64 STRING} server: https://172.16.16.15:6443 name: kube 阅读全文
posted @ 2023-04-11 17:23 JL_Zhou 阅读(692) 评论(0) 推荐(0) 编辑
摘要: package dag import ( "errors" "fmt" "strings" "github.com/tektoncd/pipeline/pkg/list" "k8s.io/apimachinery/pkg/util/sets" ) // Task is an interface fo 阅读全文
posted @ 2022-01-05 09:54 JL_Zhou 阅读(132) 评论(0) 推荐(0) 编辑
摘要: Tcp链接关闭 在linux中,一切皆文件,本身socket就是一种文件类型,内核会为每一个打开的文件创建file结构并维护指向改结构的引用计数,每一个进程结构中都会维护本进程打开的文件数组,数组下标就是fd,内容就指向上面的file结构,close本身就可以用来操作所有的文件,做的事就是,删除本进 阅读全文
posted @ 2021-11-10 15:01 JL_Zhou 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 画了一个图来描述一个问题:某个deployment一直都是通过模板生成yaml并通过kubectl apply到集群,如果现在直接在集群上通过通过kubectl edit增加一段apply的模板中没有的配置项,下次通过模板继续apply更新,kubectl edit增加的部分会被置空吗? 答案是并不 阅读全文
posted @ 2021-08-13 21:09 JL_Zhou 阅读(1057) 评论(0) 推荐(0) 编辑
摘要: patch容易出现字段冲突 近期在使用client-go对某个k8s原生资源进行patch操作时,出现了字段冲突导致的patch失败问题,具体是patch尝试修改资源的某个字段的类型,比如将readiness probe的类型从tcp修改为httpGet,patch时希望修改probe类型但被认为是 阅读全文
posted @ 2021-08-01 13:58 JL_Zhou 阅读(998) 评论(0) 推荐(0) 编辑
摘要: 以控制器的视角看pod的删除过程 控制器收到的事件 client-go中的informer通过reflector watch到的事件对象,类型可以是:Add、Modify、Delete,分别代表对象的增加、更新和删除事件 以删除pod为例,当用户尝试删除一个pod时,外部控制器将能够获取到该pod的 阅读全文
posted @ 2021-08-01 09:54 JL_Zhou 阅读(746) 评论(0) 推荐(0) 编辑
摘要: client-go中什么时候会发生re-list 我们知道client-go中的reflector模块首先会list apiserver获取某个资源的全量信息,然后根据list到的rv来watch资源的增量信息。我们希望使用client-go编写的控制器组件在与apiserver发生连接异常时,尽量 阅读全文
posted @ 2021-08-01 09:53 JL_Zhou 阅读(618) 评论(0) 推荐(0) 编辑
摘要: 集群信息 calico配置 apiVersion: crd.projectcalico.org/v1 kind: IPPool metadata: name: default-ipv4-ippool spec: blockSize: 26 cidr: 10.10.0.0/16 ipipMode: A 阅读全文
posted @ 2021-06-20 20:45 JL_Zhou 阅读(1596) 评论(0) 推荐(1) 编辑