【问题标题】:What is a Kubernetes client-go "clientset"?什么是 Kubernetes 客户端-go“客户端集”?
【发布时间】:2018-07-01 11:13:21
【问题描述】:

在 kubernetes go 客户端中,clientset 是什么?

它在多个地方定义。

  1. client-go 包中。 https://github.com/kubernetes/client-go/blob/62b2cb756b8cea8fba00764ff123993eb44dbd48/kubernetes/clientset.go#L120

  2. kubernetes 包中https://github.com/kubernetes/kubernetes/blob/80e344644e2b6222296f2f03551a8d0273c7cbce/pkg/client/clientset_generated/internalclientset/clientset.go#L64

文档对他们俩都说了同样的话:

Clientset 包含组的客户端。每个组都有确切的 Clientset 中包含一个版本。

这令人困惑。什么是组?

【问题讨论】:

    标签: go kubernetes


    【解决方案1】:

    Kubernetes 中的每种资源类型(Pod、部署、服务等)都是 API group 的成员。这些在逻辑上“分组”了不同的类型。组的一些示例是

    • core
    • extensions
    • batch
    • apps
    • authentication
    • autoscaling

    Groups also contain versions。版本允许开发人员对 API 进行重大更改,并按原样管理它们。组内版本的一些示例

    • core/v1
    • extensions/v1beta
    • apps/v1beta1
    • batch/v1batch/v2alpha1(注意同一组内的两个版本)
    • authentication/v1, authentication/v1beta1
    • autoscaling/v1, autoscaling/v2alpha1

    所以客户端文档说它为每个组创建不同的客户端。

    【讨论】:

    • 谢谢! kubernetes 包中的clientsetclient-go 包中的clientset 有什么区别?
    • 我真的不知道有什么区别
    • 在 kubernetes 存储库中进行开发,更改每天“镜像”一次到 client-go 存储库。 client-go 自述文件中的最后一段“贡献”给出了一个提示。原因是 client-go 一直在 k8s 存储库中,但这样您就可以使用它而无需下载/导入所有 k8s 代码。 github.com/kubernetes/client-go/blob/master/README.md
    【解决方案2】:

    @Jose Armesto 给出的描述是正确的,我想用一个sn-p来支持它。

    package main 
    import (
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/tools/clientcmd"
        "k8s.io/client-go/kubernetes"
    )
    
    var kubeconfig string
    
    func init() {
       // kubeconfig file parsing
       flag.StringVar(&kubeconfig, "kubeconfig", "", "path to Kubernetes config file")
       flag.Parse()
    }
    
    func main() {
       // create the config object from kubeconfig
       config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
    
       // create clientset (set of muliple clients) for each Group (e.g. Core), 
       // the Version (V1) of Group and Kind (e.g. Pods) so GVK.
       clientset, err := kubernetes.NewForConfig(config)
    
       // executes GET request to K8s API to get pods 'cart' from 'prepayment' namespace
       pod, err := clientset.CoreV1().Pods("prepayment").Get("cart", metav1.GetOptions{})
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多