什么是Kubernetes客户端"客户端"?

时间:2018-01-22 18:30:26

标签: kubernetes

在kubernetes go客户端,什么是clientset

它在多个地方定义。

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

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

  3. 文档说明两者都是一样的:

      

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

    这令人困惑。什么是小组?

2 个答案:

答案 0 :(得分:3)

Kubernetes(Pods,Deployments,Services等)中的每种资源类型都是API group的成员。这些逻辑"组"不同的类型。一些组的例子是

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

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

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

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

答案 1 :(得分:1)

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