Kubernetes CRD Tutorial: How to Create Custom Resources
Kubernetes is a leading open-source platform for automating the deployment, scaling, and management of containerized applications. While it offers many built-in resources like pods and services, sometimes you need more flexibility. In these cases, Kubernetes CRD (Custom Resource Definitions) allow you to create custom resources that behave just like native ones.
In this tutorial, we will guide you step by step to implement a Kubernetes CRD, along with practical tips for managing custom resources effectively.

Prerequisites for Creating a Kubernetes CRD
Before you start, ensure you have:
- A running Kubernetes cluster with
kubectlinstalled. - RBAC (Role-Based Access Control) enabled on the Kubernetes API Server.
- Basic familiarity with YAML manifests and Kubernetes resources.
Having these ready ensures smooth creation and management of your CRDs.
Step 1: Define the CRD
Start by creating a YAML file that defines your CRD. This file specifies the resource name, version, and schema. For instance, let’s create a CRD for a fictional application called myapp with version v1beta1:
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: myapps.example.com
spec:
group: example.com
versions:
- name: v1beta1
served: true
storage: true
scope: Namespaced
names:
plural: myapps
singular: myapp
kind: Myapp
This YAML includes:
- apiVersion: Specifies the Kubernetes API version.
- kind: Declares this object as a CustomResourceDefinition.
- metadata: Contains the resource name.
- spec: Defines the CRD specifications, including API group, versions, and scope.
- names: Sets the singular, plural, and kind references for the resource.
Save this file as myapp-crd.yaml.
Step 2: Create the CRD in Your Cluster
Apply the CRD using kubectl:
kubectl create -f myapp-crd.yaml
This command creates the myapps.example.com resource in your cluster, making it ready to manage custom objects.
Step 3: Define Your Custom Resource
Once the CRD exists, define a custom resource using it. Here’s an example YAML file for myapp:
apiVersion: example.com/v1beta1
kind: Myapp
metadata:
name: myapp-sample
spec:
replicas: 3
image: nginx:latest
In this manifest:
- apiVersion: References the CRD version.
- kind: Matches the CRD kind (
Myapp). - metadata: Sets the custom resource name.
- spec: Specifies resource configuration such as replicas and container image.
Save this as myapp-sample.yaml.
Step 4: Create the Custom Resource
Deploy the custom resource using kubectl:
kubectl create -f myapp-sample.yaml
After running this command, the myapp-sample resource will exist in your cluster and can be managed like any native Kubernetes resource.
Step 5: Verify Your Custom Resource
To check your CRDs and confirm that your resource exists, use:
kubectl get crd
This command lists all CRDs in the cluster, ensuring your newly created custom resources are properly registered.
Best Practices for Kubernetes CRD
Creating Kubernetes CRDs offers flexibility, but proper management is key. Consider:
- Validating your CRDs with Kubernetes API conventions.
- Using versioning (
v1beta1,v1) to maintain backward compatibility. - Automating CRD updates using CI/CD pipelines or tools like ZippyOPS, which provides consulting, implementation, and managed services for DevOps, DevSecOps, DataOps, Cloud, Automated Ops, AIOps, MLOps, Microservices, Infrastructure, and Security.
For more guidance, ZippyOPS offers tailored services, solutions, and products. You can also explore practical tutorials on their YouTube channel.
Conclusion
Kubernetes CRDs empower teams to extend the platform with custom resources, simplifying application management and automation. By following these steps, you can define, deploy, and maintain your CRDs efficiently. At the same time, leveraging expert support from ZippyOPS ensures your DevOps and Cloud initiatives are fully optimized and secure.
For personalized assistance, reach out to: sales@zippyops.com



