CKA Certified Kubernetes Administrator Einführung Information Der CKA-Test ist rund um das Managed und Administrieren von Kubernetes. Hier sind ein paar nützliche Links: CKA Zertifikat: https://www.cncf.io/certification/cka/ CKA Curriculum (Zusammenfassung der Themen): https://github.com/cncf/curriculum CKA Curriculum (KodeKloud edition) https://github.com/kodekloudhub/certified-kubernetes-administrator-course CKA Teilnehmer Handbuch: https://docs.linuxfoundation.org/tc-docs/certification/lf-handbook2 CKA Test Tips & Tricks: https://docs.linuxfoundation.org/tc-docs/certification/tips-cka-and-ckad Use the code - KODEKLOUD20 - while registering for the CKA or CKAD exams at Linux Foundation to get a 20% discount. Kodekloud Slack: https://kodekloud.com/pages/community Grund Konzept Cluster Architektur Control Nodes (Controllplane / Master Node) Controlplane Komponenten Diese Komponenten können, müssen aber nicht in form von Containern auf den Control Nodes laufen. ETCD Dies ist ein Key-Value Store (Datenbank) welche die Informationen speichert. Scheduler Dies ist eine Applikation, welche die Container und Deployments auf die entsprechende Node schiebt. Controller-Manager Node-Controller Kümmert sich um das Hinzufügen, Entfernen und Status spezifische handeln von nodes. Bsp. wenn eine node abstürzt. Replication-Controller Kümmert sich um das Erstellen, Löschen und verschieben von Containern auf den Unterschiedlichen Nodes. Kube-Apiserver Kümmert sich um die Kommunikation zwischen den unterschiedlichen Komponenten und veröffentlicht die eigentliche Kuberentes API welche mittels Kubectl usw. angesteuert wird. Conatiner Runtime Engine Die Master nodes haben optional eine Container Runtime Engine (Bsp.: Docker, Containerd, Rocket), der Master kann die Controlplane Komponenten in Containern laufen lassen, diese können jedoch auch als applikation auf dem Host direkt laufen. Worker Nodes Conatiner Runtime Engine Jede Worker node hat eine Container Tunrtime Engine, diese wird benötigt um die Container auf der jeweiligen Node auszuführen. Kubelet Die Kubelet ist der "Kapitän" der Nodes, diese Applikation ist dafür verantwortlich die Kommunikation mit der Masternode aufrecht zu halten und die Anforderungen entsprechend umzusetzen (Bsp.: neue Container aus zu führen) Kube-Proxy Der Kube-Proxy ist für die Kommunikation zwischen Container auf unterschiedlichen Nodes verantwortlich. Übersicht Kube Controller Manager Der Kube-Controller-Manager ist ein Manager von mehreren Kubernetes Controllern. In Kubernetes ist ein Kontroller dazu da, ein Cluster zu überwachen und anpassungen basierend auf den definierten Einstellungen zu tätigen. Node-Controller Der Node Kontroller überprüft jede node alle 5 Sekunden, wenn der Node-Controller 40 Sekunden lange keine Information von der Node erhält, wird die Node als UNREACHABLE markiert. Nach 5 Minuten ohne Kontakt werden alle Pods auf eine andere Node verschoben (POD Eviction Timeout) Replication-Controller Der Replication Kontroller überprüft die Deployments, ob alle die Entsprechenden replikationen haben, wenn nicht wird dies angepasst. Andere Controller Es gibt unzählige unterschiedliche Controller, diese sind alle teil von Kube-Controller-Manager. Sämtliche Einstellungen bezüglich Timeouts und Eviction times werden bei dieser Binary definiert. Kube Scheduler Der Kube Scheduler ist zuständig um die Pods auf die Nodes zu verteilen, der Kube Scheduler trifft nur die Entscheidung, die Pods werden anschliessend von dem Kubelet ausgeführt. Die Verteilung basiert auf diversen Kriterien wie aktuelle auslastung, insgesamt Ressourcen und mehr. Kubelet Das Kubelet wird auf jeder Node ausgeführt und ist zuständig um die Container auf den Nodes auszuführen. Das Kubelet kommuniziert mit dem Kube-Api server und fragt, was auf der Entsprechenden Node ausgeführt werden sollte. Kube Proxy In einem Kubernetes Cluster kann jeder Pod jeden anderen Pod erreichen, dies geschieht in Kubernetes via Kube Proxy. Kube Proxy ist ein Daemon set, welches auf jeder node läuft und iptable rules erstellt um den traffic zwischen den verschiedenen Nodes weiterzuleiten. Services sind auch virtuelle objekte welche auf dem Kube Proxy existieren, ansonsten aber nicht existent sind, alles was zu einem Service gerouted wird geht über den Kube Proxy, dieser leitet es dann an das entsprechende backend weiter. Kubernetes Ressourcen Pods Ein Pod in Kubernetes ist ein container mit der Instanz der Applikation welche wir ausführen wollen, in einigen fällen beinhaltet ein Pod zusätzlich zum Applikationscontainer auch noch ein oder mehrere Helper Container, welche weitere aufgaben im selben Pod ausführen. Alle Container in einem Pod haben den selben storage und netzwerkspace. Example YAML: apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx Replica Controller Der Replikations Kontroller ist ein Kontroller, welcher die Anzahl von Applikations instanzen im Kubernetes cluster managed. In einem ReplicaController wird der Pod als Template hinterlegt und anschliessend deployed. Beseispiels YAML: apiVersion: v1 kind: ReplicationController metadata: name: nginx-rc labels: app: nginx type: webserver spec: template: metadata: name: nginx-pod labels: app: nginx type: webserver spec: containers: - name: nginx-container image: nginx replicas: 3 Replica Set Ein Replica Set ist ähnlich wie ein Replica Controller, jedoch managed das Replica Set bereits erstellte Pods und erstellt wenn nötig neue wohingegen der Replica Controller für neue Pods genutzt wird. Kurz gesagt, das Replica Set kann bereits existierende Ressourcen Managen, dies geschieht über ein selector field. Beispiels YAML: apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx-replicaset labels: app: nginx type: webserver spec: template: metadata: name: nginx-pod labels: app: nginx type: webserver spec: containers: - name: nginx image: nginx replicas: 5 selector: matchLabels: type: webserver Glossar Abkürzung Ausgeschrieben Beschreibung CRI Container Runtime Interface Das ist das Interface welches kubernetes nutzt um mit den Container Runtime Engines (Containerd, Rocket) zu sprechen