K8s Operator学习

Client-go学习

架构

在这里插入图片描述

控制器逻辑

控制器逻辑:
1.观察:通过监控k8s资源对象变化的事件来获取当前对象状态,只需要关注注入EventHandler让client-go将变化的事件对象信息放入WorkQueue中
2.分析:确定当前状态和期望状态的不同,由Worker来完成
3.执行:执行能够驱动对象当前状态变化的操作,由Worker来完成
更新对象的当前状态,由Worker来完成

RESTClient原理

Client类型
RESTClient: 最基础的客户端,提供最基本的封装
Clientset: Client的合集,在Clientset中包含了所有的k8s内置资源的client,通过clientset便可以很方便的操作如Pod、Service等资源
DynamicClient: 动态客户端,可以操作任意k8s资源包括CRD定义的资源
DiscoveryClient: 用于发现k8s提供的资源组、资源版本和资源信息,比如: kubectl api-resources

RESTclient demo

package main

import (
	"context"
	v1 "k8s.io/api/core/v1"
	"k8s.io/client-go/kubernetes/scheme"
	"k8s.io/client-go/rest"
	"k8s.io/client-go/tools/clientcmd"
)

func main() {
    // 创建config
	config, err := clientcmd.BuildConfigFromFlags("", clientcmd.RecommendedHomeFile)
	if err != nil {
		panic(err)
	}
	// 使用RESTClientFor时需要指定config.GroupVersion否则会报错
	// 也可以使用UnversionedRESTClientFor来创建我们的restClient
	config.GroupVersion = &v1.SchemeGroupVersion
	config.NegotiatedSerializer = scheme.Codecs
	config.APIPath = "/api"
	restClient, err := rest.RESTClientFor(config)
	if err != nil {
		panic(err)
	}
	pod := v1.Pod{}
	err := 
	// Do是用来执行命令的
	// 通过result = r.transformResponse(resp, req) 来返回执行结果
	restClient.Get().Namespace("default").Resource("pods").Name("test").Do(context.TODO()).Into(&pod)
	if err != nil {
	panic(err)
	} else{
	println(pod.Name)
	}
}

RESTClient的使用

RESTClientFor为创建RESTClient准备config,当使用UnversionedRESTClientFor时可以允许config.GroupVersion为空

注:本文为b站白丁云原生学习视频内容,详见参考链接
参考链接:
https://www.bilibili.com/video/BV1uS4y1V7iZ/?spm_id_from=333.788&vd_source=eb1d1d51eca4b462dc3b6817afeeb3e2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值