k3d create --publish 8080:8080 --name testcls1 --workers 3
https://felixwiedmann.de/k3d-manage-k3s-clusters/
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: k3d-demo-deployment
namespace: k3d-demo
spec:
replicas: 2
selector:
matchLabels:
app: k3d-demo
template:
metadata:
labels:
app: k3d-demo
spec:
containers:
- name: k3d-demo
image: agabert/beacon
resources:
requests:
memory: "32Mi"
cpu: "10m"
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: k3d-demo
namespace: k3d-demo
spec:
ports:
- port: 80
targetPort: 80
name: http
selector:
app: k3d-demo
kubectl apply -f demo-app.yaml
kubectl --namespace=k3d-demo run -it --image=alpine helper-container
in bash in helper container: wget -SO- k3d-demo/metrics
or $ apk add curl curl -s k3d-demo/metrics
Lets try to get the http-server available from outside the cluster. Here you can use the NodePort or LoadBalancer resource. Change the service from ClusterIP to LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
name: k3d-demo
namespace: k3d-demo
spec:
type: LoadBalancer
ports:
- port: 8080 # because else it requires sudo access to create low port number and will be stuck in pending state
targetPort: 80
name: http
selector:
app: k3d-demo
docker network ls docker network inspect k3d-testcls1 host
https://kubernetes.io/docs/concepts/services-networking/ingress/#name-based-virtual-hosting