首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用client-go访问kubernetes CRD?

使用client-go访问Kubernetes CRD的步骤如下:

  1. 导入必要的包:
代码语言:txt
复制
import (
    "context"
    "fmt"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
)
  1. 创建Kubernetes客户端:
代码语言:txt
复制
config, err := clientcmd.BuildConfigFromFlags("", "/path/to/kubeconfig")
if err != nil {
    panic(err.Error())
}
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
    panic(err.Error())
}

其中,/path/to/kubeconfig是你的kubeconfig文件路径。

  1. 创建自定义资源的客户端:
代码语言:txt
复制
crdClient := clientset.Resource("your-crd-group/your-crd-version").Namespace("your-namespace")

其中,your-crd-group是自定义资源的API组,your-crd-version是自定义资源的API版本,your-namespace是自定义资源所在的命名空间。

  1. 创建自定义资源对象:
代码语言:txt
复制
crdObj := &unstructured.Unstructured{
    Object: map[string]interface{}{
        "apiVersion": "your-crd-group/your-crd-version",
        "kind":       "YourCRD",
        "metadata": map[string]interface{}{
            "name":      "your-crd-name",
            "namespace": "your-namespace",
        },
    },
}

其中,your-crd-name是自定义资源的名称。

  1. 获取自定义资源对象:
代码语言:txt
复制
result, err := crdClient.Get(context.TODO(), "your-crd-name", metav1.GetOptions{})
if err != nil {
    panic(err.Error())
}
fmt.Printf("YourCRD: %v\n", result)
  1. 创建或更新自定义资源对象:
代码语言:txt
复制
_, err = crdClient.Create(context.TODO(), crdObj, metav1.CreateOptions{})
if err != nil {
    _, err = crdClient.Update(context.TODO(), crdObj, metav1.UpdateOptions{})
    if err != nil {
        panic(err.Error())
    }
}
  1. 删除自定义资源对象:
代码语言:txt
复制
err = crdClient.Delete(context.TODO(), "your-crd-name", metav1.DeleteOptions{})
if err != nil {
    panic(err.Error())
}

这样,你就可以使用client-go访问Kubernetes CRD了。

关于client-go的更多详细信息和用法,请参考腾讯云容器服务(TKE)的相关文档:client-go使用指南

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何使用 CRD 拓展 Kubernetes 集群

如何使用 CRD 拓展 Kubernetes 集群 在 6 月底 KubeCon 回来之后,就打算写几篇关于 CRD 的文章,还在 Twitter 上给人做了些许改进 CRD 相关文档的承诺,零零碎碎的事很多...太长不看版: CRD 本身是 Kubernetes 的一种资源,允许我们自己自定义新的资源类型 除了 CRD 我们还要提供一个 controller 以实现自己的逻辑 CRD 允许我们基于已有的 Kube...Yaml 来描述,但是,如何确保 Yaml 描述的资源是规范的、合法的,那就是 schema 要做的事情,CRD 就其功能来讲,就是想集群注册一种新资源,并告知 ApiServer,这种资源怎么怎么被合法的定义...换句话讲,有一个稳定的 SVC 可以对其他组件提供当前版本的服务,而其他组件也有途径访问到特定版本的服务。这个 SVC + CurrentVersion 就非常轻松的实现了蓝绿发布的能力。...但是 CRD 允许我们自己基于产品创建概念(或者说资源),让 Kube 已有的资源为我们的概念服务,这可以使产品更专注与解决的场景,而不是如何思考如何将场景应用到 Kubernetes

80020

k8s-client-go源码剖析(一)

机制原理 WorkerQueue原理 几种Client-go客户端的使用、优劣 学习环境相关: Kubernetes 1.14版本 对应版本的client-go 本文主题 -------- 本文是第一周...代码库已经集成到了Kubernetes源码中,所以书本中展示的内容是在Kubernetes源码中源码结构,而这里展示的是Client-go代码库中原始的内容,所以多了一些源码之外的内容,例如README...缺点是不能直接访问CRD。 通过client-gen代码生成器生成带有CRD资源的ClientSet后可以访问CRD资源。...总结 ------ 第一周主要是了解下各种客户端的使用以及不同,有时间的可以再进行一些拓展试验,研究对象可以选择一些主流的框架或官方示例,例如: Sample-Controller 中如何使用client-go...的 Kubebuilder中如何使用client-go的 Operator-sdk中如何使用client-go的 延伸阅读: 活动 Kubernetes 源码研习社 第一期活动 如何高效阅读 Kubernetes

83200

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的informer,它的工作模式是:初始时使用List()去加载资源的所有相关实例,然后使用Watch()进行订阅更新;使用初始对象List列表和从watch订阅更新到的数据会构建一个本地缓存...,该缓存可以快速访问任何自定义资源而无需每次都访问API Server。...的处理 试想一下,istio中的资源、对象都是Kubernetes的CRDs,那么必然,istio中肯定有处理好Kubernetes CRD的方式,我们知道目前都是采用client-go,那么istio

1.7K30

Kubebuilder介绍:使用CRD构建Kubernetes API的SDK

Kubebuilder介绍:使用CRD构建Kubernetes API的SDK 作者:Phillip Wittrock(谷歌),Sunil Arora(谷歌) 我们如何才能让MySQL、Spark和Cassandra...这是一个全面的开发工具包,使用CRD快速构建和发布Kubernetes API和控制器。Kubebuilder支持项目和API定义,基于controller-runtime库构建。...为什么使用Kubebuilder和Kubernetes API? 应用程序和群集资源通常需要一些操作,无论是使用新副本替换失败的副本,还是在重新分析数据时缩放副本数量。...使用Kubernetes API模型,管理逻辑直接嵌入到特定于应用程序的Kubernetes API中,例如,“MySQL”API。...然而,虽然开发者可以在原始API机器之上构建新的控制器,这样做是一种“从零开始”的DIY经验,要求开发者学习有关如何实现Kubernetes库的低层细节,手写样板代码并且建自己的解决方案用于集成测试、RBAC

1.3K20

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内置资源的时候是很方便的...不同,dynamicClient为各种类型的资源都提供统一的操作API,资源需要包装为Unstructured数据结构; 内部使用了Restclient与kubernetes交互; 对dynamicClient...—您说得没错,这里用pod是因为折腾CRD太麻烦了,定义好了还要在kubernetes上发布,于是干脆用pod来代替CRD,反正dynamicClient都能处理,咱们通过实战掌握dynamicClient

37630

Crossplane支持的自定义资源数量突破了Kubernetes的限制

在过去的几个月里,Crossplane 支持的自定义资源数量突破了 Kubernetes 的限制。在这篇文章中,我们将探讨下由 Upbound 工程师发现的限制,以及我们如何帮助克服它们。...Crossplane MR 是一种 Kubernetes CR。API 服务器使用 CRD 来获知新类型的 CR。...从 Kubernetes v1.25 开始,所有基于 client-go 库构建的客户端都将享受到提高后的限值。 客户端缓存写入 下一个客户端问题诊断起来有点难。...从 Kubernetes v1.25 版本开始,Upbound 更新了 kubectl(及所有基于 client-go 的客户端),使用校验和来保证发现缓存的一致性,而不是 fsyncs。...图片: API 服务器安装 780 个 CRD 后的内存使用情况 对于像 Google Kubernetes Engine(GKE)这样的托管 Kubernetes 服务,这特别成问题,因为它们经常会限制

80420

KubeVirt:使用CRD扩展Kubernetes来运行虚拟化工作负载

