Self-Healing Applications with Kubernetes

Self-Healing Applications with Kubernetes

Given at DevFest Lahore 2019:


Sheharyar Naseer

November 23, 2019


  1. 3.

    Why do I care? • DevOps is hard • From

    1 instance on your laptop to 100s in production • Something breaks • Requires monitoring and manual intervention • SSH'ing into production at 3am on a Saturday night
  2. 4.

    Holy Grail of DevOps • Imagine: Your server constantly monitoring

    for issues • And automatically Hxing them • You no longer hate your job and yourself • And you can Hnally have a life (Maybe?)
  3. 5.

    Kubernetes • Container automation framework • Open-sourced by Google in

    2014 • Monitors, Detects and RectiHes issues in your cluster • Declarative, not Imperative
  4. 6.

    Imperative System • Give your system explicit instructions • It

    executes them to get to your desired state • You still need to monitor for changes • Give more instructions in case something goes down
  5. 7.

    Declarative System • Desired State • Tell Kubernetes what you

 not what to do • If stuX breaks • Kubernetes will automatically Hx it • Will always go back to desired state
  6. 9.

    Container FROM openjdk:8-jdk-alpine VOLUME /tmp RUN mkdir /k8s-demo COPY .

    /k8s-demo WORKDIR /k8s-demo RUN /k8s-demo/gradlew build RUN mv /k8s-demo/build/libs/*.jar /app.jar ENTRYPOINT ["java","-jar","/app.jar"] Architecture apiVersion: apps/v1 kind: Deployment metadata: name: app-deploy spec: replicas: 3 ... template: spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 - name: k8s-demo resources: limits: cpu: 6000m memory: 24Gi requests: cpu: 2000m memory: 10Gi Deployment
  7. 10.

    Application Health • Pod Phases • Pending, Running, Succeeded, Failed,

    etc. • Health Checks • Readiness:
 Finished initializing and ready to accept requests • Liveness:
 Can process and respond to requests

  8. 11.

    Application Health • Probes • Exec:
 Execute a command in

    the container • HTTP GET:
 Make a web request to check if a success response is returned • TCP Socket:
 Pe?orm a TCP check for an open poA
  9. 12.

    Readiness readinessProbe: httpGet: path: /ready port: http initialDelaySeconds: 5 timeoutSeconds:

    1 periodSeconds: 5 failureThreshold: 3 Self-Healing livenessProbe: httpGet: path: /healthy port: http initialDelaySeconds: 10 timeoutSeconds: 10 failureThreshold: 3 Liveness
  10. 13.
  11. 14.

    Outro Previous talk (Deployment with K8S): 

    these slides at: ! ! # sheharyarn