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

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

(4)  具体处理 WorkerQueue中对象的流程,见代码清单 2-57

func(c*Controller)runWorker(){

//启动⽆限循环,接收并处理消息

forc.processNextItem(){

}

}

//Workqueue中获取对象,并打印信息。

func(c*Controller)processNextItem()bool{key,shutdown:=c.queue.Get()

//退出

ifshutdown{

returnfalse

}

//标记此Key已经处理

deferc.queue.Done(key)

//打印Key对应的Object的信息

err:=c.syncToStdout(key.(string))c.handleError(err,key)

returntrue

}

 

//获取Key对应的Object,并打印相关信息

func(c*Controller)syncToStdout(keystring)error{obj,exists,err:=c.indexer.GetByKey(key)

iferr!=nil{

klog.Errorf("Fetchingobjectwithkey%sfromstorefailedwith%v",key,err)

returnerr

}

if!exists{

fmt.Printf("Pod%sdoesnotexistanymore\n",key)

}else{

fmt.Printf("Sync/Add/UpdateforPod%s\n",obj.(*core_v1.Pod).

GetName())

}


 

returnnil


}

 

(5)  Main 函数逻辑,见代码清单2-58

funcmain(){

varkubeconfigstring

varmasterstring

//从外部获取集群信息 (kube.config)

flag.StringVar(&kubeconfig,"kubeconfig","","kubeconfigfile")

//获取集群masterurl

flag.StringVar(&master,"master","","masterurl")

//读取构建 config

config,err:=clientcmd.BuildConfigFromFlags(master,kubeconfig)

iferr!=nil{

klog.Fatal(err)

}

//创建k8sClient

clientset,err:=kubernetes.NewForConfig(config)

iferr!=nil{

klog.Fatal(err)

}

//从指定的客户端、资源、命名空间和字段选择器创建⼀个新的List-Watch

podListWatcher := cache.NewListWatchFromClient(clientset.CoreV1().RESTClient(),"pods",v1.NamespaceDefault,fields.Everything())

//构造⼀个具有速率限制排队功能的新的Workqueue

queue:=workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter())

//创建IndexerInformer

indexer,informer:=cache.NewIndexerInformer(podListWatcher,&v1.Pod{},

0,cache.ResourceEventHandlerFuncs{

//当有Pod创建时,根据DeltaQueue弹出的Object⽣成对应的Key,并加⼊Workqueue中。此处可以根据Object的⼀些属性进⾏过滤

AddFunc:func(objinterface{}){

key,err:=cache.MetaNamespaceKeyFunc(new)

iferr==nil{queue.Add(key)

}

},

//Pod删除操作

DeleteFunc:func(objinterface{}){

//在⽣成Key之前检查对象。因为资源删除后有可能会进⾏重建等操作,如果监听时错过了删除信息,会导致该条记录是陈旧的

key,err:=cache.DeletionHandlingMetaNamespaceKeyFunc(obj)


 

 

iferr==nil{queue.Add(key)

}

},

},cache.Indexers{})

//创建新的Controller

controller:=NewController(queue,indexer,informer)stop:=make(chanstruct{})

deferclose(stop)

//启动 Controller

gocontroller.Run(1,stop)select{}

}

 

至此一个简单的Controller就完成了,然后我们从已有的k8s环境中复制Config文件,Config文件存放在/root/.kube/目录下,配置运行代码,运行结果见代码清单 2-59。

I031215:46:38.849495     25524main.go:125]StartingPodcontrollerSync/Add/UpdateforPodcurl-666-6f68d49784-r2gln

Sync/Add/UpdateforPodbusybox

Poddefault/mypoddoesnotexistanymore

 

结果显示:程序启动了一个 PodController,Controller监听到在 Default命名空间下有两个 Pod:busyboxcurl-666-6f68d49784-r2gln,缓存中的 mypod已经不存在了。

