OCP的operator——(3)CRD

了解Operator

CRD

使用custom resource definition(CRD)来扩展Kubernetes API

Operator使用Kubernetes扩展机制,CRD,这样一来,由Operator管理的定制对象,其外观和行为就像内建的原生Kubernetes对象。本指南介绍了集群管理员如何通过创建和管理CRD来扩展其OCP集群。

CRD

在Kubernetes API中,资源(resource)是存储某一类API对象集合的endpoint。例如,内建的 pod 资源包含了 pod 对象集合。

CRD对象在集群中定义一个新的、唯一的对象类型,称为一个 kind ,并让Kubernetes API服务器处理其整个生命周期。

CR对象由集群管理员添加到集群中的CRD所创建,并支持所有集群用户在project中增加新的资源类型。

当集群管理员向集群中增加新的CRD时,Kubernetes API服务器的回应是新建一个RESTful资源路径,该资源路径可由整个集群或单个project(namespace)访问,并开始服务于指定的CR。

集群管理员如果要向其他用户授予CRD访问权限,可使用集群角色聚合来向用户授予 admineditview 默认集群角色访问权限。集群角色聚合允许将定制策略规则插入到这些集群角色中。此行为将新资源整合到集群的RBAC策略中,就像内建资源一样。

Operator会通过“将CRD与任何所需RBAC策略和其它软件特定逻辑一起打包”来使用CRD。集群管理员也可以手动将CRD添加到Operator生命周期之外的集群中,使其对所有用户都可用。

注意:虽然只有集群管理员可创建CRD,但具有CRD读写权限的开发人员也可通过现有CRD来创建CR。

创建CRD

先创建一个包含以下字段类型的YAML文件:

apiVersion: apiextensions.k8s.io/v1 # 1
kind: CustomResourceDefinition
metadata:
  name: crontabs.stable.example.com # 2
spec:
  group: stable.example.com # 3
  versions:
    name: v1 # 4
  scope: Namespaced # 5
  names:
    plural: crontabs # 6
    singular: crontab # 7
    kind: CronTab # 8
    shortNames:
    - ct # 9
  1. 使用 apiextensions.k8s.io/v1 API。

  2. 为定义指定名称。必须采用 <plural-name>.<group> 格式,并使用 groupplural 字段的值。

  3. 为API指定组名。API组是一个逻辑上相关的对象集。例如,批处理对象(比如 JobScheduledJob ),可置于批处理API组(比如 batch.api.example.com )。最好使用组织的FQDN(fully-qualified-domain name)。

  4. 指定URL中要用的版本名称。每个API组可能存在于多个版本中,例如 v1alphav1betav1

  5. 指定定制对象可用于某个project( Namespaced )还是集群中的所有project( Cluster )。

  6. 指定URL中要用的复数名称。 plural 字段与API URL中的资源相同。

  7. 指定单数名称,用于CLI上的别名,以及用于显示名称。

  8. 指定可创建的对象类型。类型可用驼峰命名法(CamelCase)。

  9. 指定与CLI中的资源相匹配的短字符串。

注意:默认情况下,CRD是集群范围的,可用于所有project。

创建CRD对象:

oc create -f <file_name>.yaml

一个新的RESTful API endpoint被创建于:

/apis/<spec:group>/<spec:version>/<scope>/*/<names-plural>/...

比如,对于上述示例文件,创建的endpoint是:

/apis/stable.example.com/v1/namespaces/*/crontabs/...

现在,就可使用该endpoint URL来创建和管理CR。对象类型是基于CRD对象的 spec.kind 字段。

为CRD创建集群角色

集群管理员可以给现有的集群范围的CRD授予权限。如果使用 admineditview 默认集群角色,可为其规则利用集群角色聚合。

注意:必须显式为每个角色分配权限。权限更多的角色不会继承权限较少角色的规则。如果要为某个角色分配规则,还必须将该动词分配给具有更多权限的角色。例如,如果要向 view 角色授予 get crontabs 的权限,必须也向 editadmin 角色授予该权限。adminedit 角色通常会分配给通过project模板创建project的用户。

