MSc student at Aalto University, Finland CNCF Ambassador, Certified Kubernetes Administrator and Former Kubernetes maintainer KubeCon Speaker in Berlin, Austin, Copenhagen, Shanghai, Seattle, San Diego & Valencia KubeCon Keynote Speaker in Barcelona kubeadm, Weave Ignite & libgitops co-author, Entrepreneur Cloud Native Nordics co-founder & meetup organizer Guild of Automation and Systems Technology Head of Corporate Relations
contributors Cloud Native Computing Foundation is a non-profit under Linux Foundation CNCF hosts 153 “cloud native” projects under it’s vendor-neutral umbrella Kubernetes was the first project donated to CNCF by Google in 2015 It is one of the top 10 most actively developed open source projects
dream true JSON container workload specification REST API server HTTP POST JSON object Container Workload Controller read desired state *The process doesn’t look exactly like this, it is a simplified mental model for now pull start re-start monitor
(e.g. webservice) Monitoring dashboard - business objective narrative (desired state in PDF) + human diff actual state Classic system administration (Declarative) e.g. “start 2 static web server processes per VM, send alerts via email if CPU exhausted”
(e.g. webservice) Monitoring data - declarative business objective (desired state in JSON) + programmatic diff actual state System Administration by Kubernetes Operators REST API desired state REST API actual state e.g. “I want at least 10 web servers always running, scale up to 20 if load is high. I don’t care where the web servers run as long as they are reachable in this subnet”
in JSON) Notice that desired and actual state are separated REST API desired state REST API actual state REST API is uniform, i.e. all resources has the same structure: kind, apiVersion, metadata, spec, Status REST API is extensible, you can add your own objects freely kind: Pod # What kind of object is this? apiVersion: v1 # What schema version is used? metadata: # Metadata about this object name: my-pod labels: app: web spec: # Desired state, set by user containers: - image: nginx:1.23 ports: - containerPort: 80 status: # Actual, observed state, set by controller conditions: - type: Ready status: "True" lastTransitionTime: 2018-01-01T00:00:00Z
“Workload” controller with the following API: kind: Workload # What kind of object is this? apiVersion: luxas.dev/v1 # What schema version is used? metadata: # Metadata about this object name: my-workload spec: # Desired state, set by user type: VM osImage: https://luxas.dev/ubuntu-2204 status: # Actual, observed state, set by controller phase: Running bootTime: 2023-03-28T00:00:00Z