Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
automatizace:kubernetes [2024/02/18 10:52]
tomas
automatizace:kubernetes [2024/02/20 08:39] (current)
tomas [Architektura]
Line 41: Line 41:
 Calico - síťový doplnek na toky mezi namespacema atd. používá Container Network Interface ([[https://github.com/containernetworking/cni|CNI]]), pody: calico-kube-controler a calico-node, příkaz calicoctl\\ Calico - síťový doplnek na toky mezi namespacema atd. používá Container Network Interface ([[https://github.com/containernetworking/cni|CNI]]), pody: calico-kube-controler a calico-node, příkaz calicoctl\\
 Flannel - Síťový plugin (CNI)\\ Flannel - Síťový plugin (CNI)\\
-Weave - Síťový plugin (CNI)\\+WeaveNet - Síťový plugin (CNI)\\
 Romana - Síťový plugin (CNI)\\ Romana - Síťový plugin (CNI)\\
 Kube-router - CNI\\ Kube-router - CNI\\
Line 60: Line 60:
 [[https://flagger.app/|Flagger]] ... rozhazovani trafficu na ruzne verze podu - AB testovani, canary, atd\\ [[https://flagger.app/|Flagger]] ... rozhazovani trafficu na ruzne verze podu - AB testovani, canary, atd\\
 [[https://portainer.io|Portainer]] ... WebGUI na správu Kubernetes, Docker, Swarm atd.\\ [[https://portainer.io|Portainer]] ... WebGUI na správu Kubernetes, Docker, Swarm atd.\\
 +[[https://github.com/kubernetes/dashboard|kubernetes-dashboard]] ... Kubernetes Dashboard - WEB GUI na správu kubernetes\\
 [[https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner|NFS subdir external provider]]\\ [[https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner|NFS subdir external provider]]\\
 [[https://github.com/stakater/Reloader|stakater/reloader]] ... automatický restart podu, když se změní config mapa, nebo secret\\ [[https://github.com/stakater/Reloader|stakater/reloader]] ... automatický restart podu, když se změní config mapa, nebo secret\\
 fluentd - logovaní služba na sběr logů. Kubernetes nedisponuje sbíráním logů\\ fluentd - logovaní služba na sběr logů. Kubernetes nedisponuje sbíráním logů\\
 prometheus - logování, monitoring, alerting\\ prometheus - logování, monitoring, alerting\\
 +OpenTelemetry - poskytuje tracing a metriky dalším nástrojům\\
 +Jaeger ... konzumuje metriky\\
 +
  
 ===Nástroje=== ===Nástroje===
Line 121: Line 125:
   * podAffinity - snaží se dát pody dohromady   * podAffinity - snaží se dát pody dohromady
   * podAntiAffinity - snaží se dát na jiné nody   * podAntiAffinity - snaží se dát na jiné nody
 +
 +===HA===
 +  * vše konfigurovat pomocí hostname, ne IP
 +  * použít loadbalancery, TLS mít na Load balanceru, např. haproxy  (/etc/haproxy/haproxy.cfg)
 +  * na přidáni dalšího Control Plane bude nejspíš potřeba přegenerovat klíče, budou expirované
 +  * etcd lze použít externí, musí se udělat první (nonColocated etcd)
 ====DNS==== ====DNS====
 SERVICE.NAMESPACE.svc.cluster.local\\ SERVICE.NAMESPACE.svc.cluster.local\\
Line 344: Line 354:
  
 ==network policies== ==network policies==
 +[[https://github.com/ahmetb/kubernetes-network-policy-recipes|Network policy]] jsou pravidla síťového firewalu. Některé CNI drivery NP nepoužívají, ale mají jiný způsob kontroly. Pokud je NetPol prázdná, neobsahuje egress, ani ingress, tak zakazuje tok. Pokud tam sekce je, tak povoluje tok. podSelector: {} = všechny pody.
 +
 ''kubectl get networkpolicy -n namespace'' ... seznam sitovych pravidel (firewall)\\ ''kubectl get networkpolicy -n namespace'' ... seznam sitovych pravidel (firewall)\\
 ''kubectl describe networkpolicy Policy1 -n namespace'' ... popis sitovych pravidel\\ ''kubectl describe networkpolicy Policy1 -n namespace'' ... popis sitovych pravidel\\
Line 373: Line 385:
 ''kubectl create token admin-user'' ... vytvoří token pro service account\\ ''kubectl create token admin-user'' ... vytvoří token pro service account\\
  
-===clusterroles, role, clusterrolebindings, role bindings - RBAC===+===Bezpečnost=== 
 +==Autorizace== 
 +Kontrolována Autorizačním controlerem API serveru, umí používat různé formy autentifikace, OpenID, certifikáty, tokeny 
 + 
 +useradd user1\\ 
 +passwd user1\\ 
 +openssl genrsa -out ~user1/user1.key 2048\\ 
 +openssl req -new -key ~user1/user1.key -out ~user1/user1.csr -subj "/CN=DevDan/O=development"\\ 
 +sudo openssl x509 -req -in ~user1/user1.csr -CA /var/lib/minikube/certs/apiserver-etcd-client.crt -CAkey /var/lib/minikube/certs/apiserver-etcd-client.key -CAcreateserial -out ~user1/user1.crt -days 45\\ 
 +kubectl config set-credentials DevDan --client-certificate=~user1/user1.crt --client-key=~user1/user1.key\\ 
 +kubectl config set-context minukume-user1 --cluster=minikube --namespace=development --user=user1\\ 
 + 
 + 
 +==clusterroles, role, clusterrolebindings, role bindings - RBAC== 
 +Je kontrolována module authorization controllerem API serveru 
 ''%%kubectl auth can-i --list%%'' ... zobrazí, na co mám práva\\ ''%%kubectl auth can-i --list%%'' ... zobrazí, na co mám práva\\
 ''%%kubectl auth can-i create deployments --as bob --namespace developer%%''\\ ''%%kubectl auth can-i create deployments --as bob --namespace developer%%''\\
Line 381: Line 408:
 ''kubectl get clusterroles''\\ ''kubectl get clusterroles''\\
 ''kubectl get roles''\\ ''kubectl get roles''\\
 +
 +==Admission Controler==
 +PodSecurityPolicy - vynucení pravidel je od 1.25 nahrazeno Pod Security Admission. PSP/PSA je kontrolováno Admission Controlerem API serveru.
 +SecurityContext je nastavení bezpečnosti Podu pomocí SELinux/AppArmor. Je to sekce ve YAML definice
 +
 +grep admission /etc/kubernetes/manifests/kube-apiserver.yaml\\
  
 ===poddisruptionbudgets=== ===poddisruptionbudgets===
Line 388: Line 421:
  
 ===kubectl pluginy=== ===kubectl pluginy===
-kube [[https://krew.sigs.k8s.io/docs/user-guide/setup/install/|krew]] install whoami ... nainstaluje plugin whoami\\+kubectl [[https://krew.sigs.k8s.io/docs/user-guide/setup/install/|krew]] install whoami ... nainstaluje plugin whoami\\ 
 +kubectl krew search ... seznam dostupných kubectl pluginů\\
 kubectl whoami ... spusti plugin, co ukaze, jaký uživatel jsem\\ kubectl whoami ... spusti plugin, co ukaze, jaký uživatel jsem\\
 +kubectl tail --rs staging/payment-1234 ... ukazuje logy ze všech podů replikasety\\
 +kubectl sniff bigpod-abcd-123 -c mainapp -n accounting ... odposlech síťového provozu a přeposílání do Wiresharku\\
 +
 ====Další rozšíření==== ====Další rozšíření====
 +Rozšíření, kako třeba cilium, linkerd, jsou popsány v horní části stránky, crd s nimi pracuje
 +
 k get customresourcedefinitions.apiextensions.k8s.io ... zesnam API rozšíření\\ k get customresourcedefinitions.apiextensions.k8s.io ... zesnam API rozšíření\\
 +kubectl get crd --all-namespaces ... kratší zápis\\
  
 +cilium\\
 +linkerd\\
 [https://cloud.google.com/knative|knative] ... nástroje pro rozšíření ovládáné - skálování od 0, škálování podle eventů atd.\\ [https://cloud.google.com/knative|knative] ... nástroje pro rozšíření ovládáné - skálování od 0, škálování podle eventů atd.\\
 [https://tekton.dev/|tekon] ... CI/CD\\ [https://tekton.dev/|tekon] ... CI/CD\\
Line 413: Line 455:
  
 ''kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.out'' ... inicializace kubernetes pomoci ClusteConfiguration souboru, vytvoří control plane (cp) node\\ ''kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.out'' ... inicializace kubernetes pomoci ClusteConfiguration souboru, vytvoří control plane (cp) node\\
 +kubeadm config print init-defaults ... ukáže konfiguraci\\
 ''kubeadm token create'' ... vytvoří token\\ ''kubeadm token create'' ... vytvoří token\\
 ''kubeadm token list'' ... vylistuje certifikáty\\ ''kubeadm token list'' ... vylistuje certifikáty\\
Line 464: Line 507:
 ''sudo systemctl restart kubelet''\\ ''sudo systemctl restart kubelet''\\
 ''kubectl uncordon cp''\\ ''kubectl uncordon cp''\\
 +
 +====Troubleshooting====
 +systemctl status kubelet.service\\
 +journalctl -u kubelet\\
 +sudo find /var/log -name "*apiserver*log"
 +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf\\
 +/var/lib/kubelet/config.yaml\\
 +/etc/kubernetes/manifests/\\
 +Zapnotut/prozkoumat API auditing\\
 +Bezpečnostní problém? RBAC, SELinux, AppArmor\\
 +Síťový problém - přidat ephemeral kontejner s network nástroji\\
 +logy a status podu\\
 +Probél na node?\\
 +/var/log/kube-apiserver.log\\
 +[[https://kubernetes.io/docs/tasks/debug/debug-application/]]\\
 +[[https://kubernetes.io/docs/tasks/debug/debug-cluster/]]\\
 +[[https://kubernetes.io/docs/tasks/debug/debug-application/determine-reason-pod-failure/]]\\
 +
  
 ====REST API==== ====REST API====
Line 492: Line 553:
 /apis/networking.k8s.io/v1/ingresses\\ /apis/networking.k8s.io/v1/ingresses\\
 /apis/metrics/k8s.io/ ... metriky\\ /apis/metrics/k8s.io/ ... metriky\\
 +/apis/metrics.k8s.io/v1beta1/nodes ... metriky nodů\\
 +/apis/metrics.k8s.io/v1beta1/pods\\