Kubernetes学习笔记-kubernetes应用扩展(1)-自定义API对象20230622

文章介绍了如何在Kubernetes中使用CustomResourceDefinitions(CRD)定义新的资源类型,以及创建和管理自定义资源实例。此外,还讨论了自定义控制器的作用,它能自动为自定义资源创建服务和web服务器pod,并在资源变化时作出响应。同时,文章提到了自定义对象的验证功能和通过自定义API服务器提供更高级的支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、CustomResourceDefinitions介绍

开发者只需要只需向kubernetes api服务器提交CRD对象,即可定义新的资源类型。成功提交CRD之后,就能通过API服务器提交JSON清单或者YAML清单的方式创建自定义资源,以及其他kubernetes资源实例

创建一个CRD对象

website-crd.yaml

apiVersion:apiextensions.k8s.io/v1beta1

kind:CustomResourceDefinition

metadata:

        name:websites.extensions.example.com

spec:

        scope:Namespaced

group:extensions.example.com

version:v1

names:

        kind:Website

        singular:website

        plural:website

命令行创建crd

$kubectl create -f website-crd-definition.yaml

创建自定义资源实例

一个自定义网站资源:kubia-website.yaml

apiVersion:extensions.example.com/v1

kind:Website

metadata:

        name:kubia

spec:

        gitRepo:https://github.com/luksa/kubia-website-example.git

 这个自定义资源的kind是website,而apiversion是由api组和你在crd中定义的版本号两部分组成的。

创建网站对象:

$kubectl create -f kubia-website.yaml 

检索自定义资源实例

$kubectl get websites

删除自定义资源实例

$kubectl  delete website kubia

注意:删除的是网站实例,而不是网站CRD资源。

2、使用自定义控制器自动定制资源

为了让你的网站对象运行在一个通过服务暴露的web服务器pod,需要构建和部署一个网站控制器,它能查看api服务器创建网站对象的过程,然后为每一个对象创建服务和web服务器pod

控制器将创建Deployment资源,而不是直接创建非托管pod,这样就能确保pod既能被管理,还能在遇到节点故障时继续正常工作。

使用网站控制器创建网站对象并创建Deployment和Service

了解网站控制器的功能

启动后,控制器立即开始通过以下URL 请求查看网站对象:

http://localhost:8080/apis/extensions.example.com/v1/websites?watch=true

通过识别主机名和端口,控制器不直接连接到API服务器,而是连接到kubectl proxy进程。该进程在同一个po中的sidecar容器中运行,并充当API服务器的ambassador。代理将请求转发给API服务器,并同时处理TLS加密认证。

通过HTTP GET请求打开链接,API服务器将针对任何网站对象的每个更改发送监听事件(watch event) 

每次创建新的网站对象时,API服务器都会发生ADDED监听事件。当控制器收到这样的事件时,就会在该监听事件所包含的网站对象中提取网站名称和Git存储库的url,然后将他们的json清单发布到api服务器,来创建Deployment和Service对象

Deployment资源包含一个具有两个容器的pod模版:其中一个容器运行nginx服务器,另一个容器则运行gitsync进程,用来保持本地目录与Git仓库的内容同步。本地目录通过一个emptyDir卷与nginx容器共享。作为一个NodePort Service,他通过每个节点上的随机端口公开你的web服务器pod(所有节点使用相同的端口)。这样,当Deployment对象创建一个pod时,用户既可以通过节点端口访问该网站。

当网站资源实例被删除时,API服务器还会发送DELETED监听事件。在收到监听事件厚,控制器就会删除之前创建的Deployment资源和Service资源。与此同时,控制器也会关闭并删除该网站提供服务的web服务器。

 3、验证自定义对象

在kubernetes1.8版本中,自定义对象的验证作为alpha特性被引入。如果想要让API服务器验证自定义对象,需要再API服务器中启用CustomResoureceValidation特性,并在CRD中指定一个JSON schema。

4、为自定义对象提供自定义API服务器

如果想要更好的支持在kubernetes中添加自定义对象,最好的方式是使用你自己的API服务器,并让他直接与客户端进行交互。

API服务器聚合

每个API服务器会负责存储他自己的资源,如上图,它可以云自己的etcd实例(或整个etcd集群),也可以通过创建CRD实例将其资源存储在核心API服务器的ectd存储中。在这种情况下,就需要先创建一个CRD对下,然后才能创建CRD实例。

注册一个自定义API服务器 

想要自定义API服务器添加到集群中,可以将其部署为一个pod并通过Service暴露。下一步,为了将它集成在主API服务中,需要部署一个描述APIService资源的YAML列表,如下代码:

APIService YAML定义

apiVersion:apiregistration.k8s.io/vbeta1

kind:APIService

metadata:

        name:v1alpha1.extensions.example.com

spec:

        group:extensions.example.com

        version:v1alpha1

        priority:150

        service:

                name:website-api

                namespace:default

创建以上代码 列表中的APIService资源后,被发送到主API服务器的包含extensions.example.com API组任何资源的客户端请求,会和v1alpha1版本号一起被转发到通过website-api Service公开的自定义API 服务器pod

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值