k8s中的CRD是干什么用的?kubesphere中定义了哪些CRD?
1 个回答
用眼睛是看不到事物的本质的,只有心灵才能够洞察一切。林雪娇## **1. Kubernetes 中的 CRD(CustomResourceDefinition,自定义资源定义)** ### **1.1 CRD 的作用** Kubernetes 默认提供了一些内置 API 资源,比如 Pod、Service、Deployment、ConfigMap、Ingress,但在某些情况下,用户或扩展组件(如 KubeSphere)需要定义新的资源类型,以便 Kubernetes 可以像管理内置资源一样管理它们。 CRD(CustomResourceDefinition,自定义资源定义)就是 Kubernetes 提供的一种扩展机制,允许用户: 1. 定义新的 API 资源类型 2. 像管理 Pod/Service 一样管理自定义资源 3. 与 Kubernetes 原生 API 结合,实现自动化和扩展 ### **1.2 CRD 的工作方式** 1. 创建 CRD(定义新的 API 资源) - CRD 本质上是一个 Kubernetes 资源,存放在 `apiextensions.k8s.io` API 组 - 用户通过 `kubectl apply -f crd.yaml` 创建 CRD 2. CRD 定义新的 API 资源 - 比如,Kubernetes 默认没有 `MySQLCluster` 资源,但我们可以用 CRD 定义: ```yaml apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: mysqlclusters.example.com spec: group: example.com names: kind: MySQLCluster plural: mysqlclusters scope: Namespaced versions: - name: v1 served: true storage: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: replicas: type: integer ``` 3. 使用 CRD 资源 - 创建自定义资源 ```yaml apiVersion: example.com/v1 kind: MySQLCluster metadata: name: my-mysql spec: replicas: 3 ``` - 管理新资源 ```shell kubectl get mysqlclusters kubectl describe mysqlcluster my-mysql ``` ## **2. KubeSphere 中定义的 CRD** KubeSphere 通过 CRD 扩展 Kubernetes 的功能,引入了一些新的 API 资源,主要涵盖: - DevOps(流水线、构建、镜像管理) - 日志管理 - 监控 - 多租户管理 - 用户管理 - 告警 ### **2.1 查看 KubeSphere CRD** 使用以下命令可以列出所有 KubeSphere 相关的 CRD: ```shell kubectl get crd | grep kubesphere.io ``` **示例输出** ``` applications.app.k8s.io devops.kubesphere.io jenkins.kubesphere.io logging.kubesphere.io monitoring.kubesphere.io network.kubesphere.io iam.kubesphere.io tenant.kubesphere.io ``` ### **2.2 KubeSphere 主要 CRD 及其作用** | **CRD 名称** | **描述** | **作用** | |-------------|---------|--------| | `devops.kubesphere.io` | DevOps CI/CD | 允许 Kubernetes 管理 Jenkins 流水线(`Pipeline`、`PipelineRun`) | | `jenkins.kubesphere.io` | Jenkins 资源管理 | 允许 Kubernetes 与 Jenkins 交互,定义 Job | | `logging.kubesphere.io` | 日志管理 | 采集、存储、查询日志,支持 FluentBit、Elasticsearch | | `monitoring.kubesphere.io` | 监控 | 定义 `PrometheusRule`、`MonitorDashboard` | | `network.kubesphere.io` | 网络策略 | 管理 KubeSphere 的网络规则(NetworkPolicy) | | `iam.kubesphere.io` | 用户管理 | 定义 `User`、`Group`、`Role`,支持 RBAC 权限管理 | | `alerting.kubesphere.io` | 告警 | 允许 Kubernetes 定义告警规则(Prometheus 规则) | | `tenant.kubesphere.io` | 多租户 | 允许 Kubernetes 管理工作空间(Workspace)、企业空间 | ### **2.3 详细解析 KubeSphere 关键 CRD** #### **(1)DevOps(流水线管理)** KubeSphere DevOps 通过 `devops.kubesphere.io` 让 Kubernetes 支持 CI/CD 流水线。 **示例:`Pipeline` CRD** ```yaml apiVersion: devops.kubesphere.io/v1alpha3 kind: Pipeline metadata: name: my-pipeline namespace: devops spec: jenkinsfile: | pipeline { agent any stages { stage('Build') { steps { echo 'Building...' } } } } ``` - 创建流水线 ```shell kubectl apply -f pipeline.yaml ``` - 查看流水线 ```shell kubectl get pipelines -n devops ``` #### **(2)日志管理** KubeSphere 通过 `logging.kubesphere.io` 定义 `LogPipeline` CRD,支持采集 FluentBit 日志并存储到 Elasticsearch。 **示例:`LogPipeline` CRD** ```yaml apiVersion: logging.kubesphere.io/v1alpha2 kind: LogPipeline metadata: name: my-log-pipeline namespace: logging spec: output: elasticsearch: host: "http://elasticsearch.logging:9200" index: "kubesphere-logs" ``` #### **(3)用户管理** KubeSphere 通过 `iam.kubesphere.io` 定义 `User` CRD,管理 Kubernetes 用户和 RBAC 角色。 **示例:创建用户** ```yaml apiVersion: iam.kubesphere.io/v1alpha2 kind: User metadata: name: developer spec: email: "developer@example.com" roles: - workspace-viewer ``` - 查询用户 ```shell kubectl get users ``` #### **(4)监控(Prometheus)** KubeSphere 通过 `monitoring.kubesphere.io` 扩展 Kubernetes 监控。 **示例:`PrometheusRule` CRD** ```yaml apiVersion: monitoring.kubesphere.io/v1alpha2 kind: PrometheusRule metadata: name: high-cpu-alert spec: groups: - name: high-cpu rules: - alert: HighCPUUsage expr: rate(node_cpu_seconds_total[5m]) > 0.8 for: 5m ``` - 查看 Prometheus 规则 ```shell kubectl get prometheusrules ``` ## **3. 总结** ### **Kubernetes CRD(CustomResourceDefinition)的作用** - 允许扩展 Kubernetes API,定义新的资源类型。 - 让 Kubernetes 支持非原生资源,如 `MySQLCluster`、`Pipeline`、`LogPipeline` 等。 - CRD + Controller 组合,实现自动化运维。 ### **KubeSphere 主要 CRD** 1. `devops.kubesphere.io` → CI/CD 流水线管理 2. `logging.kubesphere.io` → 日志管理 3. `monitoring.kubesphere.io` → 监控 4. `iam.kubesphere.io` → 用户权限管理 5. `alerting.kubesphere.io` → 告警 6. `tenant.kubesphere.io` → 多租户发布于 2025-03-01 21:24 •IP属地 宁夏举报评论收藏
公众号进入网站体验更佳

