带你读《云原生应用开发 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已经不存在了。

相关文章
|
9天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第9天】 随着云计算技术的飞速发展,云原生(Cloud Native)已经成为推动企业数字化转型的核心力量。本文将深入探讨云原生的基本概念、关键技术及其在实际开发中的应用案例,旨在为读者提供一条清晰的云原生技术学习路径和应用指南。通过实例分析,我们将揭示云原生如何优化资源管理、提升应用性能及加快部署速度,进而帮助企业构建更加灵活、可靠和高效的软件系统。
|
6天前
|
Cloud Native 持续交付 云计算
云原生技术在现代应用开发中的应用与实践
【9月更文挑战第12天】随着云计算技术的飞速发展,云原生已成为推动企业数字化转型的关键技术之一。本文将深入探讨云原生的基本概念、核心价值及其在现代应用开发中的实际应用案例,旨在为读者提供一套清晰的云原生应用开发指南。通过分析容器化、微服务架构、持续部署等核心技术的实践过程,我们将揭示云原生如何助力开发者高效构建、部署和管理可扩展的应用。你将看到代码示例,这些示例均选自真实世界的开发场景,帮助你理解云原生技术的强大功能和灵活性。
|
6天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
16 3
|
5天前
|
运维 Cloud Native 持续交付
云原生技术:探索现代应用开发的新纪元
本文深入探讨了云原生技术的崛起,以及它如何彻底改变现代应用开发和部署的方式。我们将从云原生的基本概念入手,逐步解析其核心技术如容器化、微服务架构及自动化运维,并展示这些技术如何帮助开发者和企业实现更高效、更灵活的应用管理。通过实际案例分析,我们将揭示云原生技术在提升开发效率、优化资源利用和增强系统可扩展性方面的巨大潜力。
|
6天前
|
Cloud Native 持续交付 开发者
云原生技术在现代应用开发中的角色与实践
【9月更文挑战第12天】本文将探索云原生技术的核心概念及其在现代软件开发中的应用。通过分析容器化、微服务架构、持续集成/持续部署(CI/CD)和DevOps文化的融合,我们旨在揭示如何利用这些技术提升软件的可靠性、可扩展性和交付速度。同时,文章还将展示一个简化的代码示例,以直观地说明云原生技术的实际应用。
|
13天前
|
监控 Cloud Native 持续交付
云原生时代的微服务架构实践
【9月更文挑战第5天】随着云计算技术的飞速发展,云原生已成为现代软件开发的重要趋势。本文将深入探讨在云原生环境下,如何有效实施微服务架构,包括服务拆分、容器化部署、持续集成与交付等关键环节。通过具体案例,我们将展示如何在云平台上构建弹性、可扩展的微服务应用,并讨论在此过程中可能遇到的挑战及解决策略。
|
12天前
|
监控 Cloud Native 安全
云原生时代的微服务架构实践
【9月更文挑战第6天】在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性成为企业架构升级的首选。本文将通过浅显易懂的语言和生动的比喻,带你一探微服务架构的世界,从理论到实践,逐步揭示如何利用云原生技术构建高效、可靠的微服务系统,同时穿插代码示例,为有志于云原生领域发展的技术人员提供一份实操指南。
29 2
|
14天前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
13天前
|
运维 Cloud Native 持续交付
云原生时代下的微服务架构实践
在数字化转型的浪潮中,云原生技术以其高效、灵活的特性成为企业IT架构升级的首选。本文将通过深入浅出的方式,探讨云原生环境下微服务架构的设计原则、关键技术及实施策略,旨在为读者提供一条清晰的技术路线图,帮助理解和掌握在云平台上构建和管理微服务的实用方法。
|
16天前
|
运维 Cloud Native Devops
云原生时代的DevOps实践:自动化、持续集成与持续部署
【9月更文挑战第3天】未来,随着人工智能、大数据等技术的不断融入,DevOps实践将更加智能化和自动化。我们将看到更多创新的技术和工具涌现出来,为软件开发和运维带来更多便利和效益。同时,跨团队协作和集成也将得到进一步加强,推动软件开发向更加高效、可靠和灵活的方向发展。

热门文章

最新文章