Kubernetes Management Techniques

Run, Create and Expose Generators

  • These commands use helper templates called "generators"

  • Every resource in Kubernetes has a specification or "spec"

  • kubectl create deployment sample --image nginx --dry-run -o yaml

  • You can output those templates with --dry-run -o yaml

  • You can use those YAML default as a starting point for your own templates

  • Generators are "opinionated defaults"

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: sample
  name: sample
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sample
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: sample
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}

Three Management Approaches

  • Imperative commands: run, expose, scale, edit, create deployment

    • best for dev / learning / personal projects

    • easy to learn, hardest to manage over time

  • Imperative objects: create -f file.yml, replace -f file.yml, delete -f file.yml

    • good for prod of small environments, single file per command

    • store your changes in git-based yaml files

    • hard to automate

  • Declarative objects: apply -f file.yaml or dir\, diff

    • best for prod, easier to automate

    • harder to understand and predict changes

  • Most important rule:

    • don't mix these three approaches

Last updated