Minikube
Kubernetes

Ściągawka – Kubernetes / Minikube / Docker

1. Tworzenie kontenera (Docker)

# uruchomienie kontenera z Apache
docker run -d --name apache -p 8080:80 httpd:2.4

# uruchomienie kontenera z Apache + PHP
docker run -d --name php-apache -p 8080:80 php:8.2-apache

2. Deploy z pliku YAML

# zastosowanie konfiguracji z pliku
minikube kubectl -- apply -f apache-deployment.yaml

3. Zrzut konfiguracji poda do pliku

# zapis pełnej konfiguracji poda do pliku YAML
minikube kubectl -- get pod NAZWA-PODA -o yaml > pod.yaml

# zapis konfiguracji deploymentu
minikube kubectl -- get deployment apache -o yaml > apache-deployment-dump.yaml

# zapis konfiguracji deploymentu bez tworzenia poda
kubectl run moj-pod  --image=nginx  --dry-run=client  -o yaml > pod.yaml

4. Zalogowanie się do poda

# wejście do poda z powłoką sh
minikube kubectl -- exec -it NAZWA-PODA -- /bin/sh

# przykład
minikube kubectl -- exec -it apache-d59967b49-mwtvq -- /bin/sh

5. Wyświetlenie listy podów

# wszystkie pody w namespace
minikube kubectl -- get pods

# pody z konkretną etykietą
minikube kubectl -- get pods -l app=apache

# lista podów z nazwą i obrazem kontenera
kubectl get pod -o custom-columns=CONTAINER:.metadata.name,IMAGE:.spec.containers[0].image
minikube kubectl -- get pod -o custom-columns=CONTAINER:.metadata.name,IMAGE:.spec.containers[0].image

6. Service, Ingress, szczegóły

# lista serwisów
minikube kubectl -- get svc

# szczegóły serwisu
minikube kubectl -- describe svc apache-service

# lista ingressów
minikube kubectl -- get ingress

# szczegóły ingressu
minikube kubectl -- describe ingress NAZWA-INGRESSU

7. Restart i status deploymentu

# restart deploymentu
minikube kubectl -- rollout restart deployment apache

# status rollout
minikube kubectl -- rollout status deployment apache

8. Testowanie z hosta (curl)

# test przez Ingress (Host: apache.local)
curl -H "Host: apache.local" http://192.168.49.2

# test konkretnego pliku
curl -H "Host: apache.local" http://192.168.49.2/pod.txt

9. NFS – szybkie przypomnienie

# sprawdzenie zawartości katalogu montowanego w podzie
minikube kubectl -- exec -it NAZWA-PODA -- ls -l /usr/local/apache2/htdocs

10. HPA – autoskalowanie podów

# włączenie metrics-server (wymagane do HPA)
minikube addons enable metrics-server

# podgląd autoskalera
minikube kubectl -- get hpa

# podgląd autoskalera na żywo
minikube kubectl -- get hpa --watch

# utworzenie HPA (CPU > 70%)
minikube kubectl -- autoscale deployment apache --cpu-percent=70 --min=2 --max=10

# usunięcie HPA
minikube kubectl -- delete hpa apache

# sprawdzanie podów podczas skalowania
minikube kubectl -- get pods -w

11. Usuwanie / ubijanie poda

# usunięcie (ubicie) konkretnego poda
minikube kubectl -- delete pod NAZWA-PODA

# przykład
minikube kubectl -- delete pod apache-12345abcd-xyz

12. Tworzenie poda

# utworzenie prostego poda z obrazem nginx
minikube kubectl -- run moj-pod --image=nginx

# utworzenie poda z otwartym portem 80
minikube kubectl -- run web --image=nginx --port=80

# utworzenie poda i zapisanie YAML zamiast uruchamiania
minikube kubectl -- run test --image=nginx --dry-run=client -o yaml > pod.yaml

# usunięcie poda
minikube kubectl -- delete pod NAZWA-PODA

13. Przenoszenie Deploymentu do innego namespace

# 1. Sprawdzenie, gdzie istnieje Deployment
minikube kubectl -- get deployment --all-namespaces

# 2. Usunięcie starego Deploymentu z default (jeśli istnieje)
minikube kubectl -- delete deployment apache -n default

# 3. Utworzenie namespace (jeśli jeszcze nie istnieje)
minikube kubectl -- create namespace moj-namespace

# 4. Dodanie namespace do YAML
# metadata:
#   name: apache
#   namespace: moj-namespace

# 5. Zastosowanie YAML w nowym namespace
minikube kubectl -- apply -f apache-deployment.yaml

# 6. Sprawdzenie podów w nowym namespace
minikube kubectl -- get pods -n moj-namespace

7. Usuwanie zasobów

