Inhaltsverzeichnis:

kubernetes - minikube

2023-11-22 / 2024-04-28

Notizsammlung zu Kubernetes, diese steckt aber noch in den Kinderfüßen...
Siehe dazu die Beispiele im Github, darin sind auch yamls abgelegt. Im VSCode kann Kubernetes bequem als GUI und Commands verwendet werden.

install kubectl

sudo apt update && sudo apt install -y apt-transport-https
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

Install minikube - "quickly sets up a local Kubernetes cluster"

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

start cluster

minikube start
# für die Benutzung von von NetworkPolicies siehe unten...

start dashboardweboberfläche

minikube addons enable metrics-server

# Das Dashboard bleibt in der jeweiligen Session aktiv und wird durch beenden der Session auch wieder beendet. 
minikube dashboard

local Registry

install

minikube addons enable registry

echo $(minikube ip)
sudo nano /etc/docker/daemon.json
{
    "insecure-registries" : [ "<minikube ip>:5000" ]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
minikube start

use

# bauen oder taggen
docker build --tag $(minikube ip):5000/<image> .
docker tag <image> $(minikube ip):5000/<image>

# schubsen
docker push $(minikube ip):5000/test-img

# benutzen im manifest
localhost:5000/<image>

notes

Die Registry ist nicht persistiert und muss nach einem Restart neu befüttert werden.

delete

minikube delete --all --purge

Services

LoadBalancer

# open direct in browser...
minikube service <service-name> --namespace <namespace>  
# get the URL
minikube service <service-name> --namespace <namespace> --url

# tunnel zum cluster bzw. service erstellen
minikube tunnel

# deploy LoadBalancer Service with external IP
  externalIPs: # external fixed IP addresses
    - <minikube ip>

NetworkPolicies

Per default werden von minikube keine NetworkPolicies unterstützt. Bei der Ersteinrichtung kann das CNI auf calico geändert werden, so kann auch mit NetworkPolicies gearbeitet werden.

minikube start --cni calico

 Mein minikube...

# function in .bash_aliases
function mykube {
    minikube start --cni calico

    # Bei der Erstinstallation Addons Aktivieren...
    minikube addons enable metrics-server
    minikube addons enable registry

    # Sleep vor Push notwendig!
    echo "wait for push ..."
   for i in {0..99}; do if [ $i -lt 10 ]; then echo -ne 'wait for push ...   '$i'%\r'; else echo -ne 'wait for push ...  '$i'%\r'; fi; sleep 0.3s; done; echo 'wait for push ... 100%'

    # Push Images
    docker push 192.168.49.2:5000/js-motd-kubernetes-example
    docker push 192.168.49.2:5000/ubuntu-bash
}

Notes

~/.kube/config

minikube addons list
| ingress                     | minikube | disabled     | Kubernetes
| ingress-dns                 | minikube | disabled     | minikube

https://kubernetes.io/de/docs/tasks/tools/install-kubectl/
https://kubernetes.io/docs/concepts/storage/
https://kubernetes.io/docs/concepts/configuration/
https://kubernetes.io/docs/concepts/services-networking/network-policies/

https://min.io/

https://github.com/kubernetes/ingress-nginx

https://docs.k3s.io/quick-start

https://minikube.sigs.k8s.io/docs/start/
https://minikube.sigs.k8s.io/docs/tutorials/setup_minikube_gui/