user@homelab:~/docs$ cat 09-k3s.md
k3s (Kubernetes)
Instalace k3s v1.35, kubectl bez sudo, alias k a první aplikace přes Ingress
# obsah
Proč verze 1.35
Zkouška CKAD v roce 2026 běží na Kubernetes v1.35. Cluster je na stejné řadě, aby se příkazy, API a chování shodovaly se zkouškou.
1. Firewall pro Kubernetes
sudo ufw allow 6443/tcp comment 'k3s API'
sudo ufw allow 80/tcp comment 'Traefik HTTP'
sudo ufw allow 443/tcp comment 'Traefik HTTPS'
sudo ufw allow from 10.42.0.0/16 comment 'k3s pods'
sudo ufw allow from 10.43.0.0/16 comment 'k3s services'Bez pravidel pro 10.42/16 a 10.43/16 by firewall blokoval komunikaci uvnitř clusteru, například dotazy podů na CoreDNS.
2. Instalace
curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=v1.35 INSTALL_K3S_EXEC="--write-kubeconfig-mode 600" sh -INSTALL_K3S_CHANNEL=v1.35: nejnovější opravná verze řady 1.35,--write-kubeconfig-mode 600: kubeconfig čte jen root.
3. kubectl bez sudo
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
chmod 600 ~/.kube/config
echo 'export KUBECONFIG=~/.kube/config' >> ~/.bashrc4. Alias a doplňování
cat >> ~/.bashrc <<'EOF'
source <(kubectl completion bash)
alias k=kubectl
complete -o default -F __start_kubectl k
EOF
source ~/.bashrcNa zkoušce šetří k a Tab spoustu času, proto je dobré si na ně zvyknout hned.
5. Kontrola
k get nodes
k get pods -ANAME STATUS ROLES AGE VERSION
homelab Ready control-plane 46s v1.35.9+k3s1Pod (kube-system) | Co dělá |
|---|---|
coredns | DNS uvnitř clusteru: služby se najdou podle jména |
traefik, svclb-traefik | ingress: vstup webového provozu zvenku do aplikací |
local-path-provisioner | vytváří PersistentVolumes na disku nodu |
metrics-server | spotřeba CPU a RAM (k top) |
helm-install-traefik* | jednorázové joby, které nainstalovaly Traefik (Completed) |
RESTARTS 2 u helm-install-traefik je normální: job čekal, než se připraví CRD.
6. Smoke test: nginx přes Ingress
k create deployment hello --image=nginx
k expose deployment hello --port=80
k create ingress hello --rule="/=hello:80"
k get pods,svc,ingress- Deployment spustí pod a hlídá, aby běžel,
- Service mu dá stálé jméno a vnitřní adresu,
- Ingress řekne Traefiku, kam poslat HTTP provoz.
curl --noproxy '*' http://<ip-serveru>Výsledek: Welcome to nginx! ✅ Úklid:
k delete ingress,svc,deployment hello