Skip to content
{{TecBauer}}
  • Home
  • Datenschutzerklärung
  • Impressum

Schlagwort kubernetes

  • Home   /  
  • Markierte Beiträge "kubernetes"
Aliase, DevOps, Kubernetes, Tricks Okt. 11,2019

Versionsbefreite Kubernetes Deploymentfiles

Wer des Öfteren mit Kubernetes arbeitet, kennt sehr wahrscheinlich das folgende Problem:

Man hat initial an einer bestimmten Stelle, z.B. in einem Git-Repository Kubernetes Deploymentfiles in folgender Form erstellt:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

Im Laufe des Lebenszyklus eines Deployments ändert sich aber immer mal wieder die Version des Docker-Images. Diese wird dann z.B. folgendermaßen gesetzt:

kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true

Danach wird dann von Hand im besten Fall das Deploymentfile angepasst. Das Problem hierbei ist, wird vergessen das Deploymentfile anzupassen und ein Kollege (oder man selbst) verlässt sich darauf, das die Deploymentfiles immer aktuell sind, führt ein naives kubectl apply -f in machen Fällen dazu, dass eine unerwünschte Version deployed wird. Um dies zu verhindern habe ich folgenden BASH-Alias eingerichtet:

alias kubectla='f() { [ $# -eq 2 ] && for i in $(find ${2}); do sed s/=VERSION=/$1/g $i | kubectl apply -f -; done || echo -e "Wrong argument count!\ndo: kubectla  "; unset -f f; }; f'

Hinter dem Alias steckt eine Funktion, welche den Platzhalter =VERSION= in einer Datei ersetzt, bevor sie mit kubectl apply -f deployed wird. Die Deploymentfiles enthalten also in Zukunft keine explizite Version mehr, sondern lediglich unseren Platzhalter:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:=VERSION=
        ports:
        - containerPort: 80

Deployed wird dann mittels des Aliases kubectla

kubectla 1.91 nginx.yaml

Schon wird die entsprechende Version deployed und wir müssen uns in Zukunft keine Sorgen mehr machen, ob alle Versionen in unseren Deploymentfiles aktuell sind.

von tecbauer

Neueste Beiträge

  • Bug im Windows 10 Home Edition Taschenrechner ?
  • TCPdump eines einzelnen Kubernetes Pods / Docker Containers erstellen
  • Kommando Multithreaded in der BASH ausführen
  • Product Catalog X – Ein einfacher WordPress Produktkatalog
  • Versionsbefreite Kubernetes Deploymentfiles

Neueste Kommentare

    Kategorien

    • Aliase
    • Bash
    • Bugs
    • DevOps
    • Docker
    • Kubernetes
    • Linux
    • Tools
    • Tricks
    • Ubuntu
    • Uncategorized
    • Unnützes Wissen
    • Windows
    • Wordpress

    All Rights Reserved by TecBauer.