K8S之自定义Controller

文章介绍了Kubernetes的声明式API如何确保集群状态与用户需求一致,以及控制器模式如何工作,确保API对象描述与集群状态同步。还详细阐述了如何通过自定义资源定义(CRD)创建和管理自定义资源,包括创建CRD的步骤以及如何编写自定义控制器来处理业务逻辑。Kubebuilder作为一个工具,简化了CRD和控制器的开发过程。
摘要由CSDN通过智能技术生成

简介

在此之前我们先来了解下kubernetes的两个概念"声明式API"和"控制器模式"。
"声明式API"核心原理就是当用户向kubernetes提交了一个API对象的描述后,Kubernetes会负责为你保证整个集群里各项资源的状态,都与你的API对象描述的需求相一致。而对于每个保存在etcd里的API对象,kubernetes都通过启动一种叫做"控制器模式"的无限循环,不断检查,然后调谐,最后确保整个集群的状态与这个API对象的描述一致。在kubernetes中,我们所熟悉的deployment\statefulset都是其自带的一些控制器。

k8s提供了强大了扩展能力来操作它里面的资源,
这些资源可以是内置资源,比如pod、node等,也可以自定义资源CRD。

对于自定义资源,稍微麻烦些,我们需要做如下几步:

  1. 自定义CRD

  2. 通过k8s提供的代码生成器自动生成基础代码

  3. 编写自己的业务逻辑,也就是自定义controller来操作CRD

对于内置资源,我们就只需第三步就可以了。

注:CRD+自定义controller又被称作operator
https://github.com/operator-framework/awesome-operators
" href="https://github.com/operator-framework/awesome-operators%2a%2a%2a">https://github.com/operator-framework/awesome-operators*

自定义CRD

比如我们想模仿pod的yaml那样自定义一个资源:

apiVersion: xxxx/v1beta1
kind: TsTest
metadata:
  name: tstest-sample
spec:
  # Add fields here
  deploymentName: tstest-sample-deployment
  replicas: 2

如果我们直接kubectl create 这个yaml文件会报错,因为k8s不认识这个资源,
那怎样才能让k8s识别我们的自定义资源呢,需要像下面这样创建一个自定义资源描述文件,标准格式如下:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  # 名字必需与下面的 spec 字段匹配,并且格式为 '<名称的复数形式>.<组名>'
  name: tst
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值