带你读《云原生应用开发 Operator原理与实践》第一章引言1.2Operator 介绍(五)

简介: 带你读《云原生应用开发 Operator原理与实践》第一章引言1.2Operator 介绍

(4)  修改 Controller逻辑

Controller中需要通过Reconcile方法完成 DeploymentService 部署,并最终达到期望的状态。

Controller中的代码见代码清单 1-11,我们需要在其中加入业务逻辑。

// +kubebuilder:rbac:groups=webapp.demo.welcome.domain,resources=welcomes,ver-bs=get;list;watch;create;update;patch;delete

//+kubebuilder:rbac:groups=webapp.demo.welcome.domain,resources=welcomes/status,verbs=get;update;patch

 

//+kubebuilder:rbac:groups=apps,resources=deployments,verbs=list;watch;get;patch;create;update

//+kubebuilder:rbac:groups=core,resources=services,verbs=list;watch;get;patch;create;update

func(r*WelcomeReconciler)Reconcile(reqctrl.Request)(ctrl.Result,error){

ctx:=context.Background()

log:=r.Log.WithValues("welcome",req.NamespacedName)log.Info("reconcilingwelcome")

 

此处有两组+”标识,第一组用于Operator更新Welcome资源对象,第二组用于创DeploymentService。接下来完成 Welcome类型控制器的部分代码的实现代码清单1-12


deployment,err:=r.createWelcomeDeployment(welcome)iferr!=nil{

returnctrl.Result{},err

}

log.Info("createdeploymentsuccess!")

 

svc,err:=r.createService(welcome)iferr!=nil{

returnctrl.Result{},err

}

log.Info("createservicesuccess!")

applyOpts:=[]client.PatchOption{client.ForceOwnership,client.

FieldOwner("welcome_controller")}

err=r.Patch(ctx,&deployment,client.Apply,applyOpts...)


iferr!=nil{

returnctrl.Result{},err

}

 

err=r.Patch(ctx,&svc,client.Apply,applyOpts...)iferr!=nil{

returnctrl.Result{},err

}

在控制器部分需要完成 DeploymentService 的创建,并完成两者的关联,在上述代码中,我们分别通过调用createWelcomeDeploymentcreateService方法完成对象的创建,接下来我们完成上述方法的具体实现(见代码清单1-13

func(r*WelcomeReconciler)createWelcomeDeployment(welcomewebappv1.Welcome)(appsv1.Deployment,error){

defOne:=int32(1)

name:=welcome.Spec.Nameifname==""{

name="world"

}

depl:=appsv1.Deployment{

TypeMeta:metav1.TypeMeta{APIVersion:appsv1.SchemeGroupVersion.

String(),Kind:"Deployment"},

ObjectMeta:metav1.ObjectMeta{Name:welcome.Name,Namespace:welcome.Namespace,

},

Spec:appsv1.DeploymentSpec{Replicas:&defOne,

Selector:&metav1.LabelSelector{

MatchLabels:map[string]string{"welcome":welcome.Name},

},

Template:corev1.PodTemplateSpec{ObjectMeta:metav1.ObjectMeta{

Labels:map[string]string{"welcome":welcome.Name},

},

Spec:corev1.PodSpec{

Containers:[]corev1.Container{

{

Name:"welcome",

Env:[]corev1.EnvVar{

 

{Name:"NAME",Value:name},

},

 

Protocol:"TCP"},


Ports:[]corev1.ContainerPort{

{ContainerPort:8080,Name:"http",


},

Image:"sdfcdwefe/operatordemo:v1",Resources:corev1.ResourceRequirements{

Requests:corev1.ResourceList{corev1.ResourceCPU:   *resource.


NewMilliQuantity(100, resource.DecimalSI),NewMilliQuantity(100000,resource.BinarySI),


corev1.ResourceMemory:*resource.


在上述代码中,我们在 Deployment使用了之前制作的 Docker镜像,将 Types中获得的 NAME字段作为环境变量传入镜像中,在镜像执行 main函数时,即可获得 NAME字段并修改 index文件,在文件中插入 NAME,并默认开启 8080监听端口,用户通过Web访问时即可获得最终的期望值。

接下来,我们完成Service部分代码的实现(见代码清单1-14


func(r*WelcomeReconciler)createService(welcomewebappv1.Welcome)(corev1.Service,error){

svc:=corev1.Service{

TypeMeta:metav1.TypeMeta{APIVersion:corev1.SchemeGroupVersion.

String(),Kind:"Service"},

ObjectMeta:metav1.ObjectMeta{Name:welcome.Name,Namespace:welcome.Namespace,

},

Spec:corev1.ServiceSpec{

Ports:[]corev1.ServicePort{

{Name:"http",Port:8080,Protocol:"TCP",TargetPort:

intstr.FromString("http")},

},

Selector:map[string]string{"welcome":welcome.Name},Type:        corev1.ServiceTypeLoadBalancer,

},

}

 

    在本例中,我们创建了 LoadBalancer类型的 Service。通过kubectlgetsvc命令可以获取 URL地址,也可以访问 Web应用。

相关文章
|
13天前
|
Kubernetes 监控 Cloud Native
云原生时代下的应用开发与部署实践
【10月更文挑战第4天】在云原生的浪潮中,开发者和运维人员面临着新的挑战和机遇。本文将通过实际案例,展示如何在云平台上高效地开发、部署和管理应用,同时确保系统的可扩展性和高可用性。我们将深入探讨容器化技术、微服务架构以及持续集成/持续部署(CI/CD)流程的实施策略,旨在为读者提供一套完整的云原生解决方案框架。
|
1天前
|
运维 Cloud Native 持续交付
云原生架构的演进与实践####
【10月更文挑战第16天】 云原生,这一概念自提出以来,便以其独特的魅力和无限的可能性,引领着现代软件开发与部署的新浪潮。本文旨在探讨云原生架构的核心理念、关键技术及其在实际项目中的应用实践,揭示其如何帮助企业实现更高效、更灵活、更可靠的IT系统构建与管理。通过深入剖析容器化、微服务、持续集成/持续部署(CI/CD)等核心技术,结合具体案例,本文将展现云原生架构如何赋能企业数字化转型,推动业务创新与发展。 ####
79 47
|
2天前
|
Kubernetes Cloud Native 持续交付
云原生技术:重塑现代应用开发与部署模式####
本文深入探讨了云原生技术的核心概念、发展历程及其在现代软件开发和部署中的关键作用。通过分析云原生架构的特点,如容器化、微服务、持续集成与持续部署(CI/CD),以及它如何促进应用的可伸缩性、灵活性和效率,本文旨在为读者提供一个关于云原生技术全面而深入的理解。此外,还将探讨实施云原生策略时面临的挑战及应对策略,帮助组织更好地把握数字化转型的机遇。 ####
|
1天前
|
Kubernetes Cloud Native 持续交付
云计算的转型之路:云原生技术的崛起与实践####
【10月更文挑战第16天】 本文深入探讨了云原生技术在现代IT架构变革中的核心作用,不同于传统概述,本摘要将聚焦于云原生如何促进企业实现敏捷开发、弹性伸缩及高效运维,通过具体案例分析展现其在实际业务场景中的创新应用,揭示这一技术趋势对企业数字化转型的深远影响。 ####
13 2
|
2天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型加速的今天,云原生技术以其高效、灵活、可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生环境下微服务治理的策略与实践路径,旨在为读者提供一个系统性的微服务治理框架,涵盖从服务设计、部署、监控到运维的全生命周期管理,助力企业在云端构建更加稳定、高效的业务系统。 ####
|
6天前
|
敏捷开发 运维 Cloud Native
云端新篇章:云原生技术的崛起与实践
在数字化转型的浪潮中,云原生技术以其独特的优势成为企业实现敏捷开发、弹性扩展和高效运维的关键驱动力。本文将深入探讨云原生的概念、核心组件及其在不同行业的应用案例,揭示其如何赋能业务创新,引领云计算进入新纪元。
|
2天前
|
Cloud Native 持续交付 云计算
云原生技术在现代软件开发中的实践与挑战####
【10月更文挑战第15天】 本文深入探讨了云原生技术的定义、核心组件及其在现代软件开发中的应用,并分析了企业在实施过程中面临的主要挑战及应对策略。通过案例分析,揭示了云原生架构如何助力企业实现敏捷开发、高效运维和成本优化,同时指出了安全性、人才短缺和多云管理等关键问题,为读者提供了全面的理解和实用的建议。 ####
13 1
|
2天前
|
人工智能 Serverless API
云原生应用开发平台CAP:一站式应用开发及生命周期管理解决方案
阿里云的云应用开发平台CAP(Cloud Application Platform)是一款一站式应用开发及应用生命周期管理平台。它提供丰富的Serverless与AI应用模板、高效的开发者工具链及企业级应用管理功能,帮助开发者快速构建、部署和管理云上应用,大幅提升研发、部署和运维效能。
15 1
|
3天前
|
运维 监控 Cloud Native
云原生架构下,微服务治理的艺术与实践####
【10月更文挑战第14天】 在数字化转型的大潮中,云原生技术以其高效、灵活与可扩展性成为企业IT架构的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务治理的策略与实践,揭示了如何通过精细化管理提升系统的响应速度、稳定性和可维护性。不同于传统的摘要概述,本文摘要旨在直接触及读者关注的核心——即如何在复杂多变的云环境中,实现微服务的高效协同与治理,为读者提供一个清晰的行动指南。 ####
11 1
|
10天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与展望
【10月更文挑战第7天】随着技术的不断演进,云计算已从简单的资源租用模式转变为支持复杂、高效、灵活的云原生应用架构。本文将深入探讨云原生技术的核心概念及其在现代应用开发中的应用,通过分析Kubernetes容器编排和微服务架构的实践案例,揭示云原生技术如何推动软件开发的现代化进程。文章旨在为开发者和架构师提供一套实用的云原生应用开发指南,同时展望未来云原生技术的发展方向。
20 8