hysyeah

知易行难


  • 首页

  • 分类

  • 标签

  • 归档

  • 关于

  • 搜索

k8s源码设计模式之Template Method

发表于 2023-04-10

模板方法是一种行为设计模式,用于定义一个操作的算法骨架,而将一些步骤的实现推迟到子类中。它可以使子类在不改变算法结构的情况下重定义算法中的某些步骤。 k8s源码中client-go中模版方法 // staging/src/k8s.io/client-go/rest/client.gotype Int ...

阅读全文 »

k8s源码设计模式之Observer

发表于 2023-04-10

观察者模式,也叫事件订阅,监听者,Listener,Observer。观察者模式是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。 k8s中的观察者模式Kubernetes中观察者模式主要是通过watch机制实现的。watch机制是一种持续性的H ...

阅读全文 »

k8s源码设计模式之Adapter

发表于 2023-04-10

什么是AdapterAdapter也就是适配器模式 适配器模式是一种结构型设计模式,它将一个接口转换成另一个客户端所期望的接口,从而使得原本不兼容的接口能够协同工作。适配器模式常常用于将一个旧接口适配成新接口,或将一个外部库的接口适配成当前应用程序所需的接口 适配器模式由三个主要角色组成:客户端、适 ...

阅读全文 »

k8s源码设计模式之Chan of Responsibility

发表于 2023-04-09

Chan of Responsibility我们常说的责任链模式k8s中的实现kube-apiserver中的admission控制器通过责任链模式实现。每个admission控制器都实现了一个AdmissionHandler接口,该接口包含一个名为Admit的方法,用于验证请求是否符合规则。多个a ...

阅读全文 »

k8s源码设计模式之Visitor

发表于 2023-04-07

Visitor模式也叫访问模式 // vendor/k8s.io/cli-runtime/pkg/resource/interfaces.gotype Visitor interface { Visit(VisitorFunc) error}type VisitorFunc fu ...

阅读全文 »

k8s源码设计模式之Strategy

发表于 2023-04-07

Strategy也就是策略模式 k8s中策略模式的实现k8s中为不同的资源对象实现了不同的策略。 // vendor/k8s.io/apiserver/pkg/registry/generic/registry/store.go// Store实现了k8s.io/apiserver/pkg/reg ...

阅读全文 »

k8s源码设计模式之Factory

发表于 2023-04-06

工厂方法是一种创建型设计模式,详情可参考工厂方法如何创建一个informer // 创建对应资源的informerfactory := informers.NewSharedInformerFactory(clientset, time.Minute)informer := factory.Co ...

阅读全文 »

k8s源码设计模式之Builder

发表于 2023-04-06

Builder模式也叫生成器模式,也叫建造者模式关于生成器模式详情可查看文章 记录下k8s源码中使用到的Builder模式。// staging/src/k8s.io/client-go/rest/request.go// Request 构建一个请求发送给kube-apiserver.// 其中有 ...

阅读全文 »

golang http.Get详解

发表于 2023-03-13

从一道题目开始, 如果你对这些输出不是很理解。接下我们将一步一步debug源码彻底搞懂这些问题。func main() { for i := 0; i < 3; i++ { resp,_:=http.Get("https://www.baidu.com") _, _ ...

阅读全文 »

不同的进程可以同时绑定同一个端口吗

发表于 2023-03-01

不同的进程可以同时绑定同一个端口吗?当听到这个问题的时候,你的第一反应是不是肯定不行啊(如果你在工作中遇到过address already in use的情况)。大家都知道tcp通过四元组来确定一个唯一的连接,所以说理论上说不同的进程应该不能使用同一个端口。 其实在Linux3.9内核中引入了一个s ...

阅读全文 »

rsync的使用

发表于 2022-04-05

在进行大文件/多文件拷贝的时候如果使用cp命令的话会看不到进度,可以使用rsync,可以显示过程进度。rsync -av --times --stats --checksum --human-readable --itemize-changes --progress --out-format=&q ...

阅读全文 »

k8s/kubeflow排障

发表于 2022-04-05

记录一下部署kubeflow过程中遇到的问题。 部署ingress-nginx失败记录kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static ...

阅读全文 »

jupyterhub启动容器失败

发表于 2021-12-26

在使用jupyterhub时候往启动的容器里挂载了一个文件很多的目录,导致容器启动报错如下。配置如下:singleuser: defaultUrl: "/lab" extraEnv: JUPYTERHUB_SINGLEUSER_APP: "jupyter_se ...

阅读全文 »

golang-struct-option-value

发表于 2021-07-30

在Golang中初始化struct之后如何优雅的设置一些字段的值.现在来学习下k8s源码中是如何做的 package mainimport "fmt"type Config struct { a int b int res resource}type resource struc ...

阅读全文 »

k8s informer

发表于 2021-07-25

今天通过一张图和一段代码来完全掌握k8s中的informer机制。 图片来源 Reflector: 用于监听指定k8s资源的变化,并将事件推送到DeltaFIFO中.监听的对象需要实现ListAndWatch方法.监听的对象可以是k8s中的内置资源也可以自定义资源DeltaFIFO: 一个存储资源对 ...

阅读全文 »

k8s-workqueue

发表于 2021-07-25

workqueue提供了如下特性- 公平: 队列中的元素以先进先出的方式进行处理- Stingy(翻译为:吝啬的): 在高并发情况下和一元素在处理之前添加了多次的情况下,队列中的元素只会被处理一次- 并发性:多消费者和生产者.支持元素被正在处理的情况下重新入队- 通知机制:ShutDown方法通过信 ...

阅读全文 »

k8s set类型实现

发表于 2021-07-14

Golang是没有像python一样本身实现set类型,如果在开发过程中需要使用set类型的话则需要自己实现。今天我们来学习一下k8s源码中的int类型的set实现。代码位于https://github.com/kubernetes/kubernetes/tree/master/staging/sr ...

阅读全文 »

k8s Indexer索引器实现

发表于 2021-07-11

1.Indexer是什么?Indexer是client-go用来存储资源对象并自带索引功能的本地存储(内存),Reflector从DeltaFIFO中将消费出来的资源对象存储到Indexer。Indexer中的数据与Etcd集群中的数据保持完全一致。client-go可以很方便的从本地存储(内存)读 ...

阅读全文 »

docker配置代理

发表于 2021-06-09

在k8s编译中需要到很多k8s.gcr.io中的镜像,查了很多资料都没有很好的解决办法。原因是国内同步的镜像都是很久之前的,没有我需要的镜像,所以只能通过代理来解决 1.首先你需要一个科学上网的工具,这一步不多说,自行查找资料。2.尝试执行如下命令,发现并没有用,原因在于docker并没有使用系统的 ...

阅读全文 »

k8s-crd

发表于 2021-05-15

CRD是k8s提供对现有资源进行扩展的一种方式,当现有k8s资源都无法满足你的需求时就可以考虑使用CRD对现有资源进行扩展。 环境信息:golang 1.16.2,kubernetes v1.19.0 如何自定义一个k8s CRD(Custom Resource Definition) 1.新建一个 ...

阅读全文 »
1…345…17

hys

329 日志
30 分类
35 标签
hysyeah.top © 2019-2025 粤ICP备19077752号