KubeVirt:使用CRD扩展Kubernetes来运行虚拟化工作负载 作者:David Vossel(红帽) KubeVirt是什么?...通过使用自定义资源定义(CRD)和其它Kubernetes功能,KubeVirt可以无缝扩展现有的Kubernetes集群,提供一组可用于管理虚拟机的虚拟化API。...为什么使用CRD而不是聚合API服务器? 早在2017年中期,我们在KubeVirt工作的人就处于十字路口。...我们必须决定扩展Kubernetes是否使用聚合API服务器或使用新的自定义资源定义(CRD)功能。 当时,CRD缺乏我们提供功能集所需的大部分功能。...这意味着集群管理员必须接受KubeVirt需要单独的etcd部署,这会增加复杂性,或者为KubeVirt提供对Kubernetes etcd的共享访问,这会引入风险。 我们并不接受这种权衡。

67820

k8s代码走读---client-go编程交互基础

前言 代码 clone 地址:https://github.com/kubernetes/client-go。...实际上在 kubernetes 的源码中也包含了这部分代码:vendor/k8s.io/client-go/。看代码都没问题。...kubernetesclient-go 根据具体使用的方式进行了基础库封装和另外 4 种(书上介绍 3 种,我认为 scale client 也是一种 client)类型的 client 封装,分别针对不同的应用场景...examples 这里面有一些例子,比如对 deployment 创建、修改,如何选主,workqueue 如何使用等等 informers 这就是 client-go 中非常有名的 informer...机制的核心代码 kubernetes clientset 的代码,也是对 rest 客户端的进一步封装,提供复杂的资源访问和管理能力 listers 为每个 k8s 资源提供 lister 功能,提供了只读缓存功能

78630

Kubernetesclient-go库介绍

Kubernetesclient-go库介绍 client-go的作用 github上client-go官方项目工程 基本介绍 Kubernetes官方从2016年8月份开始,将Kubernetes资源操作相关的核心源码抽取出来...源码简介 主要package 主要的几个package包的功能说明: kubernetes访问 Kubernetes API的一系列的clientset discovery:通过Kubernetes...只支持JSON RESTClient RESTClient 封装了指定资源URL的通用Kubernetes API的访问姿势 Clientset /Users/meitu/Documents/work_Meitu...image.png client-go组件 Reflector:通过Kubernetes API监控Kubernetes的资源类型 采用List、Watch机制 可以Watch任何资源包括CRD 添加object...kubernetes client-go Kubernetes Informer 详解 如何client-go 拓展 Kubernetes 的 API Using Kubernetes API from

4.2K31

kubebuilder实战之三:基础知识速览

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 系列文章链接 kubebuilder实战之一:准备工作...本该进入真枪实弹的operator开发环节,却突然发现kubebuilder涉及的知识点太多太零散,如果现在就敲命令写代码去实战,即便完成了一次operator开发,但缺失大量信息(例如操作顺序怎么安排、步骤之间如何关联等...、Version、Resource学习小记》 《client-go实战之一:准备工作》 《client-go实战之二:RESTClient》 《client-go实战之三:Clientset》 《client-go...operator时,就应该从真实需求出发,开始设计整个CRD,而这些设计最终体现在CRD的数据结构,以及对真实值和期望值的处理逻辑中; 在《kubebuilder实战之二:初次体验kubebuilder...时用到的实例SchemeBuilder,zz_generated.deepcopy.go用于实现实例的深拷贝,它们都无需修改,了解即可; controller相关(业务核心) 前面聊过了数据核心,接下来要讨论如何实现业务需求了

67730

Client Go四种交互模式之 DynamicClient实战案例详解

作为加强,Kubernetes本身提供了一系列更加方便整合进kubernetes系统的方式,被称之为client-go。 这个项目中被最广泛使用客户端是ClientSet,它是交互客户端的类型之一。...因此,深入client-go项目的组成模块和弄清楚如何使用好它就是要具备的技能。...# 通过DynamicClient做基础操作 以下的代码都预设你在`kubernetes cluster`中进行使用。...= nil { return err } return nil } 这里我们利用unstructured.NestedInt64只访问我们要操作的字段,保证我们与MongoDB CRD间的耦合最小...通常,我们使用Informer,一个由k8s.io/client-go提供的模块,状态发生改变、创建就会在指定类型的client运行一个handler。

35810
领券