什么是Kubernetes client-go“客户端集”?

mbskvtky  于 2023-01-22  发布在  Go
关注(0)|答案(3)|浏览(156)

在kubernetes go客户端中,什么是clientset
它在多个地方被定义。
1.在client-go软件包中。https://github.com/kubernetes/client-go/blob/62b2cb756b8cea8fba00764ff123993eb44dbd48/kubernetes/clientset.go#L120
1.在kubernetes软件包www.example.com中https://github.com/kubernetes/kubernetes/blob/80e344644e2b6222296f2f03551a8d0273c7cbce/pkg/client/clientset_generated/internalclientset/clientset.go#L64
文档中对这两种情况的说明是相同的:
Clientset包含组的客户端。每个组在Clientset中只包含一个版本。
我有点糊涂了。什么是团体?

ppcbkaq5

ppcbkaq51#

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

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

组中还包含版本。版本允许开发人员对API进行重大更改,并在进行更改时进行管理。组中的版本示例

  • core/v1
  • extensions/v1beta
  • apps/v1beta1
  • batch/v1batch/v2alpha1(注意同一组中的两个版本)
  • x1米11分1秒,x1米12分1秒
  • x1米13英寸1x,x1米14英寸1x

因此,客户端文档说明它为每个组创建不同的客户端。

k10s72fa

k10s72fa2#

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

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{})
}
gorkyyrv

gorkyyrv3#

这两个地方的代码实际上是一样的,Kubernetes项目在一个mono-repo(kubernetes/kubernetes)中编写和管理所有的代码,然后将他们希望其他项目使用的代码发布到其他repo中,以便更好地与Go模块系统一起工作,在下表中可以看到发布过程的详细参考,尽管我不确定该过程在哪里有明确的记录。
顺便说一句,您应该通过k8s.io/client-go使用此代码作为导入,它将从github.com/kubernetes/client-go存储库中获取。

相关问题