为CRD创建集群角色定义文件。集群角色定义是一个YAML文件,其中包含了适用于各个集群角色的规则。OCP控制器会将指定的规则添加到默认集群角色中。

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1 # 1
metadata:
  name: aggregate-cron-tabs-admin-edit # 2
  labels:
    rbac.authorization.k8s.io/aggregate-to-admin: "true" # 3
    rbac.authorization.k8s.io/aggregate-to-edit: "true" # 4
rules:
- apiGroups: ["stable.example.com"] # 5
  resources: ["crontabs"] # 6
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete", "deletecollection"] # 7
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: aggregate-cron-tabs-view # 8
  labels:
    # Add these permissions to the "view" default role.
    rbac.authorization.k8s.io/aggregate-to-view: "true" # 9
    rbac.authorization.k8s.io/aggregate-to-cluster-reader: "true" # 10
rules:
- apiGroups: ["stable.example.com"] # 11
  resources: ["crontabs"] # 12
  verbs: ["get", "list", "watch"] # 13
  1. 使用 rbac.authorization.k8s.io/v1 API。
  2. 指定定义的名称。
  3. 指定该label来向 admin 默认角色授予权限。
  4. 指定该label来向 edit 默认角色授予权限。
  5. 指定CRD的组名。
  6. 指定适用于这些规则的CRD复数名称。
  7. 指定代表角色所获得的权限的动词。
  8. 同2。
  9. 指定该label来向 view 默认角色授予权限。
  10. 指定该label来向 cluster-reader 默认角色授予权限。
  11. 同5。
  12. 同6。
  13. 例如,对 adminedit 角色应用读写权限,对 view 角色应用只读权限。

创建集群角色:

oc create -f <file_name>.yaml
通过文件创建CR

为CR创建YAML文件。在下面的定义示例中, cronSpecimage 定制字段在 Kind: CronTab 的CR中设定。 Kind 来自CRD对象的 spec.kind 字段:

apiVersion: "stable.example.com/v1" # 1
kind: CronTab # 2
metadata:
  name: my-new-cron-object # 3
  finalizers: # 4
  - finalizer.stable.example.com
spec: # 5
  cronSpec: "* * * * /5"
  image: my-awesome-cron-image
  1. 指定CRD中的组名称和API版本(名称/版本)。
  2. 指定CRD中的类型。
  3. 指定对象的名称。
  4. 指定对象的结束程序(如果有的话)。结束程序可让控制器实现在删除对象之前必须完成的条件。
  5. 指定特定于对象类型的条件。
oc create -f <file_name>.yaml
检查CR
oc get <kind>

比如:

oc get crontab

资源名称不区分大小写,可用CRD中定义的单数或复数形式,也可使用简称。例如:

oc get crontabs
oc get crontab
oc get ct

查看CR的原始YAML数据:

oc get <kind> -o yaml

例如:

oc get ct -o yaml

输出示例:

apiVersion: v1
items:
- apiVersion: stable.example.com/v1
  kind: CronTab
  metadata:
    clusterName: ""
    creationTimestamp: 2017-05-31T12:56:35Z
    deletionGracePeriodSeconds: null
    deletionTimestamp: null
    name: my-new-cron-object
    namespace: default
    resourceVersion: "285"
    selfLink: /apis/stable.example.com/v1/namespaces/default/crontabs/my-new-cron-object
    uid: 9423255b-4600-11e7-af6a-28d2447dc82b
  spec:
    cronSpec: '* * * * /5' # 1
    image: my-awesome-cron-image # 2
  1. 用于创建对象的YAML的定制数据显示于此。
  2. 同上。

管理CRD中的资源

注:其内容貌似和前面都一样。不再赘述。

参考

  • https://access.redhat.com/documentation/en-us/openshift_container_platform/4.14/html-single/operators/index
  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值