相关文章
|
12天前
|
监控 Cloud Native 开发者
云原生技术浪潮下的微服务架构实践
云原生技术正引领着现代软件开发的潮流,其中微服务架构作为其核心理念之一,为复杂应用提供了灵活、可扩展的解决方案。本文将探讨在云原生环境下实施微服务架构的策略和挑战,并结合实际案例分析微服务设计的最佳实践,旨在为开发者提供一套可行的微服务部署与管理指南。
|
25天前
|
机器学习/深度学习 算法 Cloud Native
利用机器学习进行情感分析:从理论到实践云原生技术在现代软件开发中的应用与挑战
【5月更文挑战第31天】本文旨在深入探讨机器学习在情感分析领域的应用。首先,我们将解释什么是情感分析以及为什么它在今天的世界中如此重要。然后,我们将详细介绍几种主要的机器学习算法,包括决策树、随机森林和神经网络,以及它们如何被用于情感分析。最后,我们将通过一个实际的案例研究来展示这些理论在实践中的应用。
|
1天前
|
人工智能 Cloud Native Java
从云原生视角看 AI 原生应用架构的实践
本文核心观点: • 基于大模型的 AI 原生应用将越来越多,容器和微服务为代表的云原生技术将加速渗透传统业务。 • API 是 AI 原生应用的一等公民,并引入了更多流量,催生企业新的生命力和想象空间。 • AI 原生应用对网关的需求超越了传统的路由和负载均衡功能,承载了更大的 AI 工程化使命。 • AI Infra 的一致性架构至关重要,API 网关、消息队列、可观测是 AI Infra 的重要组成。
|
1天前
|
Kubernetes 监控 Cloud Native
云原生架构下的微服务治理实践
【6月更文挑战第23天】在云计算的浪潮中,云原生架构以其弹性、可扩展性和高效性成为企业数字化转型的重要推手。本文将深入探讨如何利用云原生技术实现微服务的治理与优化,确保系统的稳定性和高可用性。我们将从微服务的基本概念出发,通过具体案例分析,揭示云原生环境下微服务治理的关键策略,并分享实践经验,旨在为读者提供一套完整的微服务治理解决方案。
|
3天前
|
Unix Go 开发者
探索Go语言并发模型:原理与实践
本文深入探讨了Go语言的并发模型,包括其设计原理、Goroutine和Channel的基本使用,以及如何在实际项目中高效地应用这些概念来提高程序的性能和可维护性。
|
6天前
|
存储 运维 监控
云原生架构下的微服务治理实践
【6月更文挑战第19天】在数字化转型的浪潮中,云原生技术以其灵活、可扩展的特性成为企业IT架构升级的首选。本文深入探讨了在云原生架构下,如何有效实施微服务治理,包括服务发现、配置管理、服务监控和故障处理等方面的最佳实践。文章旨在为读者提供一套全面的微服务治理框架,帮助团队构建更加稳定、高效的分布式系统。
9 2
|
5天前
|
运维 Cloud Native 持续交付
云原生技术:现代应用开发的革命性变革
云原生技术正在重新定义软件开发和部署的方式。通过采用容器、微服务、持续集成与持续交付(CI/CD)等关键技术,企业可以显著提升开发效率、缩短上市时间,并提高应用的可扩展性和可靠性。本文深入探讨了云原生技术的核心组件及其带来的实际业务价值,展示了其在现代应用开发中的革命性影响。
10 1
|
6天前
|
监控 Cloud Native 安全
云原生架构下的微服务治理实践
【6月更文挑战第18天】本文深入探讨了在云原生架构背景下,微服务治理的实践方法与技术选型。文章首先介绍了云原生的基本概念和微服务治理的重要性,随后详细阐述了服务发现、配置管理、弹性设计等关键技术的实施细节,并结合实际案例分析如何构建高效、稳定的微服务系统。最后,文章讨论了微服务治理面临的挑战及未来发展趋势。
|
8天前
|
运维 Cloud Native 云计算
云原生架构的演变与实践
在数字化浪潮不断推进的今天,企业对于IT基础设施的要求日益增高,云原生技术因此成为推动现代软件开发的关键力量。本文将深入探讨云原生架构的概念、核心价值及其在实际业务中的应用,同时分析面临的挑战和未来的发展趋势,为读者呈现一幅云原生技术演进的全景图。
|
14天前
|
监控 Cloud Native 持续交付
云原生架构:从理念到实践的全面解析
云原生架构已经成为现代软件开发和部署的核心理念。它不仅改变了传统的软件开发模式,还为企业提供了更高的灵活性、可扩展性和可靠性。本篇文章将深入探讨云原生架构的基本概念、关键组件以及实际应用案例,帮助读者更好地理解和应用这一先进的技术框架。
81 3

热门文章

最新文章