带你读《云原生应用开发 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应用。

相关文章
|
2月前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
2月前
|
Cloud Native 安全 持续交付
构建未来:云原生架构的演进与实践
【2月更文挑战第30天】 随着数字化转型的深入,企业对于信息技术的需求日益复杂化和动态化。传统的IT架构已难以满足快速迭代、灵活扩展及成本效率的双重要求。云原生技术作为解决这一矛盾的关键途径,通过容器化、微服务、持续集成/持续部署(CI/CD)等手段,实现了应用的快速开发、部署及运维。本文将探讨云原生架构的最新发展,分析其如何助力企业构建更加灵活、高效的业务系统,并结合实际案例,展示云原生转型过程中的最佳实践和面临的挑战。
|
9天前
|
Kubernetes 监控 Cloud Native
构建未来:云原生架构的演进与实践
【4月更文挑战第30天】 随着数字化转型的不断深入,企业对IT基础设施的要求日益提高。云原生技术以其独特的弹性、可扩展性和敏捷性成为推动现代应用开发的关键动力。本文将探讨云原生架构的核心组件、实施策略以及面临的挑战,旨在为读者提供一个关于如何有效构建和部署云原生应用的全面视角。
|
10天前
|
Cloud Native Devops 持续交付
构建未来应用:云原生架构在现代企业中的实践与挑战
【4月更文挑战第29天】 随着数字化转型的加速,企业正迅速转向云计算以支撑其业务敏捷性和创新。云原生技术,作为推动这一转型的关键因素,正在重新定义软件开发和运维模式。本文将深入探讨云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)以及DevOps文化,并分析这些技术如何帮助企业实现弹性、可扩展和高效的应用部署。同时,我们将讨论在采纳云原生实践中所面临的挑战,包括安全性、治理和人才缺口等问题。
|
10天前
|
运维 Cloud Native Devops
构建未来应用:云原生架构的演进与实践
【4月更文挑战第29天】在数字化转型的浪潮中,企业亟需灵活、高效的技术支撑来应对市场的快速变化。云原生架构以其独特的设计理念和技术栈,成为推动这一变革的关键力量。本文深入探讨了云原生的核心概念、关键技术和实施策略,旨在为企业提供一个清晰的云原生转型蓝图,助力其构建更加动态、可扩展的应用系统。
|
10天前
|
Kubernetes Cloud Native 持续交付
构建未来:云原生架构在现代企业中的应用与实践
【4月更文挑战第29天】 随着数字化转型的浪潮席卷各行各业,企业对于信息技术基础设施的要求日益提高。传统的IT架构已难以满足快速迭代、灵活扩展和持续创新的需求。本文聚焦于云原生架构,一种为云计算环境量身打造的设计理念和技术集合,旨在帮助企业构建更加灵活、可靠和高效的系统。通过对云原生核心组件的解析、实施策略的探讨以及成功案例的分析,我们揭示了云原生架构如何助力企业在竞争激烈的市场中保持领先地位。
|
15天前
|
人工智能 边缘计算 Cloud Native
云原生架构的未来展望与实践挑战
【4月更文挑战第24天】在数字化转型的浪潮中,云原生架构以其高度灵活、可扩展的特点成为企业技术战略的核心。本文深入探讨了云原生技术的最新发展趋势,分析了在实际部署和运维过程中面临的挑战,并提出了相应的解决方案。通过实例分析,本文旨在为企业实施云原生架构提供参考和指导。
|
15天前
|
Cloud Native Devops 持续交付
构建未来:云原生技术在现代IT架构中的演进与实践
【4月更文挑战第24天】 随着企业数字化转型的深入,云原生技术正成为推动创新和敏捷性的关键技术。本文聚焦于云原生技术的发展历程及其在现代IT架构中的应用,探讨了如何利用容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等核心概念来优化资源利用率,提高系统弹性,并加速产品上市时间。通过分析多个行业案例,文章揭示了云原生实践对企业竞争力的显著影响,并提出了面向未来的IT架构战略建议。
|
25天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
23 4
|
1月前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在现代业务中的应用与实践
【4月更文挑战第7天】 随着数字化转型的浪潮不断推进,企业对于敏捷性、可扩展性和成本效益的需求日益增长。本文将探讨云原生架构如何应对这些挑战,提供一种创新的解决方案。我们将深入分析云原生的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)和DevOps文化,以及它们如何共同作用以支持业务的快速迭代和弹性运营。通过具体案例研究,本文揭示了采用云原生方法可以带来的商业价值和技术优势,并提供了实施云原生策略的实用建议。
20 1

热门文章

最新文章