2 min read | by Jordi Prats
When writing a custom Kubernetes operator using operator-sdk we might want to change the fields are show when running kubectl get:
$ kubectl get example NAME AGE demo 4h20m
To do so, we'll need to add the additionalPrinterColumns field the the CustomResourceDefinition, but since we are using operator-sdk to take care of this, we'll need to use some annotations in the resource definition file.
The annotation we'll need to use is +kubebuilder:printcolumn, on which we'll need specify it's name, json-path and description:
//+kubebuilder:object:root=true //+kubebuilder:subresource:status //+kubebuilder:resource:scope=Cluster //+kubebuilder:printcolumn:name="ID",type="integer",JSONPath=".spec.exampleID",description="example ID" // example is the Schema for the examples API type Example struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec ExampleSpec `json:"spec"` Status ExampleStatus `json:"status,omitempty"` }
This annotations is going to make operator-sdk to add it as an additionalPrinterColumns in the CRD definition:
--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.10.0 creationTimestamp: null name: examples.pet2cattle.com spec: group: pet2cattle.com names: kind: Example listKind: ExampleList plural: examples singular: example scope: Cluster versions: - additionalPrinterColumns: - description: Example ID jsonPath: .spec.exampleID name: ID type: integer (...)
Once ready, we'll need to install the new definition into the cluster:
make install
Once applied, we'll be able to see the custom fields using kubectl get as usual:
$ kubectl get example NAME ID demo 1234
We can check what other options we can use in the kubebuilder documentation on CRD generation and on controller-gen.
Posted on 15/05/2023