Kubernetes必备知识: Kubernetes API编程利器 Operator

简介: operator是描述、部署和管理kubernetes应用的一套机制,从实现上来说,operator=CRD+webhook+controller

所属技术领域:

K8s

|名词定义|

operator是描述、部署和管理kubernetes应用的一套机制,从实现上来说,operator=CRD+webhook+controller

|技术特点|

 常见operator工作模式
1.用户创建一个CRD
2.apiserver转发请求给webhook
3.webhook负责CRD的缺省值配置和配置项校验
4.controller获取到新建的CRD,处理“创建副本”等关联逻辑
5.controller实时检测CRD相关集群信息并反馈到CRD状态
图片.png

 Operator应用场景
在传统运维环境中,中间件都是基于非容器部署,我们往往会面对各种部署及运维需求:

  1. 备份&数据恢复。备份分为冷备和热备。冷备通常可以通过定时任务执行,对于即时的备份需求,大公司内部往往有成熟的平台支撑,但中小企业往往是运维人员手动执行操作,数据恢复也是如此
  2. 扩容。又分scaleup、scaleout。对于数据库,如果只是scaleout,增加从节点,相对较容易;但是如果是scaleup,升级主节点cpu、内存呢?往往涉及比较复杂的一系列运维操作,且风险极大
  3. 故障恢复。对于特定中间件,通常都有比较成熟的高可用集群部署方案,但对于运维而言,依然存在诸多问题。对于异常节点,如何恢复?对于不同中间件之间的依赖,如何处理?(比如断电重启中,hadoop对zk的依赖,hbase对hadoop的依赖等)
  4. 声明式部署。对于POC环境,单节点即可;对于生产环境,使用集群方式,节点数多少等等,都使用声明式地配置,通过helm/ansible方式一键安装
  5. 安全。网络访问限制、加密协议及秘钥管理等
  6. 版本升级。如何平滑升级,一直是部署运维人员面对有状态系统头疼的问题,所以通常这些系统比较稳定,一方面是自身问题,另一方面是升级困难风险高,不得不压住升级需求。
    以上场景都是可以通过Operator解决,使用方式上,只需要创建指定格式的K8S CRD即可,至于Operator内部如何执行具体的部署/运维逻辑,交付人员无需关心。

 Operator作用域
Operator比运维人员的人工判断要敏捷的多,它可以观测集群/应用的当前状态并在若干毫秒之内作出合理的运维决定。
Operator遵循如下成熟度模型:
图片.png

Helm通常用于Charts的部署于升级,Ansible则可以触及到应用的生命周期管理,而高级的Operator可以实现无缝升级、自动处理故障,真正达到Auto-pilot,自运维、自巡航。
 Operator与K8S Controller的关系
几个tips:
• 所有的Operator都是用了Controller模式,但并不是所有Controller都是Operator。只有当它满足: controller模式 + API扩展 + 专注于某个App/中间件时,才是一个Operator。
• Operator就是使用CRD实现的定制化的Controller. 它与内置K8S Controller遵循同样的运行模式(比如 watch, diff, action)
• Operator是特定领域的Controller实现
所以要了解Operator的工作原理,首先要先了解K8S controller的原理。控制器是一个永不终止的控制循环,它持续管理着集群的状态,通过apiserver获取系统的状态,并且不断尝试以达到预期状态,比如副本控制器,namespace控制器,service-accounts控制器,Ingress也是一个典型的Controller实现
图片.png

Informer和workqueue是两个核心组件。Controller可以有一个或多个informer来跟踪某一个resource。Informter跟API server保持通讯获取资源的最新状态并更新到本地的cache中,一旦跟踪的资源有变化,informer就会调用callback。把关心的变更的Object放到workqueue里面。然后woker执行真正的业务逻辑,计算和比较workerqueue里items的当前状态和期望状态的差别,然后通过client-go向API server发送请求,直到驱动这个集群向用户要求的状态演化。

|资料来源|

名词定义:https://blog.csdn.net/bbwangj/article/details/82355337
技术特点:https://www.jianshu.com/p/10a86e54309e
技术特点:https://coreos.com/operators/

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes 负载均衡 Java
k8s的出现解决了java并发编程胡问题了
Kubernetes通过提供自动化管理、资源管理、服务发现和负载均衡、持续交付等功能,有效地解决了Java并发编程中的许多复杂问题。它不仅简化了线程管理和资源共享,还提供了强大的负载均衡和故障恢复机制,确保应用程序在高并发环境下的高效运行和稳定性。通过合理配置和使用Kubernetes,开发者可以显著提高Java应用程序的性能和可靠性。
90 31
|
2月前
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
163 17
|
2月前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
2月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
4月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
7月前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
542 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
8月前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
8月前
|
Kubernetes Go Docker
在K8s编程中如何使用Go
一文带你了解在K8s编程中如何使用Go
165 3
|
7月前
|
IDE API 定位技术
Python--API编程:IP地址翻译成实际的物理地址
Python--API编程:IP地址翻译成实际的物理地址
140 0
|
8月前
|
Kubernetes Cloud Native Java
探索未来编程新纪元:Quarkus带你秒建高性能Kubernetes原生Java应用,云原生时代的技术狂欢!
Quarkus 是专为 Kubernetes 设计的全栈云原生 Java 框架,凭借其轻量级、快速启动及高效执行特性,在 Java 社区脱颖而出。通过编译时优化与原生镜像支持,Quarkus 提升了应用性能,同时保持了 Java 的熟悉度与灵活性。本文将指导你从创建项目、编写 REST 控制器到构建与部署 Kubernetes 原生镜像的全过程,让你快速上手 Quarkus,体验高效开发与部署的乐趣。
210 0

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等