Kubernetes从零到精通(16-扩展-CRD、Custom Controller)

news2024/11/19 0:32:34

目录

一、简介

二、CRD

1.CRD介绍

2.CRD工作流程

三、Custom Controller

1.Custom Controller介绍

2.Custom Controller工作流程

四、示例

1.创建CR

2.配置权限RBAC

3.创建Custom Controller

3.1 Go项目初始化

3.2 main.go编写

3.3 构建镜像

3.4 部署Controller

4.测试CR和控制器

五、Kubebuilder示例

1.初始化项目

2.创建API和控制器        

3. 定义MyApp资源

4.生成CRD和代码 

5.实现控制器逻辑

6.部署控制器到集群

7.创建并测试MyApp资源


一、简介

        在Kubernetes中,有很多资源类型(例如Pod、Servie),这些资源是通过各种控制器来实现特定的功能(例如DeploymentController、ServiceController)。默认的功能可能不完全满足实际的需求(例如数据库集群的创建、扩缩容、备份、恢复等操作),所以,Kubernetes提供了让用户自定义资源和控制器的功能,借助这些功能,我们可以扩展Kubernetes的能力,实现类似原生资源的管理。

二、CRD

1.CRD介绍

        Custom Resource Definition(CRD)是Kubernetes中的一种API扩展机制。通过CRD,用户可以定义Kubernetes之前不存在的资源类型,并将其注册到Kubernetes API Server中,从而使其像Pod、Service这样的原生资源一样被管理和操作,当然也可以用kubectl进行管理。

        Custom Resource(CR)是由CRD定义出来的实际资源对象。CRD定义了CR的结构和行为,CR则是具体的数据实例。

2.CRD工作流程

        创建一个CustomResourceDefinition对象。

        Kubernetes API Server自动注册并开始处理这个新的API类型。

        用户可以使用这个新类型进行CRUD(创建、读取、更新、删除)操作,和内建的Kubernetes资源一样。

三、Custom Controller

1.Custom Controller介绍

        Kubernetes中的控制器是用来监控资源状态并确保集群最终状态符合声明的期望状态。对于自定义资源,Kubernetes不会自动为其提供内建的控制器,因此我们需要编写Custom Controller来管理这些自定义资源的状态。

2.Custom Controller工作流程

        监控一个或多个资源的事件(例如创建、更新、删除等)。

        根据事件更新资源的状态,或者执行一些操作以将资源状态调节到期望状态。

        控制器持续监控资源,确保状态始终如期望一致。

四、示例

        现在假设我们要创建一个自定义资源MyApp,并通过自定义控制器来管理它的副本数。

1.创建CR

        编写一个myapp-crd.yaml文件,用于定义自定义资源MyApp:

apiVersion: apiextensions.k8s.io/v1  #api
kind: CustomResourceDefinition   #CRD定义
metadata:
  name: myapps.example.com
spec:
  group: example.com       #自定义的api
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                replicas:
                  type: integer
            status:
              type: object
              properties:
                availableReplicas:
                  type: integer
  scope: Namespaced       #定制资源作用范围
  names:
    plural: myapps       #复数形式,操作定制资源时使用这个名称
    singular: myapp      #单数形式,操作定制资源时也可以使用这个名称
    kind: MyApp          #创建定制资源时使用这个名称
    shortNames:          
      - ma               #缩写形式,操作定制资源时也可以使用这个名称

        将此文件应用到 Kubernetes 集群中:

kubectl apply -f myapp-crd.yaml 

#检查是否存在该crd

kubectl get crd myapps.example.com

        到这里我们创建了一个MyApp类型的新API资源,可以用这个资源类型创建、更新和删除自定义的MyApp对象。 

2.配置权限RBAC

        控制器需要有权限访问Kubernetes资源(如自定义资源MyApp和原生的Deployment),因此需要为它设置适当的角色和权限。

        创建一个rbac.yaml文件,定义ServiceAccountRoleRoleBinding

