观察者模式,也叫事件订阅,监听者,Listener,Observer。观察者模式是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。 k8s中的观察者模式Kubernetes中观察者模式主要是通过watch机制实现的。watch机制是一种持续性的H ...
k8s源码设计模式之Adapter
什么是AdapterAdapter也就是适配器模式 适配器模式是一种结构型设计模式,它将一个接口转换成另一个客户端所期望的接口,从而使得原本不兼容的接口能够协同工作。适配器模式常常用于将一个旧接口适配成新接口,或将一个外部库的接口适配成当前应用程序所需的接口 适配器模式由三个主要角色组成:客户端、适 ...
k8s源码设计模式之Chan of Responsibility
Chan of Responsibility我们常说的责任链模式k8s中的实现kube-apiserver中的admission控制器通过责任链模式实现。每个admission控制器都实现了一个AdmissionHandler接口,该接口包含一个名为Admit的方法,用于验证请求是否符合规则。多个a ...
k8s源码设计模式之Visitor
Visitor模式也叫访问模式 // vendor/k8s.io/cli-runtime/pkg/resource/interfaces.gotype Visitor interface { Visit(VisitorFunc) error}type VisitorFunc fu ...
k8s源码设计模式之Strategy
Strategy也就是策略模式 k8s中策略模式的实现k8s中为不同的资源对象实现了不同的策略。 // vendor/k8s.io/apiserver/pkg/registry/generic/registry/store.go// Store实现了k8s.io/apiserver/pkg/reg ...
k8s源码设计模式之Factory
工厂方法是一种创建型设计模式,详情可参考工厂方法如何创建一个informer // 创建对应资源的informerfactory := informers.NewSharedInformerFactory(clientset, time.Minute)informer := factory.Co ...
k8s源码设计模式之Builder
Builder模式也叫生成器模式,也叫建造者模式关于生成器模式详情可查看文章 记录下k8s源码中使用到的Builder模式。// staging/src/k8s.io/client-go/rest/request.go// Request 构建一个请求发送给kube-apiserver.// 其中有 ...
golang http.Get详解
从一道题目开始, 如果你对这些输出不是很理解。接下我们将一步一步debug源码彻底搞懂这些问题。func main() { for i := 0; i < 3; i++ { resp,_:=http.Get("https://www.baidu.com") _, _ ...
不同的进程可以同时绑定同一个端口吗
不同的进程可以同时绑定同一个端口吗?当听到这个问题的时候,你的第一反应是不是肯定不行啊(如果你在工作中遇到过address already in use的情况)。大家都知道tcp通过四元组来确定一个唯一的连接,所以说理论上说不同的进程应该不能使用同一个端口。 其实在Linux3.9内核中引入了一个s ...
k8s/kubeflow排障
记录一下部署kubeflow过程中遇到的问题。 部署ingress-nginx失败记录kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static ...
jupyterhub启动容器失败
在使用jupyterhub时候往启动的容器里挂载了一个文件很多的目录,导致容器启动报错如下。配置如下:singleuser: defaultUrl: "/lab" extraEnv: JUPYTERHUB_SINGLEUSER_APP: "jupyter_se ...
golang-struct-option-value
在Golang中初始化struct之后如何优雅的设置一些字段的值.现在来学习下k8s源码中是如何做的 package mainimport "fmt"type Config struct { a int b int res resource}type resource struc ...
k8s informer
今天通过一张图和一段代码来完全掌握k8s中的informer机制。 图片来源 Reflector: 用于监听指定k8s资源的变化,并将事件推送到DeltaFIFO中.监听的对象需要实现ListAndWatch方法.监听的对象可以是k8s中的内置资源也可以自定义资源DeltaFIFO: 一个存储资源对 ...
k8s-workqueue
workqueue提供了如下特性- 公平: 队列中的元素以先进先出的方式进行处理- Stingy(翻译为:吝啬的): 在高并发情况下和一元素在处理之前添加了多次的情况下,队列中的元素只会被处理一次- 并发性:多消费者和生产者.支持元素被正在处理的情况下重新入队- 通知机制:ShutDown方法通过信 ...
k8s set类型实现
Golang是没有像python一样本身实现set类型,如果在开发过程中需要使用set类型的话则需要自己实现。今天我们来学习一下k8s源码中的int类型的set实现。代码位于https://github.com/kubernetes/kubernetes/tree/master/staging/sr ...
k8s Indexer索引器实现
1.Indexer是什么?Indexer是client-go用来存储资源对象并自带索引功能的本地存储(内存),Reflector从DeltaFIFO中将消费出来的资源对象存储到Indexer。Indexer中的数据与Etcd集群中的数据保持完全一致。client-go可以很方便的从本地存储(内存)读 ...
docker配置代理
在k8s编译中需要到很多k8s.gcr.io中的镜像,查了很多资料都没有很好的解决办法。原因是国内同步的镜像都是很久之前的,没有我需要的镜像,所以只能通过代理来解决 1.首先你需要一个科学上网的工具,这一步不多说,自行查找资料。2.尝试执行如下命令,发现并没有用,原因在于docker并没有使用系统的 ...
Go defer陷阱[译]
对等于nil的函数defer操作如果通过defer调用一个值等于nil的函数,会引发panic错误。func main() { var run func() = nil defer run() fmt.Println("runs")} 输出:runspanic: runtime ...