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

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

2. 使用说明

 

操作 Kubernetes集群的方式有多种,但本质上都要通过调用KubernetesRESTAPI实现对集群的访问和操作。例如,常用的Kubectl命令,当执行 KubectlGetPods命令时,KubectlKubernetesAPIServer完成认证,并发送 GET请求(见代码清单2-7

GET/api/v1/namespaces/test/pods

---

200OK

Content-Type:application/json

{

"kind":"PodList",

"apiVersion":"v1","metadata":{...},

"items":[...]

}

 

Client-go库抽象封装了与 KubernetesRESTAPI的交互,方便开发者对Kubernetes的二次开发。利用 Client-go操作 Kubernetes资源的流程基本如下。

(1)  通过 KubeConfig信息,构造 Config 实例。该实例记录了集群证书、KubernetesAPIServer地址等信息。

(2)  根据 Config实例携带的信息,构建特定客户端(例如,ClientSetDynamicSet

(3)  利用客户端向 KubernetesAPIServer发起请求,操纵 Kubernetes资源。

下面以Examples目录中的示例讲解Client-go库的使用流程(见代码清单2-8

示例:out-of-cluster-client-configuration,列出 defaultNamespace下所有的 Pod资源。

funcmain(){

varkubeconfig*string

ifhome:=homeDir();home!=""{

kubeconfig=flag.String("kubeconfig",

filepath.Join(home,".kube","config"),"(optional)absolutepathtothekubeconfigfile",

)

}else{

kubeconfig=flag.String("kubeconfig","","absolutepathtothekubeconfigfile")

}

flag.Parse()

 

//usethecurrentcontextinkubeconfig

config,err:=clientcmd.BuildConfigFromFlags("",*kubeconfig)

iferr!=nil{

panic(err.Error())

}

 

//createtheclientset

clientset,err:=kubernetes.NewForConfig(config)

iferr!=nil{

panic(err.Error())

}

for{

pods,err:=clientset.CoreV1().Pods("").List(context.TODO(),metav1.

ListOptions{})

iferr!=nil{

panic(err.Error())

}

 

//...

}

}

 

funchomeDir()string{

if h:=os.Getenv("HOME");h!=""{returnh

}

returnos.Getenv("USERPROFILE")//windows


}

 

(1)加载配置信息

在访问 Kubernetes集群时,需要进行身份认证。Kubeconfig用于管理访问集群的配置信息,默认的Kubeconfig文件路径为 $HOME/.kube/config。范例中通过命令行参数配置,若存在HOME环境变量,则使用默认 Kubeconfig配置,并利用 BuildConfig-FromFlags函数构建 Config结构体。

(2)构建客户端

在操作资源前需要先构建对应客户端(具体客户端种类在后面章节介绍,示例中利用NewForConfig函数构建 ClientSet,ClientSet能访问 Kubernetes自身内置的资源,这里ClientSet负责列出 Pod 资源。

(3)操作资源

根据 Kubernetes 资源类型和版本的不同,ClientSet 中包含了一组操作资源的客户端,如代码清单 2-9所示,操作Pod资源使用 CoreV1客户端。示例中:CoreV1方法返回对应客户端;Pods方法指定要操作的对象是 Pod资源,参数用于设定 Namespace为空,表defaultNamespace;List方法表示对资源的操作动作,有 ListGetCreateDelete等。最终返回的Pods 变量就包含了所有Pod 资源的信息。

typeClientsetstruct{

*discovery.DiscoveryClient

//...

coreV1                     *corev1.CoreV1Client

 

//...

}

//...

 

//CoreV1retrievestheCoreV1Client

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

}

 

以上只是简单介绍了 ClientSet的使用流程,下面将详细讲解Client-go中所有客户端的功能原理及使用方式。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
Cloud Native 安全 持续交付
构建未来:云原生架构的演进与实践
【2月更文挑战第30天】 随着数字化转型的深入,企业对于信息技术的需求日益复杂化和动态化。传统的IT架构已难以满足快速迭代、灵活扩展及成本效率的双重要求。云原生技术作为解决这一矛盾的关键途径,通过容器化、微服务、持续集成/持续部署(CI/CD)等手段,实现了应用的快速开发、部署及运维。本文将探讨云原生架构的最新发展,分析其如何助力企业构建更加灵活、高效的业务系统,并结合实际案例,展示云原生转型过程中的最佳实践和面临的挑战。
|
5天前
|
负载均衡 监控 Go
Golang深入浅出之-Go语言中的服务网格(Service Mesh)原理与应用
【5月更文挑战第5天】服务网格是处理服务间通信的基础设施层,常由数据平面(代理,如Envoy)和控制平面(管理配置)组成。本文讨论了服务发现、负载均衡和追踪等常见问题及其解决方案,并展示了使用Go语言实现Envoy sidecar配置的例子,强调Go语言在构建服务网格中的优势。服务网格能提升微服务的管理和可观测性,正确应对问题能构建更健壮的分布式系统。
26 1
|
9天前
|
JSON 监控 安全
Golang深入浅出之-Go语言中的反射(reflect):原理与实战应用
【5月更文挑战第1天】Go语言的反射允许运行时检查和修改结构,主要通过`reflect`包的`Type`和`Value`实现。然而,滥用反射可能导致代码复杂和性能下降。要安全使用,应注意避免过度使用,始终进行类型检查,并尊重封装。反射的应用包括动态接口实现、JSON序列化和元编程。理解反射原理并谨慎使用是关键,应尽量保持代码静态类型。
21 2
|
10天前
|
Kubernetes 监控 Cloud Native
构建未来:云原生架构的演进与实践
【4月更文挑战第30天】 随着数字化转型的不断深入,企业对IT基础设施的要求日益提高。云原生技术以其独特的弹性、可扩展性和敏捷性成为推动现代应用开发的关键动力。本文将探讨云原生架构的核心组件、实施策略以及面临的挑战,旨在为读者提供一个关于如何有效构建和部署云原生应用的全面视角。
|
11天前
|
Cloud Native Devops 持续交付
构建未来应用:云原生架构在现代企业中的实践与挑战
【4月更文挑战第29天】 随着数字化转型的加速,企业正迅速转向云计算以支撑其业务敏捷性和创新。云原生技术,作为推动这一转型的关键因素,正在重新定义软件开发和运维模式。本文将深入探讨云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)以及DevOps文化,并分析这些技术如何帮助企业实现弹性、可扩展和高效的应用部署。同时,我们将讨论在采纳云原生实践中所面临的挑战,包括安全性、治理和人才缺口等问题。
|
11天前
|
运维 Cloud Native Devops
构建未来应用:云原生架构的演进与实践
【4月更文挑战第29天】在数字化转型的浪潮中,企业亟需灵活、高效的技术支撑来应对市场的快速变化。云原生架构以其独特的设计理念和技术栈,成为推动这一变革的关键力量。本文深入探讨了云原生的核心概念、关键技术和实施策略,旨在为企业提供一个清晰的云原生转型蓝图,助力其构建更加动态、可扩展的应用系统。
|
11天前
|
Kubernetes Cloud Native 持续交付
构建未来:云原生架构在现代企业中的应用与实践
【4月更文挑战第29天】 随着数字化转型的浪潮席卷各行各业,企业对于信息技术基础设施的要求日益提高。传统的IT架构已难以满足快速迭代、灵活扩展和持续创新的需求。本文聚焦于云原生架构,一种为云计算环境量身打造的设计理念和技术集合,旨在帮助企业构建更加灵活、可靠和高效的系统。通过对云原生核心组件的解析、实施策略的探讨以及成功案例的分析,我们揭示了云原生架构如何助力企业在竞争激烈的市场中保持领先地位。
|
16天前
|
人工智能 边缘计算 Cloud Native
云原生架构的未来展望与实践挑战
【4月更文挑战第24天】在数字化转型的浪潮中,云原生架构以其高度灵活、可扩展的特点成为企业技术战略的核心。本文深入探讨了云原生技术的最新发展趋势,分析了在实际部署和运维过程中面临的挑战,并提出了相应的解决方案。通过实例分析,本文旨在为企业实施云原生架构提供参考和指导。
|
16天前
|
Cloud Native Devops 持续交付
构建未来:云原生技术在现代IT架构中的演进与实践
【4月更文挑战第24天】 随着企业数字化转型的深入,云原生技术正成为推动创新和敏捷性的关键技术。本文聚焦于云原生技术的发展历程及其在现代IT架构中的应用,探讨了如何利用容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等核心概念来优化资源利用率,提高系统弹性,并加速产品上市时间。通过分析多个行业案例,文章揭示了云原生实践对企业竞争力的显著影响,并提出了面向未来的IT架构战略建议。
|
25天前
|
Java Go 调度
Go语言并发编程原理与实践:面试经验与必备知识点解析
【4月更文挑战第12天】本文分享了Go语言并发编程在面试中的重要性,包括必备知识点和面试经验。核心知识点涵盖Goroutines、Channels、Select、Mutex、Sync包、Context和错误处理。面试策略强调结构化回答、代码示例及实战经历。同时,解析了Goroutine与线程的区别、Channel实现生产者消费者模式、避免死锁的方法以及Context包的作用和应用场景。通过理论与实践的结合,助你成功应对Go并发编程面试。
24 3

热门文章

最新文章