# usunięcie zasobu z pliku YAML
minikube kubectl -- delete -f apache-deployment.yaml

# usunięcie konkretnego poda
minikube kubectl -- delete pod NAZWA-PODA

# usunięcie deploymentu po nazwie
minikube kubectl -- delete deployment apache

8. Deployment – lista i szczegóły

# lista deploymentów
minikube kubectl -- get deployments

# szczegóły konkretnego deploymentu
minikube kubectl -- describe deployment NAZWA-DEPLOYMENTU

# lista repliksetów powiązanych z deploymentem
minikube kubectl -- get rs

# szczegóły konkretnego replicaset
minikube kubectl -- describe rs NAZWA-RS

9. Namespace – lista, tworzenie, przełączanie, usuwanie

# wyświetlenie listy namespace
minikube kubectl -- get ns

# przejście do konkretnego namespace
minikube kubectl -- config set-context --current --namespace=moj-namespace

# jednorazowe użycie namespace
minikube kubectl -- get pods -n moj-namespace

# dodanie namespace
minikube kubectl -- create namespace moj-namespace

# usunięcie namespace
minikube kubectl -- delete namespace moj-namespace

# wyświetlenie podów w namespace
minikube kubectl -- get pods -n moj-namespace

# wyświetlenie deploymentów w namespace
minikube kubectl -- get deployments -n moj-namespace

# wyświetlenie wszystkich podów
minikube kubectl -- get pods -A

11. Systemowe pody Kubernetes – co to jest?

# coredns
DNS klastra – pozwala podom odnajdywać usługi po nazwie.

# etcd
Wewnętrzna baza danych Kubernetes – przechowuje cały stan klastra.

# kube-apiserver
Główny punkt wejścia do klastra.

# kube-controller-manager
Zestaw kontrolerów – pilnuje replik i obiektów.

# kube-scheduler
Decyduje, gdzie uruchomić nowy pod.

# kube-proxy
Warstwa sieciowa – iptables/IPVS.

# metrics-server
Zbiera metryki CPU/RAM.

# storage-provisioner
Dynamiczne PV dla PVC.

12. Architektura produkcyjnego klastra Kubernetes

# minimalny klaster produkcyjny (HA)
3 × control-plane
2 × worker

# rola control-plane
- etcd
- API Server
- Scheduler
- Controller Manager

# rola worker
- pody aplikacyjne
- kube-proxy

# typowe parametry
CPU: 4–8 vCPU
RAM: 16–32 GB
Dysk: SSD/NVMe

# enterprise
3 × control-plane
10–100 × worker

15. Sekrety – listowanie, podgląd, dekodowanie

# lista sekretów
minikube kubectl -- get secrets

# szczegóły sekretu
minikube kubectl -- describe secret NAZWA-SEKRETU

# YAML sekretu
minikube kubectl -- get secret NAZWA-SEKRETU -o yaml

# dekodowanie klucza
minikube kubectl -- get secret NAZWA-SEKRETU \
  -o jsonpath="{.data.KEY}" | base64 -d

Ściągawka – Kubernetes (kubeadm / produkcyjny klaster)

1. Tworzenie kontenera (Docker)

# uruchomienie kontenera z Apache
docker run -d --name apache -p 8080:80 httpd:2.4

# uruchomienie kontenera z Apache + PHP
docker run -d --name php-apache -p 8080:80 php:8.2-apache

2. Deploy z pliku YAML

# zastosowanie konfiguracji z pliku
kubectl apply -f apache-deployment.yaml

3. Zrzut konfiguracji poda do pliku

# zapis pełnej konfiguracji poda do pliku YAML
kubectl get pod NAZWA-PODA -o yaml > pod.yaml

# zapis konfiguracji deploymentu
kubectl get deployment apache -o yaml > apache-deployment-dump.yaml

# zapis konfiguracji deploymentu bez tworzenia poda
kubectl run moj-pod --image=nginx --dry-run=client -o yaml > pod.yaml

4. Zalogowanie się do poda

# wejście do poda z powłoką sh
kubectl exec -it NAZWA-PODA -- /bin/sh

# przykład
kubectl exec -it apache-d59967b49-mwtvq -- /bin/sh

5. Wyświetlenie listy podów

# wszystkie pody w namespace
kubectl get pods

# pody z konkretną etykietą
kubectl get pods -l app=apache

# lista podów z nazwą i obrazem kontenera
kubectl get pod -o custom-columns=CONTAINER:.metadata.name,IMAGE:.spec.containers[0].image

6. Service, Ingress, szczegóły

# lista serwisów
kubectl get svc

# szczegóły serwisu
kubectl describe svc apache-service

# lista ingressów
kubectl get ingress

