OCP的operator——(3)CRD

2024-02-17 16:52
文章标签 ocp operator crd

本文主要是介绍OCP的operator——(3)CRD,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 了解Operator
    • CRD
      • 使用custom resource definition(CRD)来扩展Kubernetes API
        • CRD
        • 创建CRD
        • 为CRD创建集群角色
        • 通过文件创建CR
        • 检查CR
      • 管理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 # 3versions:name: v1 # 4scope: Namespaced # 5names:plural: crontabs # 6singular: crontab # 7kind: CronTab # 8shortNames:- 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对象:

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 # 2labels:rbac.authorization.k8s.io/aggregate-to-admin: "true" # 3rbac.authorization.k8s.io/aggregate-to-edit: "true" # 4
rules:
- apiGroups: ["stable.example.com"] # 5resources: ["crontabs"] # 6verbs: ["get", "list", "watch", "create", "update", "patch", "delete", "deletecollection"] # 7
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: aggregate-cron-tabs-view # 8labels:# Add these permissions to the "view" default role.rbac.authorization.k8s.io/aggregate-to-view: "true" # 9rbac.authorization.k8s.io/aggregate-to-cluster-reader: "true" # 10
rules:
- apiGroups: ["stable.example.com"] # 11resources: ["crontabs"] # 12verbs: ["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 # 3finalizers: # 4- finalizer.stable.example.com
spec: # 5cronSpec: "* * * * /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/v1kind: CronTabmetadata:clusterName: ""creationTimestamp: 2017-05-31T12:56:35ZdeletionGracePeriodSeconds: nulldeletionTimestamp: nullname: my-new-cron-objectnamespace: defaultresourceVersion: "285"selfLink: /apis/stable.example.com/v1/namespaces/default/crontabs/my-new-cron-objectuid: 9423255b-4600-11e7-af6a-28d2447dc82bspec:cronSpec: '* * * * /5' # 1image: 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

这篇关于OCP的operator——(3)CRD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/718418

相关文章

Flink 原理与实现:Operator Chain原理

硬刚大数据系列文章链接: 2021年从零到大数据专家的学习指南(全面升级版) 2021年从零到大数据专家面试篇之Hadoop/HDFS/Yarn篇 2021年从零到大数据专家面试篇之SparkSQL篇 2021年从零到大数据专家面试篇之消息队列篇 2021年从零到大数据专家面试篇之Spark篇 2021年从零到大数据专家面试篇之Hbase篇

Flink: 两个递归彻底搞懂operator chain

《2021年最新版大数据面试题全面开启更新》 operator chain是指将满足一定条件的operator 链在一起,放在同一个task里面执行,是Flink任务优化的一种方式,在同一个task里面的operator的数据传输变成函数调用关系,这种方式减少数据传输过程。常见的chain例如:source->map->filter,这样的任务链可以chain在一起,那么其内部是如何决定

Oracle OCP认证值得考吗? 需要门槛吗?

随着数据量的爆炸性增长和企业对数据依赖性的提升,对数据库专业人士的需求也在不断上升。OCP认证,作为Oracle公司提供的权威认证之一,长期以来被视为数据库专业人士技能和知识水平的重要标志。 但随着技术的发展和认证种类的增多,疑问也在不断出现:在当前的市场环境下,OCP认证还值得考吗?考取这一认证又需要满足哪些条件? 今天就来聊聊有关OCP的这些问题,让你不再困惑。   01 还值得考吗?

开闭原则 OCP

开闭原则,当业务逻辑需要改动时,在不修改原来代码的情况下,进行功能扩展

C++ std::set<,> operator怎么用

std::set 不重复key默认less排序 STL中的关联容器: std::set template<class Key,class Compare = std::less<Key>,class Allocator = std::allocator<Key>> class set; std::set 是关联容器,含有 Key 类型对象的已排序集。 它的key就是value

Java Operator SDK

Java Operator SDK 生成项目骨架快速入门模式和最佳实践使用示例Operators实现示例OperatorQuarkusSpring Boot Operators 代表Kubernetes管理集群和非集群资源。这个Java Operator SDK (JOSDK) 旨在通过使用一个对Java开发人员来说应该感觉自然的API,使编写Kubernetes操作员变得尽可能

0基础学习Python路径(40)operator模块

operator 模块 operator 模块提供了一套与 Python 的内置运算符对应的高效率函数。 函数的种类 函数包含的种类有:对象的比较运算、逻辑运算、数学运算和序列运算 比较运算 运算函数语法小于lt(a, b)a < b小于等于le(a, b)a <= b大于gt(a, b)a > b大于等于ge(a, b)a >= b等于eq(a, b)a == b不等于ne(a, b)

孙鑫视频学习:“operator +=” 不明确的问题解决方法

在基于单文档应用程序的MFC程序中,在OnChar函数中使用m_strLine+=nChar时,出现了error C2593:“operator +=”不明确的错误,如下解决方法,亲测可用:   将m_strLine+=nChar改为m_strLine+=char(nChar)或m_strLine+=(char)nChar   因为:在OnChar函数的参数中,nChar是UINT类型的。

C++map容器中operator[ ]的实现原理

目录 一、operator[ ]函数介绍 二、insert函数介绍 三、operator[ ]函数实现原理 四、operator[ ]函数功能 一、operator[ ]函数介绍 mapped_type& operator[] (const key_type& k); 在map容器中存储的是一个键值对value_type,其本质是pair<const key_type,

new 和operator new

参考 1、http://blog.csdn.net/wudaijun/article/details/9273339 2、http://www.cnblogs.com/luxiaoxun/archive/2012/08/10/2631812.html new 、operator new 和 placement new <—-> new( (void*)pBuf) ClassObj(obj)