带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理(四)

简介: 带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理

(3)r.request方法首先检查是否设置 httpclient,如果没有,则使用 net/http默认的DefaultClient、r.URL.String方法根据配置的请求参数生成请求的 RESTfulURL,示例中生成的请求  URL 应该为  https://xxx/api/v1/namespaces/default/pods?limit=100之后用 net/http标准库构建 req请求并发送该请求,最终fn函数变量对 APIServer返回值进行解析(见代码清单2-14

func(r*Request)request(ctxcontext.Context,fnfunc(*http.Request,*http.Response))error{

  

//...

 

client:=r.c.Clientifclient==nil{

client=http.DefaultClient

}

 

//...for{

 

url:=r.URL().String()

req,err:=http.NewRequest(r.verb,url,r.body)

 

//...

resp,err:=client.Do(req)

 

//...

done:=func()bool{

//...

 


 

 

}()

//...

}

}


fn(req,resp)returntrue


 

总结:KubernetesAPIServer  有很多操作资源的接口,而RESTClient就是对访问这API 的封装。

1. ClientSet

 

虽然 RESTClient可以访问 Kubernetes 的任意资源对象,但在使用时需要配置的参数过于烦琐,为了更为优雅地处理,需要进一步封装。ClientSet继承自 RESTClient,使用预生成的 API对象与 APIServer进行交互,方便开发者二次开发。

ClientSet 是一组资源客户端的集合,比如操作PodsServicesSecrets资源的CoreV1Client,操作 DeploymentsReplicaSetsDaemonSets资源的ExtensionsV1beta1Client等,如图2-5所示,直接通过这些客户端提供的操作方法即可对Kubernetes内置的原生资源进行 CreateUpdateGetListDelete等多种操作。


 

 

image.png

 

2—5CientSet 交互图

 

ClientSet的使用方式在前面已有讲解,这里不再赘述。下面分析核心代码clientset.

CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{})的执行流程。

