文章目录
- 前言
- 1、扩展方式
- 2、扩展架构图
- 3、使用CRD扩展Kubernetes API
- 4、高级主题
- 1、Validation(验证)
- 2、Category(分类)
有些场景,kubernetes内建的资源类型往往不能满足我们的需求,如redis集群初始化、扩容、缩容、备份等操作。
这时候就需要我们考虑如何去扩展kubernetes的API。
为了增强kubernetes的定制化功能,我们可以通过以下三种方式来扩展Kubernetes API:
1、修改kubenetes的apiserver源码:难度最大、kubernetes版本更新太快,兼容性很困难
2、自定义API server(Custom API server)并聚合到API(Aggregation)中:难度较大,需要开发能力
需要考虑的问题也不少:例如数据如何存储、API版本之间如何转换和支持等
3、1.7以下版本编写TPR,kubernetes1.7及以上版本用CRD
如图所示,用户对集群的请求首先到apiserver内部的Aggregator(聚合器),然后再到实际的apiserver模块。
上面提到的三种扩展方式,可以在图中清晰看到。
特别注意:
对于三种扩展方式的访问如何分配,这是基于kube-aggregator(APIservice)进行筛选的,可以理解成路由表、或者是nginx动静分离的效果。
CRD(Custom Resource Definition)在用法上和原生资源基本相同,都支持通过kubectl命令行或者API方式进行访问和操作。
正是CRD的灵活和强大,从另一方面催生k8s生态的快速发展。
CRD经常和对应的Operator配合出现,来完成一些复杂操作的封装。比如Prometheus Operator和Prometheus CRD,来部署和运维对应的Prometheus 实例
1、首先,我们先创建自定义资源类型:编辑resourcedefinition.yaml
2、apply配置文件

3、创建自定义资源的对象:my-new-cron-object.yaml,其中kind引用上面自定义的资源类型:CronTab,并apply
4、查看自定义资源类型上的pod资源,此时你可以像查看别的原生基础资源那样进行相关操作了。
5、你可以也可以使用我们定义的shortNames来获取信息
在项目中用自定义资源对象时,如果创建自定义资源时某些字段不符合要求,会导致监听该资源对象的异常和报错
通过 OpenAPI v3 schema和ValidatingAdmissionWebhook验证自定义对象是否符合标准。
1、在自定义资源类型CronTab中,定义crontabs-crd-with-validation.yaml,新增Validation(验证)功能
你也可以通过以下命令,查看openAPIV3Schema的语法结构
2、编辑crontabs-with-invalid-field.yaml,引用kind: CronTab,并设置非法userID,验证Validation(验证)功能是否work,并apply
3、这时候发现Validation(验证)已经生效,拦截了pod初始化和运行
以下示例将CustomResourceDefinition添加至all的类别列表,并说明如何使用 kubectl get all输出自定义资源 。
1、首先,编辑resourcedefinition-with-category.yaml,并apply
API配置:kubectl explain CustomResourceDefinition.spec.names.categories
2、接着,编辑my-crontab.yaml,并apply
3、使用kubectl get all,这时候就可以看到我们自定义的Crontab类型资源了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/168026.html