Kubernetes Operators in .NET: Getting Started

Operators extend Kubernetes with custom domain logic. While usually written in Go, the .NET ecosystem has matured with the `KubeOps` SDK. We can now write C# operators to manage custom resources like `DatabaseCluster` or `TenantNamespace`.

The Operator Pattern

flowchart TB
    User[kubectl apply -f pg.yaml] --> API[K8s API Server]
    API -->|Watch Event| Operator[C# Operator]
    Operator -->|Reconcile Loop| Check{State Matches?}
    Check -->|No| Action[Create Azure SQL / Pods]
    Check -->|Yes| Sleep[Wait]
    
    style Operator fill:#E1F5FE,stroke:#0277BD

Defining a CRD in C#

[KubernetesEntity(Group = "dataa.dev", ApiVersion = "v1", Kind = "MySqlCluster")]
public class MySqlCluster : CustomKubernetesEntity<MySqlClusterSpec, MySqlClusterStatus>
{
}

public class MySqlClusterSpec
{
    public string Version { get; set; }
    public int Replicas { get; set; }
}

The Reconciler

public class Controller : IResourceController<MySqlCluster>
{
    public async Task<ResourceControllerResult> ReconcileAsync(MySqlCluster resource)
    {
        // 1. Check if StatefulSet exists
        // 2. If not, create it
        // 3. Update status
        
        return ResourceControllerResult.RequeueEvent(TimeSpan.FromSeconds(30));
    }
}

Key Takeaways

  • Operators encode operational knowledge into software.
  • The Reconcile loop must be idempotent.
  • Use KubeOps to generate CRD manifests from C# classes.

Discover more from C4: Container, Code, Cloud & Context

Subscribe to get the latest posts sent to your email.

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.