ClientSet包含众多资源客户端,CoreV1方法负责返回 CoreV1Client(见代码清2-15

typeClientsetstruct{

*discovery.DiscoveryClient

//...

coreV1                          *corev1.CoreV1Client

 

//...

}

//...

 

//CoreV1retrievestheCoreV1Client

func(c*Clientset)CoreV1()corev1.CoreV1Interface{returnc.coreV1


}

Pods方法的参数用于设定 Namespace, 内部调用 newPods函数, 该函数返回实现PodInterface的对象(见代码清单2-16

func(c*CoreV1Client)Pods(namespacestring)PodInterface{returnnewPods(c,namespace)

}

 

可以看到 PodInterface 包含了操作 Pods 资源的全部方法,newPods 函数构造的 Pods对象内部包含 RESTClient,Pods对象的List 方法中,我们看到了熟悉的 RESTClient操作资源的调用流程(见代码清单2-17

typePodInterfaceinterface{

Create(ctxcontext.Context,pod*v1.Pod,optsmetav1.CreateOptions)(*v1.Pod,error)

Update(ctxcontext.Context,pod*v1.Pod,optsmetav1.UpdateOptions)(*v1.Pod,error)

UpdateStatus(ctxcontext.Context,pod*v1.Pod,optsmetav1.

UpdateOptions)(*v1.Pod,error)

Delete(ctxcontext.Context,namestring,optsmetav1.DeleteOptions)

error

DeleteCollection(ctxcontext.Context,optsmetav1.DeleteOptions,

listOptsmetav1.ListOptions)error

Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Pod, error)List(ctxcontext.Context,optsmetav1.ListOptions)(*v1.PodList,error)

//...

}

 

funcnewPods(c*CoreV1Client,namespacestring)*pods{return&pods{

client:c.RESTClient(),ns:namespace,

}

}

 

//...

 

func(c*pods)List(ctxcontext.Context,optsmetav1.ListOptions)(result

*v1.PodList,errerror){

//...

 

result=&v1.PodList{}err=c.client.Get().

Namespace(c.ns).


 

Resource("pods").

VersionedParams(&opts,scheme.ParameterCodec).Timeout(timeout).

Do(ctx).

Into(result)

return

}

相关文章
|
2月前
|
Cloud Native 安全 持续交付
构建未来:云原生架构的演进与实践
【2月更文挑战第30天】 随着数字化转型的深入,企业对于信息技术的需求日益复杂化和动态化。传统的IT架构已难以满足快速迭代、灵活扩展及成本效率的双重要求。云原生技术作为解决这一矛盾的关键途径,通过容器化、微服务、持续集成/持续部署(CI/CD)等手段,实现了应用的快速开发、部署及运维。本文将探讨云原生架构的最新发展,分析其如何助力企业构建更加灵活、高效的业务系统,并结合实际案例,展示云原生转型过程中的最佳实践和面临的挑战。
|
7天前
|
负载均衡 监控 Go
Golang深入浅出之-Go语言中的服务网格(Service Mesh)原理与应用
【5月更文挑战第5天】服务网格是处理服务间通信的基础设施层,常由数据平面(代理,如Envoy)和控制平面(管理配置)组成。本文讨论了服务发现、负载均衡和追踪等常见问题及其解决方案,并展示了使用Go语言实现Envoy sidecar配置的例子,强调Go语言在构建服务网格中的优势。服务网格能提升微服务的管理和可观测性,正确应对问题能构建更健壮的分布式系统。
27 1
|
11天前
|
JSON 监控 安全
Golang深入浅出之-Go语言中的反射(reflect):原理与实战应用
【5月更文挑战第1天】Go语言的反射允许运行时检查和修改结构,主要通过`reflect`包的`Type`和`Value`实现。然而,滥用反射可能导致代码复杂和性能下降。要安全使用,应注意避免过度使用,始终进行类型检查,并尊重封装。反射的应用包括动态接口实现、JSON序列化和元编程。理解反射原理并谨慎使用是关键,应尽量保持代码静态类型。
22 2
|
13天前
|
机器学习/深度学习 Cloud Native 持续交付
构建高效机器学习模型的策略与实践构建未来:云原生技术在企业数字化转型中的关键作用
【4月更文挑战第30天】 在机器学习领域,构建一个高效的模型不仅需要深厚的理论基础,还需结合先进的技术手段和策略。本文将探讨一系列提升模型性能的方法,包括数据预处理、特征选择、模型调参以及集成学习等。通过具体案例分析,揭示这些方法如何在实际问题中得以应用,并讨论它们对模型性能的影响。文中还将涉及最新的研究进展,为读者提供前瞻性的指导意义。 【4月更文挑战第30天】随着企业加速其数字化转型之旅,云原生技术已成为推动创新和灵活性的核心。本文深入探讨了云原生架构的原则,包括微服务、容器化、持续集成/持续部署(CI/CD)、以及声明式APIs。分析了这些技术如何共同促进可伸缩性、敏捷性和容错性,同时
|
13天前
|
Kubernetes 监控 Cloud Native
构建未来:云原生架构的演进与实践
【4月更文挑战第30天】 随着数字化转型的不断深入,企业对IT基础设施的要求日益提高。云原生技术以其独特的弹性、可扩展性和敏捷性成为推动现代应用开发的关键动力。本文将探讨云原生架构的核心组件、实施策略以及面临的挑战,旨在为读者提供一个关于如何有效构建和部署云原生应用的全面视角。
|
13天前
|
Cloud Native Devops 持续交付
构建未来应用:云原生架构在现代企业中的实践与挑战
【4月更文挑战第29天】 随着数字化转型的加速,企业正迅速转向云计算以支撑其业务敏捷性和创新。云原生技术,作为推动这一转型的关键因素,正在重新定义软件开发和运维模式。本文将深入探讨云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)以及DevOps文化,并分析这些技术如何帮助企业实现弹性、可扩展和高效的应用部署。同时,我们将讨论在采纳云原生实践中所面临的挑战,包括安全性、治理和人才缺口等问题。
|
13天前
|
运维 Cloud Native Devops
构建未来应用:云原生架构的演进与实践
【4月更文挑战第29天】在数字化转型的浪潮中,企业亟需灵活、高效的技术支撑来应对市场的快速变化。云原生架构以其独特的设计理念和技术栈,成为推动这一变革的关键力量。本文深入探讨了云原生的核心概念、关键技术和实施策略,旨在为企业提供一个清晰的云原生转型蓝图,助力其构建更加动态、可扩展的应用系统。
|
13天前
|
Kubernetes Cloud Native 持续交付
构建未来:云原生架构在现代企业中的应用与实践
【4月更文挑战第29天】 随着数字化转型的浪潮席卷各行各业,企业对于信息技术基础设施的要求日益提高。传统的IT架构已难以满足快速迭代、灵活扩展和持续创新的需求。本文聚焦于云原生架构,一种为云计算环境量身打造的设计理念和技术集合,旨在帮助企业构建更加灵活、可靠和高效的系统。通过对云原生核心组件的解析、实施策略的探讨以及成功案例的分析,我们揭示了云原生架构如何助力企业在竞争激烈的市场中保持领先地位。
|
18天前
|
人工智能 边缘计算 Cloud Native
云原生架构的未来展望与实践挑战
【4月更文挑战第24天】在数字化转型的浪潮中,云原生架构以其高度灵活、可扩展的特点成为企业技术战略的核心。本文深入探讨了云原生技术的最新发展趋势,分析了在实际部署和运维过程中面临的挑战,并提出了相应的解决方案。通过实例分析,本文旨在为企业实施云原生架构提供参考和指导。
|
19天前
|
Cloud Native Devops 持续交付
构建未来:云原生技术在现代IT架构中的演进与实践
【4月更文挑战第24天】 随着企业数字化转型的深入,云原生技术正成为推动创新和敏捷性的关键技术。本文聚焦于云原生技术的发展历程及其在现代IT架构中的应用,探讨了如何利用容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等核心概念来优化资源利用率,提高系统弹性,并加速产品上市时间。通过分析多个行业案例,文章揭示了云原生实践对企业竞争力的显著影响,并提出了面向未来的IT架构战略建议。