什么是Kubernetes客户端访问的“客户端集”?

Cha*_*row 4 kubernetes

在kubernetes go client中,什么是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_produced/internalclientset/clientset.go#L64

文档对他们两个说了同样的话:

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

这很混乱。什么是团体?

jac*_*k_t 7

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

package main

import (
    "context"
    "flag"
    "fmt"

    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
)

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)

    ctx := context.Background()
    // executes GET request to K8s API to get pods 'cart' from 'prepayment' namespace
    pod, err := clientset.CoreV1().Pods("prepayment").Get(ctx, "cart", metav1.GetOptions{})
    fmt.Println("err: ", err)

    fmt.Println("pod: ", pod)

}
Run Code Online (Sandbox Code Playgroud)


Jos*_*sto 6

Kubernetes中的每种资源类型(Pod,Deployments,Service等)都是API组的成员。这些在逻辑上将不同类型“分组”。组的一些示例是

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

组还包含版本。版本允许开发人员对API进行重大更改,并按原样进行管理。组内版本的一些示例

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

因此,客户文档说它正在为每个组创建一个不同的客户。

  • 在kubernetes存储库中进行开发,每天对客户端访问型存储库进行“镜像”更改。client-go自述文件中的最后一个“贡献”部分对此有所提示。原因很明显,client-go一直存在于k8s仓库中,但是通过这种方式,您可以使用它而无需下载/导入所有k8s代码。https://github.com/kubernetes/client-go/blob/master/README.md (2认同)