SREWorks云原生数智运维工程实践-Kubernetes 资源编排之四:CRD+Operator 篇(下)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
资源编排,不限时长
简介: SREWorks云原生数智运维工程实践-

四、 大数据通用Operator设计与实践

 

上文讲述了operator实现的复杂性。不过,我们发现,越是这样复杂的应用,越是会有一些共通性:因为这些复杂应用基本都是分布式应用,只是在某些状态或部署顺序上的有些特殊需求。于是,我们针对这个现状,开发了一款通用的大数据Operator。

 

这个通用Operator的架构设计如下:

 

image.png

 

与市面上常见的golang编写的operator不同的是,我们鼓励用户不编写代码,而是直接用yaml来描述控制逻辑,按照感知/决策/执行三大环节来进行控制器的逻辑分解和编排设计。同时,因为有这几个环节抽象的辅助,用户在设计operator的时候能够更有目的性,对于复杂场景,不引入过多的复杂逻辑流,尽量用无状态的方式解决问题。

 

同时,我们还借鉴了前端框架React中的VirtualDOM的设计,在云原生场景下,引入了VirtualResource这样的一个概念。VirtualResource能够将云原生对象资源映射进行Operator的内存数据库中,让控制器能够用SQL语法快速查询和操作这些资源对象,简化Reconcile调和场景的逻辑复杂性。对照React框架中生命周期的概念,VirtualResource也存在生命周期的概念,用户能够控制在资源变化的不同阶段,追加一些自定义的运维描述动作。

 

我们在大量使用helm的情况下,发现golang template语法在进行模板渲染的时候,还是不够灵活。于是我们把整体架构栈切换到python,采用jinja2进行控制器的语法渲染,同时我们也保留helm在渲染框架中,用户能够无缝切换两种渲染引擎。

 

这个通用Operator的控制器将原本需要golang编写的控制层逻辑,简化成使用cmd指令+yaml资源的方式进行描述。控制器的描述示例如下:通过helm将vvp这个应用的所有yaml下发,监听service的状态变化,同步更新ingress资源的状态。

 

 

default:

  def: crd.yaml

  deploy:

    - cmd: helm

      chart: vvp/vvp

      values: vvp/values.yaml

  maintain:

    - watch:

        category: ResourceDidChange

        kind: Service

        apiVersion: v1

      action:

        - cmd: kube-patch

          file: ingressUpdate.yaml

        

 

 

五、 总结

 

对于承载组件Component这个概念而言CRD+Operator可以说是最为复杂的,但是又是最万能的,如果Helm或者Kustomize无法满足需求,Operator基本上是唯一的选择。另一方面来说,CRD+Operator一般又会和Helm/Kustomize相辅相成一起出现,最难搞的事情通过Operator与apiserver交互解决,剩下的胶水粘合,各种YAML拼接之类的交给Helm/Kustomize搞定。

 

同时,我们也可以看出,CRD+Operator是云原生演进时期的方案,特别适合原本非k8s的软件架构来适配k8s环境。那些原本就在k8s云原生架构下出现的软件,会逐渐淡化Operator这个概念所有的工作负载都有对应的资源定义CRD,他们都有能力和k8s apiserver交互。

 

