Minikube Tutorial
Gepostet am 04. Dezember 2022 • 10 Minuten • 2054 Wörter • Andere Sprachen: English
Minikube installieren
- Voraussetzungen und Installationsanleitung: https://minikube.sigs.k8s.io/docs/start/
- Driver: https://minikube.sigs.k8s.io/docs/drivers/
Wie funktioniert Minikube?
Einen Cluster starten und verwalten
!minikube start
😄 minikube v1.28.0 auf Darwin 13.0 (arm64)
✨ Verwende den Treiber docker basierend auf der Benutzer-Konfiguration
📌 Using Docker Desktop driver with root privileges
👍 Starte Control Plane Node minikube in Cluster minikube
🚜 Ziehe das Base Image ...
🔥 Erstelle docker container (CPUs=2, Speicher=4000MB) ...
🐳 Vorbereiten von Kubernetes v1.25.3 auf Docker 20.10.20...
▪ Generiere Zertifikate und Schlüssel ...
▪ Starte Control-Plane ...
▪ Konfiguriere RBAC Regeln ...
🔎 Verifiziere Kubernetes Komponenten...
▪ Verwende Image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Addons aktiviert: default-storageclass, storage-provisioner
🏄 Fertig! kubectl ist jetzt für die standardmäßige (default) Verwendung des Clusters "minikube und des Namespaces "default" konfiguriert
!minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
!minikube pause
⏸️ Pausiere Node minikube ...
⏯️ 14 Container pausiert in: kube-system, kubernetes-dashboard, storage-gluster, istio-operator
!minikube unpause
⏸️ Reaktiviere pausierten Node minikube ...
⏸️ Reaktiviere 14 pausierte Container in: kube-system, kubernetes-dashboard, storage-gluster, istio-operator
!minikube stop
✋ Stoppe Node "minikube" ...
🛑 minikube" wird über SSH ausgeschaltet...
🛑 1 Node angehalten.
!minikube delete
🔥 minikube" in docker wird gelöscht...
🔥 Lösche Container "minikube" ...
🔥 /Users/mitja/.minikube/machines/minikube wird entfernt...
💀 Alle Spuren des "minikube" Clusters wurden entfernt.
Kubeconfig und kubectl
!minikube start
😄 minikube v1.28.0 auf Darwin 13.0 (arm64)
✨ Verwende den Treiber docker basierend auf der Benutzer-Konfiguration
📌 Using Docker Desktop driver with root privileges
👍 Starte Control Plane Node minikube in Cluster minikube
🚜 Ziehe das Base Image ...
🔥 Erstelle docker container (CPUs=2, Speicher=4000MB) ...
🐳 Vorbereiten von Kubernetes v1.25.3 auf Docker 20.10.20...
▪ Generiere Zertifikate und Schlüssel ...
▪ Starte Control-Plane ...
▪ Konfiguriere RBAC Regeln ...
🔎 Verifiziere Kubernetes Komponenten...
▪ Verwende Image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Addons aktiviert: storage-provisioner, default-storageclass
🏄 Fertig! kubectl ist jetzt für die standardmäßige (default) Verwendung des Clusters "minikube und des Namespaces "default" konfiguriert
!kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube NotReady control-plane 12s v1.25.3
!minikube kubectl -- get pods
No resources found in default namespace.
Persistente Konfiguration
!minikube config view
- driver: docker
- cache: map[gcr.io/kuar-demo/kuard-arm64:purple:<nil>]
!minikube config defaults kubernetes-version | grep 1.25
* v1.25.3
* v1.25.2
* v1.25.1
* v1.25.0
* v1.25.0-rc.1
* v1.25.0-rc.0
* v1.25.0-beta.0
* v1.25.0-alpha.3
* v1.25.0-alpha.2
* v1.25.0-alpha.1
Profile für mehrere Cluster
!minikube profile list
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|
| Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes | Active |
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|
| minikube | docker | docker | 192.168.49.2 | 8443 | v1.25.3 | Running | 1 | * |
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|
!minikube profile
minikube
!minikube start -p cluster2 --memory=4g --cpus=2
😄 [cluster2] minikube v1.28.0 auf Darwin 13.0 (arm64)
✨ Verwende den Treiber docker basierend auf der Benutzer-Konfiguration
📌 Using Docker Desktop driver with root privileges
👍 Starte Control Plane Node cluster2 in Cluster cluster2
🚜 Ziehe das Base Image ...
🔥 Erstelle docker container (CPUs=2, Speicher=4096MB) ...
🐳 Vorbereiten von Kubernetes v1.25.3 auf Docker 20.10.20...
▪ Generiere Zertifikate und Schlüssel ...
▪ Starte Control-Plane ...
▪ Konfiguriere RBAC Regeln ...
🔎 Verifiziere Kubernetes Komponenten...
▪ Verwende Image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Addons aktiviert: default-storageclass, storage-provisioner
🏄 Fertig! kubectl ist jetzt für die standardmäßige (default) Verwendung des Clusters "cluster2 und des Namespaces "default" konfiguriert
!minikube profile list
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|
| Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes | Active |
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|
| cluster2 | docker | docker | 192.168.58.2 | 8443 | v1.25.3 | Running | 1 | |
| minikube | docker | docker | 192.168.49.2 | 8443 | v1.25.3 | Running | 1 | * |
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|
!minikube profile cluster2
✅ Minikube Profil wurde erfolgreich gesetzt auf cluster2
!minikube delete
🔥 cluster2" in docker wird gelöscht...
🔥 Lösche Container "cluster2" ...
🔥 /Users/mitja/.minikube/machines/cluster2 wird entfernt...
💀 Alle Spuren des "cluster2" Clusters wurden entfernt.
!minikube profile list
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|
| Profile | VM Driver | Runtime | IP | Port | Version | Status | Nodes | Active |
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|
| minikube | docker | docker | 192.168.49.2 | 8443 | v1.25.3 | Running | 1 | * |
|----------|-----------|---------|--------------|------|---------|---------|-------|--------|
Minikube Addons
!minikube addons list
|-----------------------------|----------|--------------|--------------------------------|
| ADDON NAME | PROFILE | STATUS | MAINTAINER |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador | minikube | disabled | 3rd party (Ambassador) |
| auto-pause | minikube | disabled | Google |
| cloud-spanner | minikube | disabled | Google |
| csi-hostpath-driver | minikube | disabled | Kubernetes |
| dashboard | minikube | disabled | Kubernetes |
| default-storageclass | minikube | enabled ✅ | Kubernetes |
| efk | minikube | disabled | 3rd party (Elastic) |
| freshpod | minikube | disabled | Google |
| gcp-auth | minikube | disabled | Google |
| gvisor | minikube | disabled | Google |
| headlamp | minikube | disabled | 3rd party (kinvolk.io) |
| helm-tiller | minikube | disabled | 3rd party (Helm) |
| inaccel | minikube | disabled | 3rd party (InAccel |
| | | | [[email protected]]) |
| ingress | minikube | disabled | Kubernetes |
| ingress-dns | minikube | disabled | Google |
| istio | minikube | disabled | 3rd party (Istio) |
| istio-provisioner | minikube | disabled | 3rd party (Istio) |
| kong | minikube | disabled | 3rd party (Kong HQ) |
| kubevirt | minikube | disabled | 3rd party (KubeVirt) |
| logviewer | minikube | disabled | 3rd party (unknown) |
| metallb | minikube | disabled | 3rd party (MetalLB) |
| metrics-server | minikube | disabled | Kubernetes |
| nvidia-driver-installer | minikube | disabled | Google |
| nvidia-gpu-device-plugin | minikube | disabled | 3rd party (Nvidia) |
| olm | minikube | disabled | 3rd party (Operator Framework) |
| pod-security-policy | minikube | disabled | 3rd party (unknown) |
| portainer | minikube | disabled | 3rd party (Portainer.io) |
| registry | minikube | disabled | Google |
| registry-aliases | minikube | disabled | 3rd party (unknown) |
| registry-creds | minikube | disabled | 3rd party (UPMC Enterprises) |
| storage-provisioner | minikube | enabled ✅ | Google |
| storage-provisioner-gluster | minikube | disabled | 3rd party (Gluster) |
| volumesnapshots | minikube | disabled | Kubernetes |
|-----------------------------|----------|--------------|--------------------------------|
!minikube addons enable dashboard
💡 dashboard is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
▪ Verwende Image docker.io/kubernetesui/dashboard:v2.7.0
▪ Verwende Image docker.io/kubernetesui/metrics-scraper:v1.0.8
💡 Einige Dashboard Features erfordern das metrics-server Addon. Um alle Features zu aktivieren:
minikube addons enable metrics-server
🌟 Das Addon dashboard ist aktiviert
!minikube addons enable metrics-server
💡 metrics-server is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
▪ Verwende Image k8s.gcr.io/metrics-server/metrics-server:v0.6.1
🌟 Das Addon metrics-server ist aktiviert
!minikube dashboard
🤔 Verifiziere Dashboard Funktionalität ...
🚀 Starte Proxy ...
🤔 Verifiziere Proxy Funktionalität ...
🎉 Öffne http://127.0.0.1:52608/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ im Default-Browser...
^C
Services exponieren
!minikube kubectl -- create deployment hello --image=gcr.io/google-samples/hello-app:1.0
deployment.apps/hello created
!kubectl expose deployment hello --type=NodePort --port=8080
service/hello exposed
!minikube service hello --url
http://127.0.0.1:52975
❗ Weil Sie einen Docker Treiber auf darwin verwenden, muss das Terminal während des Ausführens offen bleiben.
^C
Eine bestehende Anwendung auf Minikube deployen
!minikube kubectl -- get nodes,ns
NAME STATUS ROLES AGE VERSION
node/minikube Ready control-plane 103s v1.25.3
NAME STATUS AGE
namespace/default Active 101s
namespace/kube-node-lease Active 103s
namespace/kube-public Active 103s
namespace/kube-system Active 103s
!minikube kubectl -- create ns hello
namespace/hello created
!minikube kubectl -- -n hello create deployment hello \
--image gcr.io/kuar-demo/kuard-arm64:purple
deployment.apps/hello created
!minikube kubectl -- -n hello expose deployment hello \
--type=NodePort \
--port=8080
service/hello exposed
!minikube kubectl -- -n hello get service hello
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello NodePort 10.101.41.229 <none> 8080:30008/TCP 3s
!minikube service -n hello hello --url
http://127.0.0.1:53059
❗ Weil Sie einen Docker Treiber auf darwin verwenden, muss das Terminal während des Ausführens offen bleiben.
^C
!minikube dashboard
🔌 Aktiviere Dashboard ...
▪ Verwende Image docker.io/kubernetesui/dashboard:v2.7.0
▪ Verwende Image docker.io/kubernetesui/metrics-scraper:v1.0.8
💡 Einige Dashboard Features erfordern das metrics-server Addon. Um alle Features zu aktivieren:
minikube addons enable metrics-server
🤔 Verifiziere Dashboard Funktionalität ...
🚀 Starte Proxy ...
🤔 Verifiziere Proxy Funktionalität ...
🎉 Öffne http://127.0.0.1:53086/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ im Default-Browser...
^C
!minikube kubectl -- delete ns hello
namespace "hello" deleted
Ein Container Image für eine Anwendung mit Minikube bauen und testen
!git clone https://github.com/mitja/flask-example
fatal: destination path 'flask-example' already exists and is not an empty directory.
!cd flask-example && minikube image build -t flask-example .
Sending build context to Docker daemon 74.24kB
Step 1/10 : FROM python:3.11-alpine
3.11-alpine: Pulling from library/python
a9eaa45ef418: Pulling fs layer
d462052b8b5e: Pulling fs layer
d39a1ce7ce55: Pulling fs layer
716a594288ba: Pulling fs layer
711e9c1e0bb1: Pulling fs layer
716a594288ba: Waiting
711e9c1e0bb1: Waiting
d462052b8b5e: Verifying Checksum
d462052b8b5e: Download complete
716a594288ba: Verifying Checksum
716a594288ba: Download complete
a9eaa45ef418: Verifying Checksum
a9eaa45ef418: Download complete
a9eaa45ef418: Pull complete
d462052b8b5e: Pull complete
711e9c1e0bb1: Verifying Checksum
711e9c1e0bb1: Download complete
d39a1ce7ce55: Download complete
d39a1ce7ce55: Pull complete
716a594288ba: Pull complete
711e9c1e0bb1: Pull complete
Digest: sha256:ca1298a74c3495b6bc539044352301fa371f6e10b0e085f93d2a4ef3e4c3fa6c
Status: Downloaded newer image for python:3.11-alpine
---> 09701b4c57d8
Step 2/10 : RUN adduser -D flask
---> Running in 87e9accc6ac2
Removing intermediate container 87e9accc6ac2
---> f770c98c3022
Step 3/10 : USER flask
---> Running in 8f7e63001248
Removing intermediate container 8f7e63001248
---> 8b6aab090307
Step 4/10 : WORKDIR /home/flask
---> Running in d134f79164eb
Removing intermediate container d134f79164eb
---> 3041a00df918
Step 5/10 : ENV PATH="/home/flask/.local/bin:${PATH}"
---> Running in 781437b76e4d
Removing intermediate container 781437b76e4d
---> c84a4061908e
Step 6/10 : COPY --chown=flask:flask requirements.txt requirements.txt
---> 256428e35f34
Step 7/10 : RUN pip install --user -r requirements.txt
---> Running in ba28c1ff17b7
Collecting Flask==2.2.2
Downloading Flask-2.2.2-py3-none-any.whl (101 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 101.5/101.5 kB 2.6 MB/s eta 0:00:00
Collecting Werkzeug>=2.2.2
Downloading Werkzeug-2.2.2-py3-none-any.whl (232 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 232.7/232.7 kB 6.0 MB/s eta 0:00:00
Collecting Jinja2>=3.0
Downloading Jinja2-3.1.2-py3-none-any.whl (133 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.1/133.1 kB 6.0 MB/s eta 0:00:00
Collecting itsdangerous>=2.0
Downloading itsdangerous-2.1.2-py3-none-any.whl (15 kB)
Collecting click>=8.0
Downloading click-8.1.3-py3-none-any.whl (96 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 6.3 MB/s eta 0:00:00
Collecting MarkupSafe>=2.0
Downloading MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl (33 kB)
Installing collected packages: MarkupSafe, itsdangerous, click, Werkzeug, Jinja2, Flask
Successfully installed Flask-2.2.2 Jinja2-3.1.2 MarkupSafe-2.1.2 Werkzeug-2.2.2 click-8.1.3 itsdangerous-2.1.2
Removing intermediate container ba28c1ff17b7
---> 8340c47c3836
Step 8/10 : COPY --chown=flask:flask . .
---> f10e85d4f5bf
Step 9/10 : EXPOSE 5000
---> Running in c13f52b7ba0e
Removing intermediate container c13f52b7ba0e
---> dc3c08706b61
Step 10/10 : CMD ["python", "app.py"]
---> Running in b6b49707167e
Removing intermediate container b6b49707167e
---> d4adb787c5f4
Successfully built d4adb787c5f4
Successfully tagged flask-example:latest
!cat flask-example/deployment.yml | grep -B 4 imagePullPolicy
spec:
containers:
- name: flask
image: flask-example:latest
imagePullPolicy: Never
!minikube kubectl -- apply -f flask-example/deployment.yml
deployment.apps/flask-example-deployment created
service/flask-example-service created
!minikube kubectl -- \
run -it --rm --restart=Never \
--image curlimages/curl my-shell -- \
curl flask-example-service:5000
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Flask Example</title>
</head>
<body>
<h1>Flask Example</h1>
<p>This is a Flask App containerised with Docker</p>
</body>
</html>pod "my-shell" deleted
Einen Web Service mit Ingress veröffentlichen
!minikube addons enable ingress
💡 ingress is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
💡 Nachdem das Addon aktiviert wurde, führen Sie bitte "minikube tunnel" aus, dann sind ihre Resourcen über "127.0.0.1" erreichbar
▪ Verwende Image k8s.gcr.io/ingress-nginx/controller:v1.2.1
▪ Verwende Image k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1
▪ Verwende Image k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1
🔎 Verifiziere ingress Addon...
🌟 Das Addon ingress ist aktiviert
!minikube kubectl -- get pod,service -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-admission-create-5kg4m 0/1 Completed 0 31s
pod/ingress-nginx-admission-patch-dmzwc 0/1 Completed 0 31s
pod/ingress-nginx-controller-5959f988fd-h9xkj 0/1 Running 0 31s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller NodePort 10.111.21.253 <none> 80:30430/TCP,443:30276/TCP 31s
service/ingress-nginx-controller-admission ClusterIP 10.108.57.79 <none> 443/TCP 31s
!minikube kubectl -- \
create deployment web \
--image=gcr.io/google-samples/hello-app:1.0
deployment.apps/web created
!minikube kubectl -- \
expose deployment web \
--type=NodePort --port=8080
service/web exposed
!minikube service web --url
http://127.0.0.1:53321
❗ Weil Sie einen Docker Treiber auf darwin verwenden, muss das Terminal während des Ausführens offen bleiben.
^C
!cat example-ingress.yaml | grep -A 11 spec
spec:
rules:
- host: hello-world.info
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 8080
!minikube kubectl -- \
apply -f example-ingress.yaml
ingress.networking.k8s.io/example-ingress created
!minikube kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress nginx hello-world.info 80 5s
!minikube ip
192.168.49.2
Füge diese Zeile zur /etc/hosts hinzu:
127.0.0.1 hello-world.info
und starte minikube tunnel
(sudo / Administrator Rechte erforderlich)
!minikube delete
!minikube delete
🔥 minikube" in docker wird gelöscht...
🔥 Lösche Container "minikube" ...
🔥 /Users/mitja/.minikube/machines/minikube wird entfernt...
💀 Alle Spuren des "minikube" Clusters wurden entfernt.