随笔分类 - Kubernetes编程专题精讲
摘要:如何操作自定义资源 client-go 为每种 kubernetes 内置资源提供对应的 clientset 和 informer。 那如果我们要监听和操作自定义资源对象,应该如何做呢? 这里我们有两种方式: 使用 client-go 提供的 dynamicClient 来操作自定义操作资源对象,当
阅读全文
摘要:编写 Operator 的方案 —— 2、基于 sample-controller https://github.com/kubernetes/sample-controller 首先我们将基于 k8s.io/sample-controller 来实现 cnat,通过直接使用 client-go 完
阅读全文
摘要:编写 Operator 的方案 —— 1、准备工作 1、安装好并完成正确配置的Go 1.12或以上版本:Go是Golang的开发工具包,需要安装并配置正确的环境变量,以便在命令行中编译、构建和运行Go程序。确保已从官方网站或中文社区网站下载并安装了适合自己操作系统的Go版本,并将相关的bin目录添加
阅读全文
摘要:Operator SDK 和 Kubebuilder 的 controller-runtime 客户端 这种客户端是单一实例,可以用于处理任何在指定 Scheme 中注册的 kind。 它使用 API 服务器提供的服务发现信息来把不同的 kind 映射到不同的 HTTP 路径上。我们后面还会进一步了
阅读全文
摘要:开发者眼中的自定义资源 在 Golang 中可以使用多种客户端来访问自定义资源。 一、使用 client-go 动态客户端 k8s.io/client-go/dynamic 提供的动态客户端的设计使其对 GVK(Group, Version, Kind)完全无感知,它只依赖于 Unstructure
阅读全文
摘要:自定义资源合法性验证 在创建和更新 CR 时,会由 API 服务器进行合法性验证,该验证基于 CRD 定义中的 validation 字段所指定的 OpenAPI v3 Schema 进行。 当一个请求要创建或修改 CR 时,会基于这个资源定义对 JSON 格式的对象进行合法性验证,如果有问题,会给
阅读全文
摘要:使用自定义资源 —— 类型定义 CRD 也是 Kubernetes 中的一种资源,从属于 apiextension.k8s.io/v1beta1 API 组,由 Kubernetes API 服务器进程中的 apiextensions-apiserver 提供服务。 一、创建 CustomResou
阅读全文
摘要:使用自定义资源 —— 服务发现信息 我们看看 kubectl 使用 API 服务器所提供的服务发现信息来找到新的资源。让我们一起来深入理解一下这个发现机制。 为 kubectl 启用更高级别的日志,我们便能从日志中了解到 kubectl 是如何发现这种新的资源类型的: [root@JumperSer
阅读全文
摘要:介绍自定义资源(Custom Resource,CR) 自定义资源(Custom Resource,CR),它是整个 Kubernetes 生态系统中最核心的扩展机制。 定义资源可以用作系统内部使用的对象,仅仅对它进行声明式定义,而不关联控制器逻辑,用不保存少量配置信息。但是自定义资源也可以成为很多
阅读全文
摘要:Golang 类型转换为 GVK、GVR 和 HTTP 路径,API Machinery概览
阅读全文
摘要:深入 API Machinery —— Scheme https://github.com/kubernetes/apimachinery/tree/release-1.27/pkg/runtime 1、scheme 我理解意思是说: Scheme 是 Kubernetes client-go 库中
阅读全文
摘要:深入 API Machinery —— REST 映射 https://github.com/kubernetes/client-go/blob/release-1.27/restmapper/ GVK 与 GVR 之间的映射关系被称为 REST 映射。 我理解意思是说: 在 Kubernetes
阅读全文
摘要:深入 API Machinery —— Resource Resource 有分组和版本号,所以也有对应的 GroupVersionResource 概念,简写为 GVR。 每种 GVR 对应一个 HTTP(基础)路径。GVR 用于表示 Kubernetes API 的 REST 端点。比如 app
阅读全文
摘要:深入 API Machinery —— Kind 1、API Machinery 中 Kind 我理解意思是说: 在Kubernetes中,API Machinery 是一个核心的软件库,用于构建 Kubernetes 的 API 服务器和控制器。它提供了一些基本的功能,如对象存储、认证鉴权、API
阅读全文
摘要:工作队列(workqueue[wɜːk][kjuː]) https://github.com/kubernetes/kubernetes/tree/release-1.27/staging/src/k8s.io/client-go/util/workqueue 我理解意思是说: 这里说的 "工作队列
阅读全文
摘要:Informer[ɪnˈfɔrmɚ] 和缓存 https://github.com/kubernetes/kubernetes/tree/release-1.27/staging/src/k8s.io/client-go/informers k8s 客户端接口中包含一个名叫 Watch 的动作,它提
阅读全文
摘要:Watch https://github.com/kubernetes/apimachinery/blob/release-1.27/pkg/watch/watch.go 我理解意思是说:k8s.io/apimachinery/pkg/watch/watch.go 文件是 Kubernetes 中用
阅读全文
摘要:ObjectMeta https://github.com/kubernetes/apimachinery/blob/release-1.27/pkg/apis/meta/v1/types.go 我理解意思是说:在 Kubernetes 中,ObjectMeta 是一个结构体,用于表示资源对象的元数
阅读全文
摘要:TypeMeta https://github.com/kubernetes/apimachinery/blob/release-1.27/pkg/runtime/types.go 我理解意思是说: TypeMeta 是所有顶级对象共享的类型。你可以通过嵌入 runtime.TypeMeta 的方式
阅读全文
摘要:Go语言中的 Kubernetes 对象介绍 我们接下来更详细了解在 Go 语言的语境下的 Pod(或者其他任何 Kubernetes 资源)是什么样的? Kubernetes 中的资源(或者更准确说是对象)都是某种类型的实例。 我理解意思是说: 在Kubernetes中,资源或对象是指由 Kube
阅读全文