首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏希里安

    client-go源码初探

    Kubernetes 官方的 Go 客户端,client-go 是 Kubernetes 非常重要的一部分。 下面是对 client-go 源码的简要分析。 基本组件 client-go 的基本组件包括: RESTClient:REST API的 HTTP 客户端,用于与 Kubernetes API Server 交互。 资源操作 client-go 支持对Kubernetes API 中的各种资源进行操作,如 Pod、Service、Deployment 等。 client-go 中的 Informer 就是基于 watch 机制实现的资源事件监听器,它可以监听指定的 Kubernetes 资源并在资源发生变化时通知订阅者。

    49120编辑于 2023-10-30
  • 来自专栏charlieroro

    kubernetes client-go解析

    注:本次使用的client-go版本为:client-go 11.0,主要参考CSDN上的深入浅出kubernetes之client-go系列,建议看本文前先参考该文档。 本文中的visio图可以从这里获取 下图为来自官方的Client-go架构图 ? 图1. 下图也可以作为参考 ? 图2. Indexer Indexer保存了来自apiServer的资源。 client-go的indexer实际操作的还是threadSafeMap中的方法和数据,调用关系如下: ? 可以通过下图理解threadSafeMap中各种索引之间的关系 ? factory.go 下面以(Core,v1,podInformer)为例结合client-go中提供的代码进行讲解。 = a { t.Errorf("expected %v, got %v", e, a) } } PS:后续会使用client-go编写简单程序 TIPS: 使用Client-go

    1.5K20发布于 2020-03-24
  • 来自专栏跟我一起学 K8s

    client-go】源码分析目录

    client-go】专题主要是分析 client-go 的源码client-go 代码地址:https://github.com/kubernetes/client-go├── applyconfigurations

    34720编辑于 2022-08-06
  • 来自专栏实战docker

    client-go实战之二:RESTClient

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 系列文章链接 client-go实战之一:准备工作 client-go实战之二:RESTClient client-go实战之三:Clientset client-go实战之四:dynamicClient client-go实战之五:DiscoveryClient 本篇概览 本文是《client-go实战》系列的第二篇,前文咱们提到过client-go一共有四种客户端:RESTClient、ClientSet、DynamicClient、DiscoveryClient RESTClient,熟悉最基础的远程操作步骤; 本篇由以下几部分组成: 简介RESTClient 每次编码前的准备工作 正式编码 验证 关键源码分析 RESTClient简介 RESTClient是client-go /kubernetes/scheme" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util

    1.1K10编辑于 2022-05-06
  • 来自专栏yuyy.info技术专栏

    Kubernetes的client-go

    前言 client-go是一个调用kubernetes集群资源对象API的客户端,即通过client-go实现对kubernetes集群中资源对象增删改查等操作。 大部分对kubernetes进行前置API封装的二次开发都通过client-go这个第三方包来实现。 K8s二开之 client-go 初探

    89020编辑于 2022-09-21
  • 来自专栏k8s技术圈

    client-go 之 Indexer 的理解

    从 Indexer 接口的定义可以证明这一点: // k8s.io/client-go/tools/cache/indexer.go // Indexer 使用多个索引扩展了 Store,并限制了每个累加器只能容纳当前对象 // k8s.io/client-go/tools/cache/indexer.go // 用于计算一个对象的索引键集合 type IndexFunc func(obj interface{}) ([ /tools/cache/store.go 中: // [k8s.io/client-go/tools/cache/store.go](http://k8s.io/client-go/tools/cache 然后接下来就是一个比较重要的 ByIndex 函数的实现: // k8s.io/client-go/tools/cache/thread_safe_store.go // 和上面的 Index 函数类似 然后是其他几个索引相关的函数: // k8s.io/client-go/tools/cache/thread_safe_store.go // IndexKeys 和上面的 ByIndex 几乎是一样的

    2.9K30发布于 2020-09-04
  • 来自专栏后端云

    client-go 源码分析(6) - DeltaFIFO

    DeltaFIFO也包含在 Informer 中。DeltaFIFO 是 Delta + FIFO(先进先出队列),Delta的数据格式如下。DeltaType是String的类型,只有四种,分别是增加,更新,删除,同步。作为FIFO,有push和pop方法。

    51630编辑于 2023-02-10
  • 来自专栏运维专栏

    client-go连接kubernetes集群

    ......算是练手入门 关于client-go 参照githubhttps://github.com/kubernetes/client-go。 创建项目k8s-demo1 go get安装依赖 [image.png] 创建好目录结构如下: [image.png] 接下来应该是安装client-go的依赖了,参照client-go官方文档:https client-go实战之三:Clientset client-go实战之四:dynamicClient client-go实战之五:DiscoveryClient 我这里就使用Clientset了! /kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" ) 按照提示按照了一下 go get k8s.io/client-go/kubernetes@v0.23.6 go get k8s.io/client-go/tools/clientcmd@v0.23.6

    2.8K51编辑于 2022-05-01
  • 来自专栏后端系统和架构

    Kubernetes client-go实战应用

    Kubernetes client-go实战应用 github上client-go官方项目工程 实战应用 sample-controller示例 官方的一个简单的Controller示例,可以处理任何CRD 采用code-generator 的方式 kubernetes-crd-example 一个简单的处理任何CRD资源的示例 client-go手动操作CRD 以前创建和管理CRD的client库位于:https 现在就要用到client-go/rest这个RESTClient去实现了。 中必然会有大量的client-go的引用和使用,通过源码可以发现确实如此并且都是采用RESTClient,clientset是包含RESTClient的。 这样的话,我们自己要通过client-go去实现后端服务,去开发的话,就可以参考istio源码中的一些定义和基本方法,然后结合client-go的一般性处理去实现后端服务程序。

    1.9K30发布于 2019-12-12
  • 来自专栏后端系统和架构

    Kubernetes的client-go库介绍

    Kubernetes的client-go库介绍 client-go的作用 github上client-go官方项目工程 基本介绍 Kubernetes官方从2016年8月份开始,将Kubernetes资源操作相关的核心源码抽取出来 ,独立出来一个项目Client-go,作为官方提供的Go client。 client-go是一个调用kubernetes集群资源对象API的客户端,即通过client-go实现对kubernetes集群中资源对象(包括deployment、service、ingress、replicaSet 中的设计思想 client-go 和 controller的架构设计 github上关于client-go的设计有一副概览图如下: ? client-go Kubernetes Informer 详解 如何用 client-go 拓展 Kubernetes 的 API Using Kubernetes API from Go

    4.6K31发布于 2019-12-12
  • 来自专栏k8s技术圈

    client-go 之 DeltaFIFO 实现原理

    Delta 在了解 DeltaFIFO 之前我们需要先具体了解下什么是 Delta,我们先来看看 client-go 中是如何定义的,Delta 的数据结构定义位于staging/src/k8s.io/ client-go/tools/cache/delta_fifo.go文件中。 // k8s.io/client-go/tools/cache/delta_fifo.go // DeltaType 是变化的类型(添加、删除等) type DeltaType string // /tools/cache/store.go 中: // k8s.io/client-go/tools/cache/store.go // Store 是一个通用的对象存储和处理的接口。 DeltaFIFO 的数据结构定义位于 staging/src/k8s.io/client-go/tools/cache/delta_fifo.go 文件中: // k8s.io/client-go/tools

    3.1K40发布于 2020-09-04
  • 来自专栏k8s技术圈

    client-go 之 Reflector 源码分析

    Reflector 结构体的定义位于 staging/src/k8s.io/client-go/tools/cache/reflector.go 下面: // k8s.io/client-go/tools // k8s.io/client-go/tools/cache/listwatch.go // Lister 是知道如何执行初始化List列表的对象 type Lister interface { type ListerWatcher interface { Lister Watcher } 而 Reflector 对象通过 Run 函数来启动监控并处理监控事件的: // k8s.io/client-go 可以使本地缓存中的数据与Etcd集群中的数据保持一致,该函数实现如下所示: // k8s.io/client-go/tools/cache/reflector.go // relistResourceVersion // k8s.io/client-go/tools/cache/reflector.go // watchHandler 监听 w 保持资源版本最新 func (r *Reflector) watchHandler

    1.8K31发布于 2020-08-28
  • 来自专栏实战docker

    client-go实战之五:DiscoveryClient

    关于DiscoveryClient 本文是《client-go实战》系列的第五篇,主角是最后一种客户端:DiscoveryClient,咱们之前学习的Clientset和dynamicClient都是面向资源对象的 编码 新建文件夹discoveryclientdemo,在里面执行以下命令,新建module: go mod init discoveryclientdemo 添加k8s.io/api和k8s.io/client-go 这才是每个资源的信息: package main import ( "flag" "fmt" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go /discovery" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" ) /discovery/cached/disk/cached_discovery.go ,这里就不展开了; 至此,client-go的四种客户端工具实战以及相关源码的浅层次分析就全部完成了,在您做client-go

    49960编辑于 2022-05-06
  • 来自专栏后端云

    client-go 源码分析(10) - 使用client-go实现一个简单controller的例子

    下面的example也是client-go官方的例子。通过这个简单的例子正好把之前的源码分析的一个个模块都串起来了。 apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go /kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util :\Users\hanwei\AppData\Local\Temp\GoLand\___go_build_k8s_io_client_go_examples_workqueue.exe k8s.io/client-go

    1K11编辑于 2023-02-10
  • 来自专栏实战docker

    client-go实战之四:dynamicClient

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 系列文章链接 client-go实战之一:准备工作 client-go实战之二:RESTClient client-go实战之三:Clientset client-go实战之四:dynamicClient client-go实战之五:DiscoveryClient 本篇概览 本文是《client-go实战》系列的第四篇,前文咱们学习了Clientset客户端,发现Clientset在deployment、service这些kubernetes内置资源的时候是很方便的 相信您会想到用interface{}来表示,实际上client-go也是这么做的,来看Unstructured数据结构的源码,路径是staging/src/k8s.io/apimachinery/pkg /dynamic" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" ) func

    76730编辑于 2022-05-06
  • 来自专栏实战docker

    client-go实战之三:Clientset

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 系列文章链接 client-go实战之一:准备工作 client-go实战之二:RESTClient client-go实战之三:Clientset client-go实战之四:dynamicClient client-go实战之五:DiscoveryClient 关于Clientset 本篇是《client-go实战》系列的第三篇,前文学习了最基础的客户端Restclient,尽管咱们实战的需求很简单(获取指定namespace下所有pod的信息),但还是写了不少代码 path、Group、Version、返回的数据结构、编解码工具等: 如果业务代码中,需要操作kubernetes资源的代码都写成上图的样子,相信您是难以忍受的,应该会做一些封装以简化代码,不过client-go /kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "k8s.io/utils/pointer

    67730编辑于 2022-05-06
  • 来自专栏运维专栏

    client-go连接kubernetes集群-create

    背景 client-go连接kubernetes集群-connect and list。都是查看获取list列表的。现在想用client-go创建应用该如何操作呢? client-go连接kubernetes集群-create 创建一个namespace: clientset.CoreV1().Namespaces().Create [image.png] package /kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" ) /kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" ) /kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" )

    1.6K61编辑于 2022-05-04
  • 来自专栏旅途散记

    听 GPT 讲 client-go 源代码 (8)

    File: client-go/applyconfigurations/core/v1/namespace.go 在K8s组织下的client-go项目中,client-go/applyconfigurations File: client-go/applyconfigurations/core/v1/nodeconfigstatus.go 在client-go项目中的文件client-go/applyconfigurations client-go 项目。 File: client-go/discovery/cached/disk/cached_discovery.go 在K8s组织下的client-go项目中,client-go/discovery/cached File: client-go/applyconfigurations/core/v1/nodeaffinity.go 在client-go项目中,client-go/applyconfigurations

    42310编辑于 2024-06-08
  • 来自专栏后端云

    client-go 源码分析(3) - rest模块

    client-go的客户端对象有4个,作用各有不同: RESTClient: 是对HTTP Request进行了封装,实现了RESTful风格的API。 context" "fmt" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go /kubernetes/scheme" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" ) func main() { // Steps may be: // 1. client-go (or kubectl) sends a GET request. // 2. Apiserver closes connection. // 4. client-go should catch this and return an error.

    77620编辑于 2023-02-10
  • 来自专栏实战docker

    client-go实战之一:准备工作

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 系列文章链接 client-go实战之一:准备工作 client-go实战之二:RESTClient client-go实战之三:Clientset client-go实战之四:dynamicClient client-go实战之五:DiscoveryClient 关于client-go client-go是kubernetes官方提供的go语言的客户端库,go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes 资源进行增删改查操作; 除了提供丰富的API用于操作kubernetes资源,client-go还为controller和operator提供了重要支持,如下图,client-go的informer机制可以将 关于《client-go实战》系列 《client-go实战》系列是欣宸推出的实战主题原创,旨在与大家一起动手体验client-go的相关技术,从简单的实践开始,逐步深入了解client-go的强大功能

    85630编辑于 2022-05-06
领券