k8s笔记——Client-go 4种客户端与Kubernetes API Server 交互

client-go源码结构及说明

源码目录结构及说明:

源码目录 说明
discovery 提供DiscoveryClient发现客户端
dynamic 提供DynamicClient动态客户端
informers 每种kubernetes资源的动态实现
kubernetes 提供ClientSet客户端
listers 为每一个kubernetes资源提供Lister功能,该功能对Get和List请求提供只读的缓存数据
plugin 提供OpenStack、GCP和Azure等云服务商授权插件
rest 提供RESTClient客户端,对Kuberntes API Server执行RESTful操作
scale 提供ScaleClient客户端,用于扩容或缩容Deployment、ReplicaSet、Replication Controller等资源对象
tools 提供常用工具,例如Sharedinformer、Reflector、DealtFIFO及Indexers。提供Client查询和缓存机制,以减少向kube-apiserver发起的请求数等
transport 提供安全的TCP连接,支持Http Stream,某些操作需要在客户端和容器之间传输二进制流,例如exec、attach等操作。该功能由内部的spdy包提供支持
util 提供常用方法,例如WorkQueue工作队列、Certificate证书管理

kubeconfig配置管理

使用 kubeconfig 文件组织集群访问

kubeconfig可用于管理访问kube-apiserver的配置信息,也支持多集群的配置管理,可在不同环境下管理不同kube-apiserver集群配置。kubernetes的其他组件都是用kubeconfig配置信息来连接kube-apiserver组件。kubeconfig存储了集群、用户、命名空间和身份验证等信息,默认kubeconfig存放在$HOME/.kube/config路径下。kubeconfig的配置信息如下:

简单点的

apiVersion: v1
kind: Config

clusters:
- cluster:
    proxy-url: http://proxy.example.org:3128
    server: https://k8s.example.org/k8s/clusters/c-xxyyzz
  name: development

users:
- name: developer

contexts:
- context:
  name: development

kubeconfig配置信息分为3部分,分别为:

  • clusters:定义kubernetes集群信息,例如kube-apiserver的服务地址及集群的证书信息
  • users:定义kubernetes集群用户身份验证的客户端凭据,例如client-certificate、client-key、token及username/password等。
  • context:定义kuberntes集群用户信息和命名空间等,用于将请求发送到指定的集群

简单点说,clusters (集群),users(用户),context(上下文)

完整的kubeconfig

以minikube搭建的k8s集群为例

apiVersion: v1                                                               
clusters:                                                                    
- cluster:                                                                   
    certificate-authority: /home/zzyy/.minikube/ca.crt                       
    extensions:                                                              
    - extension:                                                             
        last-update: Wed, 22 Jun 2024 21:55:00 CST                           
        provider: minikube.sigs.k8s.io                                       
        version: v1.33.1                                                     
      name: cluster_info                                                     
    server: https://192.168.49.2:8443                                        
  name: minikube                                                             
contexts:                                                                    
- context:                                                                   
    cluster: minikube                                                        
    extensions:                                                              
    - extension:                                                             
        last-update: Wed, 22 Jun 2024 21:55:00 CST                           
        provider: minikube.sigs.k8s.io                                       
        version: v1.33.1                                                     
      name: context_info                                                     
    namespace: default                                                       
    user: minikube                                                           
  name: minikube                                                             
current-context: minikube                                                    
kind: Config                                                                 
preferences: {
   }                                                              
users:                                                                       
- name: minikube                                                             
  user:                                                                      
    client-certificate: /home/zzyy/.minikube/profiles/minikube/client.crt    
    client-key: /home/zzyy/.minikube/profiles/minikube/client.key            

四种Kubernetes APIServer 交互的客户端

Client-Go 共提供了 4 种与 Kubernetes APIServer 交互的客户端。分别是 RESTClient、DiscoveryClient、ClientSet、DynamicClient。
在这里插入图片描述

  • RESTClient:最基础的客户端,主要是对 HTTP 请求进行了封装,支持 Json 和 Protobuf 格式的数据。
  • DiscoveryClient:发现客户端,负责发现 APIServer 支持的资源组、资源版本和资源信息的。
  • ClientSet:负责操作 Kubernetes 内置的资源对象,例如:Pod、Service等。
  • DynamicClient:动态客户端,可以对任意的 Kubernetes 资源对象进行通用操作,包括 CRD。

RESTClient

RESTClient是最基础的客户端,其他的ClientSet、DynamicClient及DiscoveryClient都是基于RESTClient实现的。RESTClient对HTTP Request进行了封装,实现了RESTful风格的API。

package main

import (
	"context"
	"flag"
	"fmt"
	"path/filepath"
	_ "time"

	corev1 "k8s.io/api/core/v1"
	"k8s.io/client-go/kubernetes/scheme"
	"k8s.io/client-go/rest"

	_ "k8s.io/apimachinery/pkg/api/errors"
	_ "k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
	"k8s.io/client-go/util/homedir"
)

func main() {
   
	var kubeconfig *string
	if home := homedir.HomeDir(); home != "" {
   
		kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
	} else {
   
		kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
	}
	// 把用户传递的命令行参数解析为对应变量的值
	flag.Parse()

	// use the current context in kubeconfig   在kubeconfig中使用当前上下文
	config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
	if err != nil {
   
		panic(err.Error())
	}

	// 使用 RESTClient 需要开发者自行设置资源 URL
	// pod 资源没有 group,在核心组,所以前缀是 api
	config.APIPath = "api"
	// 设置 corev1 groupVersion
	config.GroupVersion = &corev1.SchemeGroupVersion
	// 设置解析器,用于用于解析 scheme
	config.NegotiatedSerializer = scheme.Codecs.WithoutConversion()
	// 初始化 RESTClient
	restClient, err := rest.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值