首页 > 其他分享 >Kubernetes从零到精通(16-扩展-CRD、Custom Controller)

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

时间:2024-09-30 12:21:45浏览次数:8  
标签:自定义 Kubernetes 16 Custom Controller CRD 资源

目录

一、简介

二、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资源:

ku

标签:自定义,Kubernetes,16,Custom,Controller,CRD,资源
From: https://blog.csdn.net/fzw1030/article/details/142639109

相关文章

  • 9.16日报
    今天为开学第二周,第二周软件需求分析,老师进行了开学测试,测试了大数据,让我知道了自己很多的不足。以下为今日测试部分代码:<%@pagecontentType="text/html;charset=UTF-8"language="java"%><!DOCTYPEhtml><htmllang="zh"><head><metacharset="UTF-8......
  • “16*16逐行式顺向阴码”转“16*16列行式逆向阴码”字模C代码
    前段时间做的项目,从HZK16字库中读取的字模数据是16*16逐行式顺向格式的,传输给客户的设备无法显示,他们那边不能改变OLED屏显示的方式,所以写了一个简单的字模转换算法;HZK16的读取网上一搜就是一大堆,所以这里就不贴这串代码了;测试的时候可以使用PCtoLCD工具生成两种不同格式的字模......
  • 【leetcode】169.多数元素
    boyer-moore算法最简单理解方法:假设你在投票选人如果你和候选人(利益)相同,你就会给他投一票(count+1),如果不同,你就会踩他一下(count-1)当候选人票数为0(count=0)时,就换一个候选人,但因为和你利益一样的人占比超过了一半不论换多少次,最后留下来的都一定是个和你(利益)相同的人。代码:......
  • [leetcode]516_最长回文子序列
    给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例1:输入:s="bbbab"输出:4解释:一个可能的最长回文子序列为"bbbb"。示例2:输入:s="cbbd"输出:2解释:一个......
  • 《最终幻想16》游戏启动时崩溃弹窗“找不到api-ms-win-core-com-l1-1-0.dll”文件该怎
    当启动《最终幻想16》时,游戏崩溃并弹窗显示“找不到api-ms-win-core-com-l1-1-0.dll”文件,这严重影响了游戏体验。现在为您细致剖析修复此问题的具体方法,助您顺利解决,畅玩游戏。本篇将为大家带来《最终幻想16》游戏启动时崩溃弹窗“找不到api-ms-win-core-com-l1-1-0.dll”文件......
  • 南沙C++信奥赛陈老师解一本通题 1973:【16NOIP普及组】买铅笔
    ​ 【题目描述】P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起见,P老师决定只买同一种包装的铅笔。商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过n支铅笔才够给小......
  • 通讯过程中16进制字符和byte[]/十进制和16进制转换(一)
    ///<summary>///16进制字符转为字节流///</summary>///<paramname="str"></param>///<paramname="fromBase"></param>///<returns></returns>......
  • 16.微服务hystrix解析部署使用全流程
    目录1、什么是hystrix?2、Hystrix作用3、Hystrix使用场景4、准备工作5、应用1、引入依赖2、开启Hystrix3、添加熔断6、添加仪表盘【了解,功能单一使用少】添加依赖添加配置类HystrixConfig启动项目,访问如下地址​编辑注意:1、什么是hystrix?是一个做熔断的框架......
  • CF1648D Serious Business题解
    题目链接关键:DP状态的设计\(dp[i]\)表示走到\((2,i)\)的最小价值。转移分类讨论只用一个区间\(i\)从\([li,x]\)选择位置向下拐\(dp[i]=max_{li\lek\lex}(sum[1][k]+sum[2][x]-sum[2][k-1]+v[i])\)使用别的区间显然转移点小于\(li\),不然用一个区间即可。\(dp[i]=max_......
  • 推出TMS320VC5416GWS120、TMS320VC5416PGE160、TMS320VC5416ZWS160定点数字信号处理器
    系列概述:TMS320VC5416定点数字信号处理器(DSP)基于先进的改进型哈佛架构打造,具有一条程序存储器总线和三条数据存储器总线。该处理器采用具有高并行能力的算术逻辑单元(ALU)、特定于应用的硬件逻辑、片上存储器和附加片上外设。高度专业化的指令集是TMS320VC5416操作灵活性和速度的基......