对于承载SREWorks中的应用Application这个概念而言,Operator是不合适的,无他,太复杂了。一般来说,Operator只要管好自己这个独立功能在K8S中的生命周期就已经足够了。从目前的社区方向来看,Operator不会作为一整个业务场景应用解决方案去裸提供,而是与Helm/Kustomize/KubeVela/AppManager等集成并作为一个整体组件or应用对外发布。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7天前
|
运维 监控 测试技术
自动化运维实践:CI/CD流程详解
【6月更文挑战第30天】CI/CD实践推动软件开发自动化,通过持续集成确保代码质量,自动部署提升交付速度。核心流程包括:代码管理(Git等)、自动化构建与测试、代码审查、部署。关键点涉及选择工具、测试覆盖率、监控及团队协作。采用CI/CD能减少错误,但需应对挑战,如工具选型、全面测试和团队沟通。
|
4天前
|
Prometheus Kubernetes Cloud Native
云原生周刊:Argo Rollouts 支持 Kubernetes Gateway API 1.0 | 2024.7.1
探索开源世界:Kubetools的推荐系统[Krs](https://github.com/kubetoolsca/krs)助力K8s优化,追踪K8s组件清单,指引IAC集成。阅读建议: Prometheus与Thanos的进化故事,Adidas容器平台管理经验,K8s请求实现详解。关注云原生:Argo Rollouts支持Gateway API 1.0,Kubewarden v1.14强化策略与镜像安全。
|
7天前
|
运维 监控 Devops
DevOps实践:构建高效运维流程
【6月更文挑战第29天】在现代软件开发周期中,DevOps已成为推动开发和运维团队紧密合作的重要哲学。本文将探讨如何通过DevOps实践来构建一个更高效的运维流程,从而提升软件交付速度、提高产品质量,并确保系统的稳定性和安全性。我们将从持续集成、自动化测试、配置管理、容器化部署、监控与告警等关键方面入手,深入分析DevOps实施过程中的关键环节及其对运维工作的影响。
24 3
|
10天前
|
存储 人工智能 运维
自动化运维工具链的搭建与实践
【6月更文挑战第26天】在当今快速迭代的技术环境下,自动化运维成为保障服务稳定性和提升工作效率的重要手段。本文将深入探讨如何搭建一套高效的自动化运维工具链,包括工具选择、配置管理、持续集成与部署等关键环节,并分享实践中的经验教训。通过实例分析,本文旨在为读者提供一条清晰的自动化运维实施路径,助力企业快速适应市场变化,提升竞争力。
20 4
|
8天前
|
运维 Kubernetes 安全
自动化运维在现代IT架构中的角色与实践
【6月更文挑战第28天】随着企业对信息技术的依赖日益加深,高效、可靠的运维体系变得至关重要。本文将探讨自动化运维如何优化现代IT架构,提升运维效率和系统稳定性。我们将从实际案例出发,分析自动化工具的选择、部署策略以及面临的挑战,为读者提供一套可行的自动化运维解决方案。
|
10天前
|
Prometheus 监控 Kubernetes
深入理解Prometheus: Kubernetes环境中的监控实践
Kubernetes简介 在深入Prometheus与Kubernetes的集成之前,首先简要回顾一下Kubernetes的核心概念。Kubernetes是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。它提供了高度的可扩展性和灵活性,使得它成为微服务和云原生应用的理想选择。 核心组件 • 控制平面(Control Plane):集群管理相关的组件,如API服务器、调度器等。 • 工作节点(Nodes):运行应用容器的机器。 • Pods:Kubernetes的基本运行单位,可以容纳一个或多个容器。
|
12天前
|
Kubernetes Cloud Native Shell
云原生 - K8s命令合集
云原生 - K8s命令合集
16 0
|
12天前
|
存储 Kubernetes Cloud Native
云原生 - Kubernetes基础知识学习
云原生 - Kubernetes基础知识学习
20 0
|
2月前
|
运维 Linux 程序员
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
|
1月前
|
运维 Linux Shell
运维:Linux服务器崩了怎么办,快来看看这份”急救命令指南“吧!
当服务器出现问题,如崩溃、内存耗尽或CPU使用率过高时,运维工程师需要保持冷静,并通过一系列Shell命令来诊断和解决。首先,检查是否有异常SSH登录活动,查看`/etc/passwd`和`.bash_history`文件,以及用户最近的登录信息。接着,监控网络连接和端口,使用`netstat`和`lsof`命令找出资源占用高的进程,并查看进程启动时间和详细信息。同时,排查可能的恶意文件,检查定时任务和服务配置以确保没有异常启动项。最后,分析系统日志,如`/var/log`目录下的各种日志文件,找出潜在问题。通过这些步骤,可以有效定位和解决服务器故障。

热门文章

最新文章