基于 client-go 实现 ServiceAccount 创建并实现 rolebind 前言: 在公司中由于采用的并非原生后台操作 K8S ,而是通过使用开源的 PAAS 平台向用户提供使用,但是有些业务部门需要通过 ServiceAccout(下面统称为 SA) 创建之后生成的 Secret 中的 ca.crt 以及 token 来实现对自身…
接口与反射 go 中不需要声明 接口 与相关赋值接口和结构体的关系 只要调用了对应的接口里面所有的方法,我们就认为实现了接口 面向对象: 封装:将属性隐藏(结构体属性),提供相关接口供调用者访问和修改,调用的人不用关心我内部实现。 比如User{} 结构体里面,我们在设置 age 的时候,不可能说超过 200 岁,所以这个时候我们就要给他加一个 S…
实现自动创建容器及外部执行容器命令工具 1 工具设计概念 需求: 由于公司专门为其他业务部门提供了 paas 平台操作,但是有的业务部门的同事不太习惯使用 web 页面,所以我们不得不为他们提供后台的 kubectl 终端对他们的业务 NS 进行管理。 而领导的解决方式是通过在 K8S 上通过 UA 生成单独的用户来实现对业务的 NS 进行管理,并…
本文主要对 Informer 中的 Reflector 组件进行分析说明。 前面我们说了 Informer 通过对 APIServer 的资源对象执行 List 和 Watch 操作,把获取到的数据存储在本地的缓存中,其中实现这个的核心功能就是 Reflector,我们可以称其为反射器,从名字我们可以看出来它的主要功能就是反射,就是将 Etcd 里…
上图是整个 client-go 的完整架构图,或者说是我们要去实现一个自定义的控制器的一个整体流程,其中黄色图标是开发者需要自行开发的部分,而其它的部分是 client-go 已经提供的,直接使用即可。 由于 client-go 实现非常复杂,我们这里先对上图中最核心的部分 Informer 进行说明。在 Informer 的架构中包含如下几个核心…
5 Informer 使用 前面我们在使用 Clientset 的时候了解到我们可以使用 Clientset 来获取所有的原生资源对象,那么如果我们想要去一直获取集群的资源对象数据呢?岂不是需要用一个轮询去不断执行 List() 操作?这显然是不合理的,实际上除了常用的 CRUD 操作之外,我们还可以进行 Watch 操作,可以监听资源对象的增、删…
3 ClientSet 使用 3.1 介绍 Clientset 是调用 Kubernetes 资源对象最常用的客户端,可以操作所有的资源对象。 前面我们说了在 staging/src/k8s.io/api 下面定义了各种类型资源的规范,然后将这些规范注册到了全局的 Scheme 中,这样就可以在 Clientset 中使用这些资源了。那么我们应该如…
2 资源类型 Scheme 本节主要讲解 Kubernetes 核心的资源类型 Scheme 的定义和用途。 现在我们知道我们的 yaml 文件是通过 api 的一个转换来发起一个网络请求,那么整个的资源类型他是怎么样在 K8S 当中来定义的呢? 就是平时我们在 yaml 中写的一个 deployment 的资源类型为什么 K8S 能够识别?这些资…
1 环境准备 1 源码下载 直接 Clone 官方 Kubernetes 源码即可获得代码: $ git clone https://github.com/kubernetes/kubernetes.git 但是由于 Kubernetes 源码非常大,而且我们访问 GitHub 又比较慢,为解决这个问题我们可以使用加速器进行 Clone,只需要将 …
[TOC] KUBERNETES API 接口模型 1 介绍 Kubernetes 中最核心的就是 kube-apiserver 组件,其他组件都是和 kube-apiserver 进行通信的,本节主要就来研究下 Kubernetes API 接口的模型。 2 API 对象 在 Kubernetes 集群中,Kubernetes 对象是我们持久化的…