Testjes om te kijken hoe je een flask applicatie kan laten draaien op een kubernetes cluster
docker hub https://hub.docker.com/repository/docker/lister1308/python-hello-app/general
Hoe ga je nu van een flask applicatie naar deze werkend te krijgen op een kubernetes omgeving? Diverse links gevonden die hier iets over zeggen. Hieronder aantal links gevolgd om een test applicatie werkend te krijgen. Link:
- https://docs.oracle.com/en-us/iaas/developer-tutorials/tutorials/flask-cloud-shell/01oci-flask-shell-summary.htm
- https://www.bhavaniravi.com/devops/kubernetes-101-deploy-apps-in-kubernetes
from flask import Flask import platformapp = Flask(name)
@app.route('/') def hello_world(): return '
'if name == "main": app.run(host="0.0.0.0", port=int("12345"), debug=True)
$ vi run.sh
export FLASK_APP=hello.py export FLASK_ENV=development python3 hello.py
$ run.sh
Je kan daarna testen door naar poort 12345 te connecten met je webbrowser of middels curl en dan krijg je de tekst "Hello World from Flask!" te zien. Hierna gaan we dit omzetten naar een docker image In de directory waar de applicatie staat maak je een file genaamd
Dockerfileaan met als inhoud
FROM python:3.9-slim-buster ADD hello.py / COPY . /app WORKDIR /app RUN pip3 install Flask EXPOSE 12345 CMD [ "python3", "./hello.py" ]
Bouw daarna het docker image met
$ docker build -t python-hello-app .
Als het image gebouwd is, moet je deze met onderstaand commando ook zien staan
$ docker imagesDraai het image daarna metREPOSITORY TAG IMAGE ID CREATED SIZE python-hello-app latest 49f8c76140a3 57 minutes ago 128MB
docker run --rm -p 12345:12345 python-hello-app:latest &
Ook nu moet je, door naar de browser te gaan of curl te gebruiken, de applicatie weer hebben draaien.
Maak op https://hub.docker.com een repository aan waar je dit image in wilt bewaren. Daarna voer de volgende commando's uit om je image te pushen naar deze repository$ docker tag python-hello-app:latest lister1308/python-hello-app:0.0.1 $ docker push lister1308/python-hello-app:0.0.1Hierna is in je docker hub het image zichtbaar Hierna kan je je docker image uitrollen in een kubernetes cluster. Hiervoor is onderstaande config python-hello-app.yaml aangemaakt
apiVersion: apps/v1 kind: Deployment metadata: name: hello-app spec: selector: matchLabels: app: hello-app replicas: 2 template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: lister1308/python-hello-app:latest imagePullPolicy: Always ports: - name: hello-app containerPort: 12345 protocol: TCP --- apiVersion: v1 kind: Service metadata: name: hello-app-lb labels: app: hello-app annotations: service.beta.kubernetes.io/oci-load-balancer-shape: "flexible" service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10" service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "100" spec: type: LoadBalancer loadBalancerIP: 192.168.10.244 ports: - port: 12345 selector: app: hello-appDeply daarna dit op je cluster met
$ kubectl create -f python-hello-app.yamlAls deze draait, zie je dit met
$ kubectl get all -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod/hello-app-85d64585f9-hx774 1/1 Running 0 48m 10.xxxxxxx spock pod/hello-app-85d64585f9-w2fvw 1/1 Running 0 48m 10.xxxxxxx kirk pod/nginx-95f4c5857-f7g8n 1/1 Running 3 48d 10.xxxxxxx kirk pod/nginx-95f4c5857-qpmf7 1/1 Running 3 48d 10.xxxxxxx spock
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR service/hello-app-lb LoadBalancer 10.xxxxxxxxxxx 12345:32078/TCP 48m app=hello-app service/kubernetes ClusterIP 10.xxxxxxx 443/TCP 98d service/nginx-service NodePort 10.xxxxxxxxx 80:30800/TCP 48d app=nginx
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR deployment.apps/hello-app 2/2 2 2 48m hello-app lister1308/python-hello-app:0.0.1 app=hello-app deployment.apps/nginx 2/2 2 2 48d nginx nginx:latest app=nginx
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR replicaset.apps/hello-app-85d64585f9 2 2 2 48m hello-app lister1308/python-hello-app:0.0.1 app=hello-app,pod-template-hash=85d64585f9 replicaset.apps/nginx-95f4c5857 2 2 2 48d nginx nginx:latest app=nginx,pod-template-hash=95f4c5857