跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kubernetes自定义资源
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:Kubernetes自定义资源}} {{Note|本文适用于Kubernetes初学者及需要扩展自动化知识的开发者。}} == 概述 == '''Kubernetes自定义资源(Custom Resource, CR)'''是Kubernetes API的扩展机制,允许用户定义自己的资源类型,而无需修改Kubernetes核心代码。通过自定义资源,用户可以将特定领域的对象(如数据库配置、CI/CD流水线等)作为Kubernetes原生资源管理,实现与Pod、Deployment等内置资源一致的声明式操作。 自定义资源通常与'''自定义控制器(Custom Controller)'''结合使用,形成完整的'''Operator模式''',实现自动化运维逻辑。 == 核心概念 == === 自定义资源定义(CRD) === 自定义资源通过'''CustomResourceDefinition(CRD)'''声明其结构。CRD定义了资源的API组、版本、名称及其字段规范(通过OpenAPI v3 Schema)。 以下是一个CRD示例,定义一个名为`CronTab`的资源: <syntaxhighlight lang="yaml"> apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: crontabs.stable.example.com spec: group: stable.example.com versions: - name: v1 served: true storage: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: cronSpec: type: string image: type: string scope: Namespaced names: plural: crontabs singular: crontab kind: CronTab shortNames: - ct </syntaxhighlight> * '''group/version''':定义API的组和版本(如`stable.example.com/v1`)。 * '''schema''':指定资源的字段约束(如`cronSpec`必须为字符串)。 * '''names''':定义资源在CLI和API中的名称(如`kubectl get crontab`)。 === 自定义资源实例 === 创建上述CRD后,用户可实例化`CronTab`资源: <syntaxhighlight lang="yaml"> apiVersion: stable.example.com/v1 kind: CronTab metadata: name: my-crontab spec: cronSpec: "* * * * */5" image: my-cron-image </syntaxhighlight> == 工作原理 == <mermaid> graph LR CRD[CustomResourceDefinition] -->|定义| API[Kubernetes API] User -->|创建| CR[Custom Resource] Controller -->|监听| CR Controller -->|执行逻辑| Cluster </mermaid> 1. **CRD注册**:将自定义资源的Schema注册到Kubernetes API。 2. **资源操作**:用户通过`kubectl`或API创建/更新/删除自定义资源。 3. **控制器监听**:自定义控制器监听资源变化并触发业务逻辑(如创建Pod)。 == 实际案例:数据库自动化 == 假设需要自动化管理PostgreSQL实例,可定义以下资源: <syntaxhighlight lang="yaml"> apiVersion: db.example.com/v1 kind: PostgreSQL metadata: name: prod-db spec: replicas: 3 storage: 100Gi version: "14" </syntaxhighlight> 自定义控制器会: 1. 创建StatefulSet和Service。 2. 根据`replicas`值扩展副本。 3. 在版本变更时执行滚动升级。 == 高级主题 == === 验证与默认值 === 通过CRD的`schema`字段可实现字段验证和默认值: <syntaxhighlight lang="yaml"> schema: openAPIV3Schema: type: object properties: spec: type: object required: [cronSpec] properties: cronSpec: type: string pattern: '^(\*|[\d,/-]+)\s+(\*|[\d,/-]+)\s+(\*|[\d,/-]+)\s+(\*|[\d,/-]+)\s+(\*|[\d,/-]+)$' image: type: string default: "alpine:latest" </syntaxhighlight> === 子资源 === 支持`status`和`scale`子资源以实现状态报告和扩缩容: <syntaxhighlight lang="yaml"> subresources: status: {} scale: specReplicasPath: .spec.replicas statusReplicasPath: .status.replicas </syntaxhighlight> == 数学表达 == 在控制器中,副本数计算可能涉及公式: <math> \text{实际副本数} = \max(\text{spec.replicas}, \text{minReplicas}) </math> == 总结 == * 自定义资源扩展了Kubernetes API,支持领域特定模型。 * 结合控制器实现自动化运维(Operator模式)。 * 通过CRD定义资源结构和验证规则。 {{Tip|使用`kubectl explain crd.spec`查看CRD字段的详细说明。}} [[Category:集成部署]] [[Category:Kubernetes]] [[Category:Kubernetes自动化]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:Note
(
编辑
)
模板:Tip
(
编辑
)