Continouos Delivery in Kubernetesland

F029ec9c798e4dc447cab5e76f62fa17?s=47 Nicolas Byl
February 23, 2018

Continouos Delivery in Kubernetesland

F029ec9c798e4dc447cab5e76f62fa17?s=128

Nicolas Byl

February 23, 2018
Tweet

Transcript

  1. 1 CONTINUOUS DELIVERY IN KUBERNETESLAND Entwicklertag Frankfurt 2018 Nicolas Byl,

    codecentric AG
  2. 2 . 1 GETTING STARTED

  3. 2 . 2 Mission Statement You can follow the pipeline

    on your device. Install prequisites
  4. 2 . 3 Prequisites https://github.com/nbyl/cd-workshop-demo

  5. 2 . 4 Organisational Stuff Ask questions anytime! Breaks? Slack

  6. None
  7. 2 . 5 3 . 1 CONTINUOUS DELIVERY

  8. 3 . 2 Key Concepts The software is releasable at

    at any time The whole process from source to production is automated Decouple technical rollout from feature rollout
  9. 3 . 3 Continuous Delivery vs. Continuous Deployment Continuous Delivery:

    Software is releasable at any time Continuous Deployment: Software is released on every change
  10. 4 . 1 DOCKER

  11. None
  12. 4 . 2

  13. 4 . 3

  14. 4 . 4

  15. 4 . 5

  16. 4 . 6 4 . 7 Dockerfile FROM java:8 MAINTAINER

    Marcel Birkner <marcel.birkner@codecentric.de> ADD target/edmp-sample-app*.jar app.jar RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-jar","/app.jar"]}
  17. None
  18. 4 . 8 5 . 1 KUBERNETES

  19. "Kubernetes is an open-source platform for automating deployment, scaling, and

    operations of application containers across clusters of hosts, providing container- centric infrastructure."
  20. 5 . 2 portable: public, private, hybrid, multi-cloud extensible: modular,

    pluggable, hookable, composable self-healing: auto-placement, auto-restart, auto- replication, auto-scaling
  21. 5 . 3

  22. 5 . 4 5 . 5 Pods & Co.

  23. 5 . 6 Pods

  24. 5 . 7 Replication Controller  P P P

  25. 5 . 8 Deployment combination of pod & replication controller

    edited as a unit
  26. apiVersion: extensions/v1beta1 kind: Deployment metadata: name: frontend spec: replicas: 3

    template: metadata: labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: gcr.io/google-samples/gb-frontend:v4 resources: t
  27. 5 . 9 5 . 10 Services

  28. 5 . 11 endpoint for a set of pods an

    external endpoint can be resolved using DNS environment variables
  29. None
  30. 5 . 12 6 . 1 SHOWCASE PROJECT

  31. 6 . 2 confy microservice to manage conference talks and

    speakers technology: REST-API UI using Gradle Spring Boot (Web, JPA) ng-admin https://github.com/nbyl/confy
  32. 6 . 3 Target Platform kubernetes PostgreSQL

  33. 6 . 4 Testing Requirements automatic testing using the target

    database user acceptance test before exposing new versions
  34. 6 . 5 Build Pipeline build publish docker container integration

    test user acceptance test production
  35. 6 . 6 Assumptions any manual interaction will be done

    in reasonable period our cluster will (for now) contain of only one host
  36. 7 . 1 LAB 1: SETUP

  37. 7 . 2 Recently on this Program... Have you installed

    the prerequisites?
  38. 7 . 3 Create a cluster minikube start --memory 4096

    kubectl apply -f minikube/storageclass.yml
  39. 7 . 4 Install Helm helm init

  40. 7 . 5 Install Jenkins helm install stable/jenkins --set Agent.Memory=1024Mi

    --name=cd minikube service cd-jenkins
  41. 8 . 1 LAB 2: CONTINUOUS INTEGRATION

  42. 8 . 2 Objectives build an artefact of the software

    run all unit tests and in-tree integration tests
  43. 8 . 3 Jenkins Kubernetes Plugin creates a new pod

    for every job use the pod as a temporary build slave
  44. 8 . 4 Let's Go create a new pipeline job

    use as SCM source for your Jenkinsfile https://github.com/nbyl/cd-workshop-demo.git
  45. 8 . 5 caveat build cache is gone after every

    build
  46. None
  47. 8 . 6 8 . 7 persistent volumes create manually

    use storageclass with auto-provisioner
  48. kind: StorageClass apiVersion: storage.k8s.io/v1beta1 metadata: name: generic provisioner: kubernetes.io/host-path

  49. 8 . 8 kind: PersistentVolumeClaim apiVersion: v1 metadata: name: gradle-cache

    annotations: volume.beta.kubernetes.io/storage-class: "generic" spec: accessModes: - ReadWriteOnce resources: requests: t 8Gi
  50. 8 . 9 9 . 1 LAB 3: BUILDING A

    DOCKER CONTAINER
  51. 9 . 2 Objectives build a docker container containing the

    application make the container available for deployment
  52. 9 . 3 Build Pod Revisited using build pods is

    scalable and reproducible the host docker daemon is not reachable
  53. 9 . 4 Docker-in-Docker Builds mount the docker sockets inside

    the container /run/docker.sock /var/run/docker.sock image will be built in host docker Warning: possible security problem
  54. 10 . 1 LAB 4: INTEGRATION TESTING

  55. 10 . 2 Objectives create a deployment description for the

    application deployment the application in a configuration analog to production run an integration test verifying the basic functionality
  56. 10 . 3 Helm Chart helm create helm/confy [edit] helm

    upgrade --install dev-confy helm-confy
  57. 10 . 4 Configure the Application env: - name: SPRING_DATASOURCE_URL

    value: {{ .Values.database.url }} - name: SPRING_DATASOURCE_DRIVER value: {{ .Values.database.driver }} - name: SPRING_DATASOURCE_USERNAME value: {{ .Values.database.username }} - name: SPRING_DATASOURCE_PASSWORD value: {{ .Values.database.password }}
  58. 10 . 5 Simulate roduction use the same database server

    as in production treat system as blackbox
  59. 11 . 1 LAB 5: USER ACCEPTANCE TESTING

  60. 11 . 2 Objectives deploy the application accessible for users

    allow manual testing continue to production after manual confirmation
  61. 11 . 3 Ingress

  62. 11 . 4 Ingress Controller Read Ingress state route accordingly

    Implementations: NGINX traefik F5 ...
  63. 12 . 1 LAB 5: PRODUCTION DEPLOYMENT

  64. 12 . 2 Objectives make application available for end users

    (nothing new to learn)
  65. 13 . 1 WRAP UP

  66. 13 . 2 Links https://kubernetes.io https://www.cncf.io/ https://www.openshift.com/promotions/kubernetes.html https://fabric8.io https://github.com/ramitsurana/awesome-kubernetes

  67. 13 . 3 The End @NicolasByl Copyright 2017