Add k3d version in progress

main
John Kenyon 2025-06-23 16:10:34 -07:00
parent d52d0df00c
commit d5bae5f9da
9 changed files with 154 additions and 0 deletions

1
hello-k3d/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
shoppinglist-frontend.tar

6
hello-k3d/Dockerfile Normal file
View File

@ -0,0 +1,6 @@
FROM python:3.11-slim
WORKDIR /app
COPY app.py .
RUN pip install flask redis
CMD ["python", "app.py"]

28
hello-k3d/Makefile Normal file
View File

@ -0,0 +1,28 @@
all: cluster image load apply restart watch
# TODO: maybe background this?
cluster:
k3d cluster create mycluster
k3d cluster list
image: Dockerfile
docker build -t shoppinglist-frontend:latest .
load:
k3d image import shoppinglist-frontend:latest -c mycluster
apply:
kubectl apply -f k8s/
restart:
kubectl delete pod -l app=shoppinglist-frontend
watch:
kubectl get pods -l app=shoppinglist-frontend -w

29
hello-k3d/app.py Normal file
View File

@ -0,0 +1,29 @@
# app.py
from flask import Flask, request, jsonify
import redis
import random
my_random_id = random.randrange(100)
r = redis.Redis(host='redis', port=6379)
app = Flask(__name__)
@app.route("/id", methods=["GET"])
def id():
return f"{my_random_id}\n"
@app.route("/items", methods=["GET", "POST"])
def items():
if request.method == "POST":
item = request.json.get("item")
if item:
r.rpush("shopping_list", item)
return '', 204
else:
items = r.lrange("shopping_list", 0, -1)
return jsonify([i.decode() for i in items])
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)

View File

@ -0,0 +1,26 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: shoppinglist-frontend
spec:
replicas: 3
selector:
matchLabels:
app: shoppinglist-frontend
template:
metadata:
labels:
app: shoppinglist-frontend
spec:
containers:
- name: frontend
image: shoppinglist-frontend:latest
imagePullPolicy: Never
ports:
- containerPort: 5000
env:
- name: REDIS_HOST
value: redis
- name: REDIS_PORT
value: "6379"

View File

@ -0,0 +1,20 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: shoppinglist-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: localhost
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: shoppinglist-frontend
port:
number: 80

View File

@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: shoppinglist-frontend
spec:
selector:
app: shoppinglist-frontend
ports:
- port: 80
targetPort: 5000
type: NodePort

View File

@ -0,0 +1,20 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:7-alpine
ports:
- containerPort: 6379

View File

@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
selector:
app: redis
ports:
- port: 6379
targetPort: 6379
type: ClusterIP