apiVersion: v1
kind: ServiceAccount
metadata:
  name: myapp-controller
  namespace: default

---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: myapp-controller-role
rules:
- apiGroups: [""]
  resources: ["pods", "services"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["example.com"]
  resources: ["myapps"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: myapp-controller-rolebinding
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: myapp-controller-role
subjects:
- kind: ServiceAccount
  name: myapp-controller
  namespace: default

        应用这些RBAC资源:

kubectl apply -f rb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2177705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BaseCTF2024 个人WP

Pwn&#xff1a; [Week1] 签个到吧&#xff1a; 直接nc&#xff0c;ls&#xff0c;cat flag [Week1] echo&#xff1a; 只能使用echo命令 那就用echo *代替ls输出当前目录所有文件 用echo $(<flag)输出flag [Week1] Ret2text&#xff1a; 简单的栈溢出 from pwn impo…

10分钟,AI如何精准写出社会热点文?一篇爆款文章的背后你敢信?

本文背景 很多小伙伴们反馈&#xff0c;用AI输出的文章经常被平台判定为“疑似AI创作”&#xff0c;一但被判定&#xff0c;系统就不会给推荐流量。 到底在这个充斥着AI的大环境下&#xff0c;应该怎样完成AI文章的写作呢&#xff1f;特别是做流量主项目的小伙伴们&#xff0c;…

golang web笔记-3.响应ResponseWriter

简介 从服务器向客户端返回响应需要使用 ResponseWriter&#xff0c;ResponseWriter是一个接口&#xff0c;handler用它来返回响应。 ResponseWriter常用方法 Write&#xff1a;接收一个byte切片作为参数&#xff0c;然后把它写入到响应的body中。如果Write被调用时&a…

linux conda 安装 配置

linux conda 安装 配置 1. 下载2. 安装3. 配置&#xff08;针对非root用户&#xff0c;当前用户&#xff09; 1. 下载 网址&#xff1a;https://docs.anaconda.com/miniconda/ 下载一个.sh文件 2. 安装 命令&#xff1a;sh Miniconda3-latest-Linux-x86_64.sh 按照提示回车/…

【数据结构】什么是平衡二叉搜索树(AVL树)?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;AVL树的概念 &#x1f4cc;AVL树的操作 &#x1f38f;AVL树的插入操作 ↩️右单旋 ↩️↪️右左双旋 ↪️↩️左右双旋 ↪️左单旋 &#x1f38f;AVL树的删…

利用AI十分钟制作视频,暴涨4.7w粉丝,小白也能月入过万

今天给大家展示的项目是&#xff1a;AI动漫人物封面。 先来看一下教程方的广告&#xff1a; 蓝海赛道、AI翻唱 一周内获得了4.7万个粉丝&#xff0c;小白也可以轻松上手&#xff0c;月入过万手拿把掐。 现在利用AI创作 动漫 IP 翻唱音乐在全网悄然增多&#xff0c;流量也非常…

女性向游戏的新战场:AI陪伴系统

在数字化时代&#xff0c;游戏不再只是简单的娱乐产品&#xff0c;而是成为了人们情感寄托的重要载体。特别是对于女性玩家来说&#xff0c;游戏不仅仅是一种消遣&#xff0c;更是一种情感体验。近年来&#xff0c;女性向游戏市场逐渐崛起&#xff0c;其中“陪伴系统”成为了一…

【LeetCode】动态规划—931. 下降路径最小和(附完整Python/C++代码)

动态规划—931. 下降路径最小和 前言题目描述基本思路1. 问题定义2. 理解问题和递推关系3. 解决方法3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化4.1 空间复杂度优化 5. 小总结 代码实现Python3代码实现Python 代码解释C代码实现C 代码解释 总结: 前言 在算法的学习…

985官宣:19名本科生,获国自然项目!

9月24日&#xff0c;据复旦大学教务处消息&#xff0c;国家自然科学基金委公布了2024年国家自然科学基金青年学生基础研究项目&#xff08;本科生&#xff09;立项情况&#xff0c;复旦大学共有19名基础学科专业本科生获得国家自然科学基金委资助。 此前&#xff0c;据武汉大学…

VBA技术资料MF207:右键录入指定范围数据

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

比较器(算法中排序)

方式一&#xff1a;不常用 让实体类实现Comparable接口&#xff0c;泛型是需要比较的类型&#xff0c;同时重写compareTo方法 缺点&#xff1a;对代码有侵入性。 public class Student implements Comparable<Student> {private String name;private double score;// …

【YOLOv10改进[SPPF]】使用 SPPFCSPC替换SPPF模块 + 含全部代码和详细修改方式

本文将进行在YOLOv10中使用SPPFCSPC魔改v10 的实践,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 改进前和改进后的参数对比如下: 目录 一 SPPFCSPC 二 使用SPPFCSPC魔改v10的实践 1 整体修改 ① 添加SPPCSPC.py文件 ② 修改ultralytics/nn/tasks.py文件

java中使用selenium自动化测试

一、查看你Chrome浏览器的版本 在浏览器的地址栏&#xff0c;输入chrome://version/&#xff0c;回车后即可查看到对应版本 二、找到对应的chromedriver版本 2.1 114及之前的版本可以通过点击下载chromedriver,根据版本号&#xff08;只看大版本&#xff09;下载对应文件 2.…

运维监控平台:监控易如何实现运维高效管理与大规模监控

在快速变化的数字时代&#xff0c;运维团队正面临着前所未有的挑战。随着企业规模的扩大和IT架构的复杂化&#xff0c;运维团队需要管理的设备数量激增&#xff0c;对系统的稳定性和扩展性提出了更高要求。在这样的背景下&#xff0c;如何高效地进行设备监控&#xff0c;确保系…

pdf分割成多个文件怎么弄?这6个技巧教您学会pdf分割,一看就会!

pdf分割成多个文件怎么弄pdf文件分割成多个文件的需求在办公场景中非常常见。您是否也曾为处理含有多个页面的pdf文件而感到烦恼&#xff1f;不用担心&#xff01;在这篇文章中&#xff0c;小编将和大家分享六个简单易懂的技巧&#xff0c;教您如何轻松将pdf拆分成一页一页的单…

本省第一所!新大学,揭牌!

9月26日&#xff0c;海南艺术职业学院举行揭牌仪式&#xff0c;标志着海南省第一所公办艺术类高等职业院校正式揭牌成立。海南省旅文厅党组成员、副厅长刘成出席揭牌仪式&#xff0c;省教育厅党组成员、副厅长邢孔政在揭牌仪式上宣读省人民政府同意设立海南艺术职业学院的批复。…

【操作系统】三、内存管理:1.存储器管理(程序装入与链接;逻辑地址与物理地址空间;内存保护;交换与覆盖;分页管理方式;分段管理方式;段页式管理方式)

三、内存管理 文章目录 三、内存管理内存基础知识1.分类1.1按在计算机中的作用&#xff08;层次&#xff09;1.2按存储介质1.3按存取方式1.4按信息的可更改性1.5按信息的可保存性 2.存储器的性能指标 六、存储器管理&#xff08;内存管理基础&#xff09;0.内存保护1.程序到程序…

4--苍穹外码-SpringBoot项目中分类管理 详解

前言 1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客 2--苍穹外卖-SpringBoot项目中员工管理 详解&#xff08;一&#xff09;-CSDN博客 3--苍穹外卖-SpringBoot项目中员工管理 详解&#xff08;二&#xff09;-CSDN博客 4--苍穹外码-SpringBoot项目中分类管理 详…

webGL入门(四)绘制一个三角形

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><scri…