Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes @ Chefkoch.de (Bonn Microservices Me...

Kubernetes @ Chefkoch.de (Bonn Microservices Meetup 2016-11-02)

Wie Europas größte Kochplattform mit Containern arbeitet.

Speaker:
Pascal Cremer (Senior Dev, Chefkoch.de)
https://twitter.com/b00gizm
https://github.com/b00gizm

Repositories:
http://bit.ly/k8s-rolling
http://bit.ly/k8s-setup

Avatar for Pascal Cremer

Pascal Cremer

November 02, 2016
Tweet

More Decks by Pascal Cremer

Other Decks in Technology

Transcript

  1. Chefkoch-IT 8 MITARBEITER Ende 2014 Benutzer BI Hannibal Humboldt Magazin

    Mobile IT-Betrieb CA. 50 MITARBEITER MITTE 2016
  2. HEALTH CHECKS Readiness und Liveness Probes bestimmen den Health-Status der

    Container im Cluster. Schlägt eine Readiness Probe fehl, wird kein Traffic mehr zu den entsprechenden Pods geleitet. TCP/80? GET /index.html?
  3. Services Ermöglichen das Routing zu einem oder mehren Pods über

    Selektoren. Services bilden quasi das "Frontend" zu "darunter" liegenden Pods. WWW WWW WWW www-SVC
  4. Services Ermöglichen das Routing zu einem oder mehren Pods über

    Selektoren. Services bilden quasi das "Frontend" zu "darunter" liegenden Pods. 10.0.1.1 10.0.1.2 10.0.1.3 10.2.1.1 WWW WWW WWW www-SVC
  5. Services Ermöglichen das Routing zu einem oder mehren Pods über

    Selektoren. Services bilden quasi das "Frontend" zu "darunter" liegenden Pods. mynode.example.org:30042 10.0.1.1 10.0.1.2 10.0.1.3 10.2.1.1 WWW WWW WWW www-SVC
  6. NAMESPACE: 6bbbaf0c kubectl create SOLR REDIS DATABASE SELENIUM BEHAT BENUTZER

    API ADMIN VARNISH WWW CMS www-SVC http:/ /www-6bbbaf0c.local.dev.chefkoch.de/… docker pull
  7. apiVersion: v1
 kind: Pod
 metadata:
 name: behat
 labels:
 name: behat


    project: chefkoch-frontend
 spec:
 containers:
 - name: behat
 image: dr.chefkoch.net/chefkoch-www
 command: ['/bin/bash']
 args:
 - '-c'
 - 'cd /app && bin/behat ; echo -n $? > /behat-result ; sleep 100'
 readinessProbe:
 exec:
 command: ['/bin/bash', '-c', '/usr/bin/test -f /behat-result']
  8. apiVersion: v1
 kind: Pod
 metadata:
 name: behat
 labels:
 name: behat


    project: chefkoch-frontend
 spec:
 containers:
 - name: behat
 image: dr.chefkoch.net/chefkoch-www
 command: ['/bin/bash']
 args:
 - '-c'
 - 'cd /app && bin/behat ; echo -n $? > /behat-result ; sleep 100'
 readinessProbe:
 exec:
 command: ['/bin/bash', '-c', '/usr/bin/test -f /behat-result']
  9. apiVersion: v1
 kind: Pod
 metadata:
 name: behat
 labels:
 name: behat


    project: chefkoch-frontend
 spec:
 containers:
 - name: behat
 image: dr.chefkoch.net/chefkoch-www
 command: ['/bin/bash']
 args:
 - '-c'
 - 'cd /app && bin/behat ; echo -n $? > /behat-result ; sleep 100'
 readinessProbe:
 exec:
 command: ['/bin/bash', '-c', '/usr/bin/test -f /behat-result']
  10. JOBS Erzeugen Pods für finite Tasks und tracken deren erfolgreiche

    Terminierung, z.B. für zusätzliches Bootstrapping nach erfolgreichem Start eines Pods. Jobs können parallel ausgeführt werden. K8S 1.2 bash -c … bash -c … bash -c … bash -c …
  11. JOBS Erzeugen Pods für finite Tasks und tracken deren erfolgreiche

    Terminierung, z.B. für zusätzliches Bootstrapping nach erfolgreichem Start eines Pods. Jobs können parallel ausgeführt werden. K8S 1.2 bash -c … bash -c … bash -c … bash -c …
  12. apiVersion: batch/v1
 kind: Job
 metadata:
 name: behat
 labels:
 name: behat


    project: chefkoch-frontend
 spec:
 containers:
 - name: behat
 image: dr.chefkoch.net/chefkoch-www
 command: ['/bin/bash', '-c', 'cd /app && bin/behat'] restartPolicy: Never
  13. RCS Replication Controller sorgen für das Hoch- und Runter- skalieren

    zu einer bestimmten Anzahl von Pods. WWW-RC replicas: 1 WWW
  14. RCS Replication Controller sorgen für das Hoch- und Runter- skalieren

    zu einer bestimmten Anzahl von Pods. WWW-RC replicas: 3 WWW WWW WWW
  15. #!/bin/bash rc_get_name() {
 local label="$1"; shift
 local template='{{(index .items 0).metadata.name

    }}'
 if out=$(kubectl get rc -o template --template="${template}" -l name="${label}" 2>/dev/null); then
 echo ${out}
 else
 return 1
 fi
 }
 
 main() {
 set -e
 
 pushd "$(dirname $0)" > /dev/null
 
 if express=$(rc_get_name express); then
 kubectl rolling-update --update-period="20s" ${express} -f ./express-rc.yml
 else
 kubectl create -f ./express-rc.yml
 fi
 
 if www=$(rc_get_name www); then
 kubectl rolling-update --update-period="20s" ${www} -f ./www-rc.yml
 else
 kubectl create -f ./www-rc.yml
 fi
 }
 
 [[ "$0" == "$BASH_SOURCE" ]] && main "$@"
  16. DEPLOYMENTS Deklarative Updates für Pods und Replica Sets, komplett Server-

    seitig inkl. der Möglichkeit von Rollbacks und/oder Deployment- Pausierungen. K8S 1.2
  17. apiVersion: extensions/v1
 kind: Deployment
 metadata:
 name: node-app-deployment
 labels:
 name: node-app


    project: chefkoch-activity-stream
 spec: replicas: 3 template: metadata: name: express labels: component: web tier: stable
 containers:
 - name: express
 image: dr.chefkoch.net/activity-stream-express:master-123
 ports: - containerPort: 3000
  18. $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE

    node-app—deployment 3 3 3 3 20s $ kubectl rollout status deployment/node-app-deployment deployment node-app—deployment successfully rolled out
  19. PODS Services REPLICATION
 CONTROLLER Deployments JOBS NAMESPACES RESOURCE QUOTAS scheduled

    j0bs INGRESS PET SETS SECRETS PERSISTENT VOLUMES HORIZONTAL POD AUTO- SCALING
  20. PODS Services REPLICATION
 CONTROLLER Deployments JOBS NAMESPACES RESOURCE QUOTAS scheduled

    j0bs INGRESS PET SETS SECRETS PERSISTENT VOLUMES HORIZONTAL POD AUTO- SCALING
  21. PODS Services REPLICATION
 CONTROLLER Deployments JOBS NAMESPACES RESOURCE QUOTAS scheduled

    j0bs INGRESS PET SETS SECRETS PERSISTENT VOLUMES HORIZONTAL POD AUTO- SCALING
  22. apiVersion: v1
 kind: ReplicationController
 metadata:
 name: www-{{ key }}-{{ release

    }}
 labels:
 name: www
 project: chefkoch-activity-stream
 spec:
 replicas: 3 template: metadata: labels: name: www origin: {{ origin }} release: {{ release }} component: web tier: stable
  23. $ docker run —-rm \ -v $(pwd)/kubernetes:/app/templates \ -v $(pwd)/.cache/kubernetes:/app/build

    \ -v $(pwd)/twigger.yml:/app/twitter.yml \ -e TWIGGER_KEY=${bamboo_project_key} \ -e TWIGGER_ORIGIN=${bamboo_project_name} \ -e TWIGGER_RELEASE=${bamboo_build_name} \ dr.chefkoch.net/twigger
  24. apiVersion: v1
 kind: ReplicationController
 metadata:
 name: www-asf-master-42
 labels:
 name: www


    project: chefkoch-activity-stream
 spec:
 replicas: 3 template: metadata: labels: name: www origin: activity-stream-frontend release: master-42 component: web tier: stable
  25. $ kubectl get po --namespace=activity-stream NAME READY STATUS RESTARTS AGE

    api-asa-master-38-cvfdj 1/1 Running 0 1d api-asa-master-38-tfscn 1/1 Running 0 1d express-asf-master-49-mknlt 1/1 Running 0 30m mongo-asv-master-36-ab9pu 2/2 Running 0 5d varnish-asv-master-49-pud4e 1/1 Running 0 2d www-asf-master-52-nggej 1/1 Running 0 30m www-asv-master-52-yw0g5 1/1 Running 0 30m www-asv-master-52-fid3w 1/1 Running 0 30m