# szczegóły ingressu
kubectl describe ingress NAZWA-INGRESSU

7. Restart i status deploymentu

# restart deploymentu
kubectl rollout restart deployment apache

# status rollout
kubectl rollout status deployment apache

8. Testowanie z hosta (curl)

# test przez Ingress (Host: apache.local)
curl -H "Host: apache.local" http://ADRES-LOADBALANCERA

# test konkretnego pliku
curl -H "Host: apache.local" http://ADRES-LOADBALANCERA/pod.txt

9. NFS – szybkie przypomnienie

# sprawdzenie zawartości katalogu montowanego w podzie
kubectl exec -it NAZWA-PODA -- ls -l /usr/local/apache2/htdocs

10. HPA – autoskalowanie podów

# włączenie metrics-server (jeśli nie ma w klastrze)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

# podgląd autoskalera
kubectl get hpa

# podgląd autoskalera na żywo
kubectl get hpa --watch

# utworzenie HPA (CPU > 70%)
kubectl autoscale deployment apache --cpu-percent=70 --min=2 --max=10

# usunięcie HPA
kubectl delete hpa apache

# sprawdzanie podów podczas skalowania
kubectl get pods -w

11. Usuwanie / ubijanie poda

# usunięcie (ubicie) konkretnego poda
kubectl delete pod NAZWA-PODA

# przykład
kubectl delete pod apache-12345abcd-xyz

12. Tworzenie poda

# utworzenie prostego poda z obrazem nginx
kubectl run moj-pod --image=nginx

# utworzenie poda z otwartym portem 80
kubectl run web --image=nginx --port=80

# utworzenie poda i zapisanie YAML zamiast uruchamiania
kubectl run test --image=nginx --dry-run=client -o yaml > pod.yaml

# usunięcie poda
kubectl delete pod NAZWA-PODA

13. Przenoszenie Deploymentu do innego namespace

# 1. Sprawdzenie, gdzie istnieje Deployment
kubectl get deployment --all-namespaces

# 2. Usunięcie starego Deploymentu
kubectl delete deployment apache -n default

# 3. Utworzenie namespace
kubectl create namespace moj-namespace

# 4. Dodanie namespace do YAML
# metadata:
#   name: apache
#   namespace: moj-namespace

# 5. Zastosowanie YAML
kubectl apply -f apache-deployment.yaml

# 6. Sprawdzenie podów
kubectl get pods -n moj-namespace

7. Usuwanie zasobów

# usunięcie zasobu z pliku YAML
kubectl delete -f apache-deployment.yaml

# usunięcie konkretnego poda
kubectl delete pod NAZWA-PODA

# usunięcie deploymentu
kubectl delete deployment apache

8. Deployment – lista i szczegóły

# lista deploymentów
kubectl get deployments

# szczegóły konkretnego deploymentu
kubectl describe deployment NAZWA-DEPLOYMENTU

# lista repliksetów
kubectl get rs

# szczegóły replicaset
kubectl describe rs NAZWA-RS

9. Namespace – lista, tworzenie, przełączanie, usuwanie

# lista namespace
kubectl get ns

# ustawienie domyślnego namespace
kubectl config set-context --current --namespace=moj-namespace

# jednorazowe użycie namespace
kubectl get pods -n moj-namespace

# dodanie namespace
kubectl create namespace moj-namespace

# usunięcie namespace
kubectl delete namespace moj-namespace

# pody w namespace
kubectl get pods -n moj-namespace

# deploymenty w namespace
kubectl get deployments -n moj-namespace

# wszystkie pody
kubectl get pods -A

11. Systemowe pody Kubernetes – co to jest?

# coredns
DNS klastra.

# etcd
Baza danych klastra.

# kube-apiserver
Punkt wejścia do klastra.

# kube-controller-manager
Kontrolery replik i obiektów.

# kube-scheduler
Planowanie podów.

# kube-proxy
Warstwa sieciowa.

# metrics-server
Metryki CPU/RAM.

12. Architektura produkcyjnego klastra Kubernetes

# minimalny klaster produkcyjny (HA)
3 × control-plane
2 × worker

# rola control-plane
- etcd
- API Server
- Scheduler
- Controller Manager

# rola worker
- pody aplikacyjne
- kube-proxy

# enterprise
3 × control-plane
10–100 × worker

15. Sekrety – listowanie, podgląd, dekodowanie

# lista sekretów
kubectl get secrets

# szczegóły sekretu
kubectl describe secret NAZWA-SEKRETU

# YAML sekretu
kubectl get secret NAZWA-SEKRETU -o yaml

# dekodowanie klucza
kubectl get secret NAZWA-SEKRETU \
  -o jsonpath="{.data.KEY}" | base64 -d