Compare commits

...

3 Commits

Author SHA1 Message Date
John Kenyon 6f8fa4c9dc add more commands for k3d 2025-06-24 08:07:34 -07:00
John Kenyon d5bae5f9da Add k3d version in progress 2025-06-23 16:10:34 -07:00
John Kenyon d52d0df00c Add general command to makefile 2025-06-23 16:10:05 -07:00
10 changed files with 164 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"]

36
hello-k3d/Makefile Normal file
View File

@ -0,0 +1,36 @@
all: cluster image load apply restart check
# TODO: maybe background this?
cluster:
k3d cluster create mycluster --port "8080:80@loadbalancer" --port "8443:443@loadbalancer"
kubectl label node k3d-mycluster-server-0 ingress-ready=true
k3d cluster list
image: Dockerfile
docker build -t shoppinglist-frontend:latest .
# TODO: This is not working on my system
load:
k3d image import shoppinglist-frontend:latest -c mycluster
#docker save shoppinglist-frontend:latest -o shoppinglist-frontend.tar
#k3d image import ./shoppinglist-frontend.tar -c mycluster
apply:
kubectl apply -f k8s/
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.0/deploy/static/provider/kind/deploy.yaml
restart:
kubectl delete pod -l app=shoppinglist-frontend
check:
kubectl get pods
kubectl get pods -n ingress-nginx
watch:
kubectl get pods -l app=shoppinglist-frontend -w
clobber:
k3d cluster delete mycluster

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

View File

@ -1,5 +1,7 @@
all: cluster image load apply restart watch
cluster: kind-config.yaml
kind create cluster --config kind-config.yaml