Slide 1

Slide 1 text

Aditya Satrya Head of IT Development Jabar Digital Service https://digitalservice.jabarprov.go.id

Slide 2

Slide 2 text

Outline ● Cloud-Native & 12-Factor App ● Kubernetes ● 12-Factor App using Kubernetes

Slide 3

Slide 3 text

Cloud-Native & 12-Factor App

Slide 4

Slide 4 text

Cloud-Native Application ● Operability: Expose control of application/system lifecycle. ● Observability: Provide meaningful signals for observing state, health, and performance. ● Elasticity: Grow and shrink to fit in available resources and to meet fluctuating demand. ● Resilience: Fast automatic recovery from failures. ● Agility: Fast deployment, iteration, and reconfiguration

Slide 5

Slide 5 text

Cloud-Native Trail Map 1. Containerization 2. CI/CD 3. Orchestration --below this are optional-- 4. Observability 5. Service Discovery 6. Networking & Policy 7. Distributed database & storage 8. Streaming & messaging 9. Container registry 10. Software distribution

Slide 6

Slide 6 text

12-Factor App ● Methodology to build app optimized for the cloud (cloud-native) ● Drafted by developers at Heroku (2011) ● http://12factor.net

Slide 7

Slide 7 text

The Twelve Factor

Slide 8

Slide 8 text

Code I. One Codebase One codebase tracked in revision control, many deploys II. Dependencies Explicitly declare and isolate dependencies III. Config Store config in the environment VI. Processes Execute the app as one or more stateless processes IV. Backing services Treat backing services as attached resources V. Build, release, run Strictly separate build and run stages X. Dev/prod parity Keep development, staging, and production as similar as possible VII. Port binding Export services via port binding VIII. Concurrency Scale out via the process model IX. Disposability Maximize robustness with fast startup and graceful shutdown XI. Logs Treat logs as event streams XII. Admin processes Run admin tasks as one-off processes Deploy Operate

Slide 9

Slide 9 text

Kubernetes

Slide 10

Slide 10 text

What is Kubernetes? ● Open-source system for automating: ○ deployment ○ scaling ○ management of containerized applications

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers

Slide 13

Slide 13 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers

Slide 14

Slide 14 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers Run 5 instances of frontend:latest

Slide 15

Slide 15 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers Run 5 instances of frontend:latest

Slide 16

Slide 16 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers Run 5 instances of frontend:latest frontend: 4/5 X

Slide 17

Slide 17 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers Run 5 instances of frontend:latest frontend: 4/5

Slide 18

Slide 18 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers Run 5 instances of frontend:latest frontend: 5/5

Slide 19

Slide 19 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers Run 5 instances of frontend:latest Run 3 instances of backend:latest

Slide 20

Slide 20 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers Run 5 instances of frontend:latest Run 3 instances of backend:latest Run 10 instances of analytics:latest

Slide 21

Slide 21 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers Run 5 instances of frontend:latest Run 3 instances of backend:latest Run 10 instances of analytics:latest

Slide 22

Slide 22 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers Run 5 instances of frontend:latest Run 3 instances of backend:latest Run 10 instances of analytics:latest analytics: 7/10 frontend: 4/5 backend: 3/3

Slide 23

Slide 23 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 Master 1 Master 2 Master 3 Workers Run 5 instances of frontend:latest Run 3 instances of backend:latest Run 10 instances of analytics:latest analytics: 10/10 frontend: 5/5 backend: 3/3

Slide 24

Slide 24 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5

Slide 25

Slide 25 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 10.x.x.x label: analytics Services

Slide 26

Slide 26 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 10.x.x.x label: analytics 10.x.x.x label: backend 10.x.x.x label: frontend Services

Slide 27

Slide 27 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 10.x.x.x label: analytics 10.x.x.x label: backend 10.x.x.x label: frontend Services Internet

Slide 28

Slide 28 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 10.x.x.x label: analytics 10.x.x.x label: backend 10.x.x.x label: frontend Cloud Load Balancer Services Internet

Slide 29

Slide 29 text

Worker 1 Worker 2 Worker 3 Worker 4 Worker 5 10.x.x.x label: analytics 10.x.x.x label: backend 10.x.x.x label: frontend Cloud Load Balancer stats.example.com api.example.com example.com Services Internet

Slide 30

Slide 30 text

12-Factor App Using Kubernetes

Slide 31

Slide 31 text

Code I. One Codebase One codebase tracked in revision control, many deploys II. Dependencies Explicitly declare and isolate dependencies III. Config Store config in the environment VI. Processes Execute the app as one or more stateless processes IV. Backing services Treat backing services as attached resources V. Build, release, run Strictly separate build and run stages X. Dev/prod parity Keep development, staging, and production as similar as possible VII. Port binding Export services via port binding VIII. Concurrency Scale out via the process model IX. Disposability Maximize robustness with fast startup and graceful shutdown XI. Logs Treat logs as event streams XII. Admin processes Run admin tasks as one-off processes Deploy Operate

Slide 32

Slide 32 text

Code I. One Codebase One codebase tracked in revision control, many deploys II. Dependencies Explicitly declare and isolate dependencies III. Config Store config in the environment VI. Processes Execute the app as one or more stateless processes Dockerfile Kubernetes cluster Node Pod Node Pod yaml Pod Pod

Slide 33

Slide 33 text

Code I. One Codebase One codebase tracked in revision control, many deploys II. Dependencies Explicitly declare and isolate dependencies III. Config Store config in the environment VI. Processes Execute the app as one or more stateless processes Kubernetes cluster yaml Kubernetes cluster Kubernetes cluster

Slide 34

Slide 34 text

Code I. One Codebase One codebase tracked in revision control, many deploys II. Dependencies Explicitly declare and isolate dependencies III. Config Store config in the environment VI. Processes Execute the app as one or more stateless processes

Slide 35

Slide 35 text

Code I. One Codebase One codebase tracked in revision control, many deploys II. Dependencies Explicitly declare and isolate dependencies III. Config Store config in the environment VI. Processes Execute the app as one or more stateless processes fmt.Fprintf(w, "ENV: %s\n", os.Getenv("ENV")) fmt.Fprintf(w, "DB_HOST: %s \n", os.Getenv("DB_HOST")) fmt.Fprintf(w, "DB_PORT: %s \n", os.Getenv("DB_PORT")) fmt.Fprintf(w, "DB_USER: %s \n", os.Getenv("DB_USER")) fmt.Fprintf(w, "DB_PASSWORD: %s \n", os.Getenv("DB_PASSWORD" )) Application code: containers: - name: demo-app image: asatrya/alpine-k8s-pod-lb-demo env: - name: DB_HOST valueFrom: configMapKeyRef : name: demo-configmap key: DB_HOST - name: DB_PORT k8s yaml:

Slide 36

Slide 36 text

Code I. One Codebase One codebase tracked in revision control, many deploys II. Dependencies Explicitly declare and isolate dependencies III. Config Store config in the environment VI. Processes Execute the app as one or more stateless processes ● Share nothing ● Do not write persistent data to node memory/filesystem

Slide 37

Slide 37 text

IV. Backing services Treat backing services as attached resources V. Build, release, run Strictly separate build and run stages X. Dev/prod parity Keep development, staging, and production as similar as possible VII. Port binding Export services via port binding Deploy configMap.yaml DB_HOST=mydbhost DB_PORT=3306 Pod deployment.yaml image: imagename env: …. secret.yaml DB_USER=mydbuser DB_PASS=mydbpass Docker Registry image os.Getenv(‘DB_HOST’) os.Getenv(‘DB_PORT’) os.Getenv(‘DB_USER’) os.Getenv(‘DB_PASS’)

Slide 38

Slide 38 text

IV. Backing services Treat backing services as attached resources V. Build, release, run Strictly separate build and run stages X. Dev/prod parity Keep development, staging, and production as similar as possible VII. Port binding Export services via port binding Deploy Build image Registry Deploy & Run Deploy & Run push image (release) pull image pull image Config for staging Config for prod

Slide 39

Slide 39 text

IV. Backing services Treat backing services as attached resources V. Build, release, run Strictly separate build and run stages X. Dev/prod parity Keep development, staging, and production as similar as possible VII. Port binding Export services via port binding Deploy

Slide 40

Slide 40 text

IV. Backing services Treat backing services as attached resources V. Build, release, run Strictly separate build and run stages X. Dev/prod parity Keep development, staging, and production as similar as possible VII. Port binding Export services via port binding Deploy Node 1 NodePort Pod TargetPort Load Balancer Service Port Pod TargetPort Service Port Node 2 NodePort Pod TargetPort Service Port Pod TargetPort Service Port

Slide 41

Slide 41 text

VIII. Concurrency Scale out via the process model IX. Disposability Maximize robustness with fast startup and graceful shutdown XI. Logs Treat logs as event streams XII. Admin processes Run admin tasks as one-off processes Operate ● Manual Scaling ○ kubectl scale ● Autoscaling ○ based on CPU utilization ○ based on custom metrics

Slide 42

Slide 42 text

VIII. Concurrency Scale out via the process model IX. Disposability Maximize robustness with fast startup and graceful shutdown XI. Logs Treat logs as event streams XII. Admin processes Run admin tasks as one-off processes Operate Service Healthy Unhealthy (Loading 45%) Liveness PASS Readiness PASS Liveness PASS Readiness FAIL

Slide 43

Slide 43 text

VIII. Concurrency Scale out via the process model IX. Disposability Maximize robustness with fast startup and graceful shutdown XI. Logs Treat logs as event streams XII. Admin processes Run admin tasks as one-off processes Operate

Slide 44

Slide 44 text

VIII. Concurrency Scale out via the process model IX. Disposability Maximize robustness with fast startup and graceful shutdown XI. Logs Treat logs as event streams XII. Admin processes Run admin tasks as one-off processes Operate ● CronJob ● Job

Slide 45

Slide 45 text

Demo You can access demo source code at https://github.com/asatrya/k8s-12-factor-demo Note: Read README first.

Slide 46

Slide 46 text

Summary ● Code: optimize for automation ● Deploy: portability ● Operate: scalability, resiliency

Slide 47

Slide 47 text

No content