Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
PYTHON, Kubernetes & FRIENDS @AGONZALEZRO
Slide 2
Slide 2 text
WHAT IS Kubernetes?
Slide 3
Slide 3 text
Framework for building distributed systems. (Kelsey's dixit)
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
OUR FIRST APP! $ kubectl run pygrunn \ --image=python:2.7 \ --command -- python -m SimpleHTTPServer
Slide 6
Slide 6 text
WHAT DO WE GET HERE?
Slide 7
Slide 7 text
A POD $ kubectl get pods NAME READY STATUS RESTARTS AGE pygrunn-1906403705-dckh7 1/1 Running 0 1m
Slide 8
Slide 8 text
A REPLICA SET $ kubectl get replicasets NAME DESIRED CURRENT AGE pygrunn-1552838933 1 1 11s
Slide 9
Slide 9 text
AND A DEPLOYMENT $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE pygrunn 1 1 1 1 2m
Slide 10
Slide 10 text
SHOW IT TO THE WORLD $ kubectl expose deployment pygrunn \ --port=80 --target-port=8000 --type=LoadBalancer
Slide 11
Slide 11 text
LET'S USE THE WAITING TIME $ kubectl exec -it pygrunn-1906403705-dckh7 bash
Slide 12
Slide 12 text
HERE IT IS $ kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE pygrunn 10.3.255.124 130.211.52.23 80/TCP 57s
Slide 13
Slide 13 text
HN FRONT PAGE! $ kubectl scale deployment pygrunn --replicas=3
Slide 14
Slide 14 text
THE END (FOR NOW)
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
WHAT WE DID THERE? ▸ Pods ▸ Replica Set ▸ Service ▸ Deployment
Slide 17
Slide 17 text
A "REAL" DEPLOYMENT
Slide 18
Slide 18 text
MAIN.PY from flask import Flask, url_for app = Flask(__name__) @app.route('/') def index(): return '
'.format( url_for('static', filename='grumpy.gif') ) if __name__ == '__main__': app.run(host='0.0.0.0')
Slide 19
Slide 19 text
DOCKERFILE FROM python:2.7.11-onbuild EXPOSE 5000 CMD ["uwsgi", "-http 5000", "-w main"]
Slide 20
Slide 20 text
$ docker build -t agonzalezro/pygrunn:grumpy . $ docker push agonzalezro/pygrunn
Slide 21
Slide 21 text
DEPLOYMENT.YAML (1/3) apiVersion: extensions/v1beta1 kind: Deployment metadata: name: pygrunn-deploy labels: name: pygrunn-deploy ...
Slide 22
Slide 22 text
DEPLOYMENT.YAML (2/3) ... spec: replicas: 3 selector: matchLabels: name: flask-app template: metadata: labels: name: flask-app ...
Slide 23
Slide 23 text
DEPLOYMENT.YAML (3/3) ... spec: containers: - name: app image: agonzalezro/pygrunn:grumpy ports: - containerPort: 5000 - name: nginx image: agonzalezro/pygrunn-nginx ports: - containerPort: 80 readinessProbe: httpGet: path: / port: 80
Slide 24
Slide 24 text
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: pygrunn-deploy labels: name: pygrunn-deploy spec: replicas: 3 selector: matchLabels: name: flask-app template: metadata: labels: name: flask-app spec: containers: - name: app image: agonzalezro/pygrunn:happy ports: - containerPort: 5000 - name: nginx image: agonzalezro/pygrunn-nginx ports: - containerPort: 80 readinessProbe: httpGet: path: / port: 80
Slide 25
Slide 25 text
SERVICE.YAML apiVersion: v1 kind: Service metadata: name: flask-service spec: type: LoadBalancer ports: - port: 80 targetPort: 5000 selector: name: flask-app
Slide 26
Slide 26 text
$ kubectl create -f deployment.yaml -f service.yaml
Slide 27
Slide 27 text
$ sed -i "s/replicas: 3/replicas: 5/" deployment.yaml $ kubectl apply -f deployment.yaml
Slide 28
Slide 28 text
$ sed -i "s/grumpy/happy/" deployment.yaml $ kubectl apply -f deployment.yaml
Slide 29
Slide 29 text
HOMEWORK ▸ Add a nginx in top ▸ Add a DB ▸ Use a private registry
Slide 30
Slide 30 text
THE END (AGAIN)
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
No content
Slide 33
Slide 33 text
No content
Slide 34
Slide 34 text
Thanks! @AGONZALEZRO