Hello everyone,
I’m working on setting up Kubernetes Custom Resource Definitions (CRDs) for various use cases in my cluster. I’m aiming to cover both simple and complex scenarios. Any tip, tool to do it easily?.Simple Use Cases:
Custom Metrics CRD:
Use Case: Define custom metrics for autoscaling Kubernetes resources.
Example: A CRD defining a custom metric named request-per-second for autoscaling based on incoming HTTP requests.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: custommetrics.example.com
spec:
group: example.com
names:
kind: CustomMetric
listKind: CustomMetricList
plural: custommetrics
singular: custommetric
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
request-per-second:
type: integer
Custom Metrics Instance Creation (Request per Second):
apiVersion: example.com/v1
kind: CustomMetric
metadata:
name: example-metric
spec:
request-per-second: 100
Database Backup CRD:
Use Case: Define a CRD for scheduling backups of databases.
Example: A CRD defining a backup resource for MySQL databases.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: databasebackups.example.com
spec:
group: example.com
names:
kind: DatabaseBackup
listKind: DatabaseBackupList
plural: databasebackups
singular: databasebackup
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
database:
type: string
schedule:
type: string
Database Backup Instance Creation:
apiVersion: example.com/v1
kind: DatabaseBackup
metadata:
name: mysql-backup
spec:
database: mysql-production
schedule: "0 0 * * *"
Monitoring Alert CRD:
Use Case: Define custom alerts for monitoring systems.
Example: A CRD defining an alert resource for Prometheus.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: monitoringalerts.example.com
spec:
group: example.com
names:
kind: MonitoringAlert
listKind: MonitoringAlertList
plural: monitoringalerts
singular: monitoringalert
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
name:
type: string
severity:
type: string
description:
type: string
Monitoring Alert Instance Creation:
apiVersion: example.com/v1
kind: MonitoringAlert
metadata:
name: high-cpu-alert
spec:
name: High CPU Usage
severity: Critical
description: Alert if CPU usage exceeds 90%
Task CRD:
Use Case: Define custom tasks for workflow orchestration.
Example: A CRD defining a task resource for running ETL jobs.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: tasks.example.com
spec:
group: example.com
names:
kind: Task
listKind: TaskList
plural: tasks
singular: task
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
name:
type: string
description:
type: string
deadline:
type: string
Task Instance Creation:
apiVersion: example.com/v1
kind: Task
metadata:
name: etl-job
spec:
name: ETL Process
description: Perform data extraction, transformation, and loading
deadline: "2024-02-15T00:00:00Z"
Configuration CRD:
Use Case: Define custom configurations for applications.
Example: A CRD defining a configuration resource for a microservice.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: configurations.example.com
spec:
group: example.com
names:
kind: Configuration
listKind: ConfigurationList
plural: configurations
singular: configuration
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
service:
type: string
replicas:
type: integer
ports:
type: array
items:
type: integer
Configuration Instance Creation:
apiVersion: example.com/v1
kind: Configuration
metadata:
name: microservice-config
spec:
service: my-microservice
replicas: 3
ports:
- 80
- 443
Complex Use Cases:
Machine Learning Model CRD:
Use Case: Define custom resources for managing machine learning models.
Example: A CRD defining resources for deploying and managing ML models.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: mlmodels.example.com
spec:
group: example.com
names:
kind: MLModel
listKind: MLModelList
plural: mlmodels
singular: mlmodel
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
name:
type: string
framework:
type: string
version:
type: string
trainingData:
type: string
deploymentStatus:
type: string
Machine Learning Model Instance Creation:
apiVersion: example.com/v1
kind: MLModel
metadata:
name: mnist-model
spec:
name: MNIST Classifier
framework: TensorFlow
version: 1.0
trainingData: s3://my-bucket/mnist_data
deploymentStatus: deployed
Multi-Cluster Application CRD:
Use Case: Define resources for managing applications across multiple Kubernetes clusters.
Example: A CRD defining an application resource that spans multiple clusters.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: multiclusterapps.example.com
spec:
group: example.com
names:
kind: MultiClusterApp
listKind: MultiClusterAppList
plural: multiclusterapps
singular: multiclusterapp
scope: Cluster
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
name:
type: string
components:
type: array
items:
type: object
properties:
name:
type: string
replicas:
type: integer
Multi-Cluster Application Instance Creation:
apiVersion: example.com/v1
kind: MultiClusterApp
metadata:
name: distributed-app
spec:
name: Distributed Application
components:
- name: frontend
replicas: 3
- name: backend
replicas: 5
Compliance Policy CRD:
Use Case: Define compliance policies for Kubernetes resources.
Example: A CRD defining compliance policies for various regulations like GDPR or HIPAA.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: compliancepolicies.example.com
spec:
group: example.com
names:
kind: CompliancePolicy
listKind: CompliancePolicyList
plural: compliancepolicies
singular: compliancepolicy
scope: Cluster
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
name:
type: string
description:
type: string
regulations: