container:kubernetes
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| container:kubernetes [2020/11/05 09:21] – [Was ist Kubernetes] stone | container:kubernetes [2020/11/06 11:47] (current) – removed stone | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Kubernetes ====== | ||
| - | \\ | ||
| - | |||
| - | ===== Was ist Kubernetes ===== | ||
| - | Hier nur eine kurze und einfache Erklärung der einzelnen Punkte und Services | ||
| - | * Master -> Master Node mit den Services API/ | ||
| - | * API -> API | ||
| - | * etcd -> Datenbank | ||
| - | * Scheduler -> Verteilt die Pods auf den Workern | ||
| - | * Controller Manager -> Worker Management | ||
| - | \\ | ||
| - | * Worker -> Worker Node auf denen die Pods laufen | ||
| - | |||
| - | |||
| - | ===== Installation von Kubernetes ===== | ||
| - | Die Installation von Kubernetes habe ich unter Ubuntu 20.04 durchgeführt. | ||
| - | |||
| - | ==== OS Update ==== | ||
| - | Das System sollte am aktuellen Stand sein | ||
| - | < | ||
| - | apt update | ||
| - | apt dist-upgrade -y | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | ==== Docker Runtime installieren ==== | ||
| - | < | ||
| - | Auf allen Nodes: | ||
| - | |||
| - | apt install -y docker.io | ||
| - | systemctl enable docker.service --now | ||
| - | systemctl status docker | ||
| - | docker --version | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | ==== Swap deaktivieren ==== | ||
| - | Das System darf kein Swap haben. Sonst lässt sich kein Cluster erstellen. \\ | ||
| - | Am besten man installiert das System schon ohne Swap. Hat man dies nicht gemacht und es gibt Swap dann kann man dies deaktivieren | ||
| - | < | ||
| - | Auf allen Nodes: | ||
| - | swapoff -a | ||
| - | vim /etc/fstab | ||
| - | Swap auskommentieren | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | Ich hatte bei Ubuntu 20.04 nach einem Reboot oftmal trotzdem Swap gemountet. Daher habe ich die Partiton einfach überschrieben | ||
| - | < | ||
| - | dd if=/ | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | ==== IP Forwarding aktivieren ==== | ||
| - | Damit Traffic durch die Container geroutet werden kann | ||
| - | < | ||
| - | Auf alle Nodes: | ||
| - | vim / | ||
| - | net.ipv4.ip_forward = 1 | ||
| - | </ | ||
| - | Diese Stelle gibt es normal schon und muss nur auskommentiert werden | ||
| - | |||
| - | < | ||
| - | sysctl -p | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | ==== Installation von Kubernetes via Google Repo ==== | ||
| - | Wir verwenden hier ein Repo für Xenial (Ubuntu 16.04) da es kein neueres Repo gibt aktuell | ||
| - | |||
| - | < | ||
| - | Auf allen Nodes: | ||
| - | apt install -y apt-transport-https curl | ||
| - | curl -s https:// | ||
| - | apt-add-repository "deb http:// | ||
| - | apt update | ||
| - | apt install -y kubelet kubeadm kubectl | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | ==== Erstellen eines Clusters ==== | ||
| - | < | ||
| - | Auf der Master Node: | ||
| - | kubeadm init | ||
| - | </ | ||
| - | |||
| - | Hier bekommt man auch gleich den Befehl in die Shell wie man Worker zum Cluster Joint. \\ | ||
| - | Falls man diesen später nicht mehr weiß kann man sich dies Infos dazu holen. | ||
| - | \\ | ||
| - | |||
| - | ==== Nodes zum Cluster hinzufügen ==== | ||
| - | Wenn man den Output für den Join Befehl hat dann diesen nehmen. | ||
| - | |||
| - | < | ||
| - | Auf den Worker: | ||
| - | kubeadm join 192.168.88.121: | ||
| - | --discovery-token-ca-cert-hash sha256: | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | Falls man diese nicht mehr hat kann man sich diesen wieder zusammen bauen | ||
| - | < | ||
| - | k8s@kube01: | ||
| - | kubeadm join 192.168.88.121: | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | Status auf dem Cluster Checken | ||
| - | < | ||
| - | kubectl get nodes | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | ==== Cluster Netzwerk erstellen ==== | ||
| - | Es gibt dafür einen ganzen Haufen Möglichkeiten\\ | ||
| - | [[https:// | ||
| - | \\ | ||
| - | Ich habe mich hier für Calico entschieden. | ||
| - | < | ||
| - | Auf dem Master | ||
| - | kubectl apply -f https:// | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | Nach 1-2 Minuten sollte der Status der Worker auf " | ||
| - | < | ||
| - | Auf dem Master | ||
| - | kubectl get nodes | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | Auch die Container sollten alle laufen | ||
| - | < | ||
| - | Auf dem Master | ||
| - | kubectl get pods --all-namespaces | ||
| - | </ | ||
| - | \\ | ||
| - | ==== Bash autocompletion für Kubernetes ==== | ||
| - | |||
| - | < | ||
| - | echo ' | ||
| - | source .bashrc | ||
| - | </ | ||
| - | \\ | ||
| - | ==== Starten eines Testcontainers ==== | ||
| - | < | ||
| - | Auf dem Master: | ||
| - | kubectl run --image=nginx nginx-server --port=80 | ||
| - | kubectl expose pod nginx-server --port 80 --type=NodePort | ||
| - | |||
| - | |||
| - | kubectl run http-web --image=httpd --port=80 | ||
| - | kubectl expose pod http-web --name=http-service --port=80 --type=NodePort | ||
| - | |||
| - | kubectl get pods -o wide | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | ===== Storage Provider ===== | ||
| - | Es gibt unter Kubernetes verschiedene Arten von Storage Provider und Klassen. Darauf gehe ich später ein. | ||
| - | |||
| - | ==== PersistentVolume ==== | ||
| - | Ein Persistent Volume ist ein lokaler Speicherbereich auf den Worker Nodes. \\ | ||
| - | Dies kann auch ein NFS Share sein der auf den Workern gemountet ist. | ||
| - | |||
| - | === Erstellen eines Persistent Volume === | ||
| - | Yaml File erstellen | ||
| - | < | ||
| - | apiVersion: v1 | ||
| - | kind: PersistentVolume | ||
| - | metadata: | ||
| - | name: pv01 | ||
| - | labels: | ||
| - | type: local | ||
| - | spec: | ||
| - | storageClassName: | ||
| - | capacity: | ||
| - | storage: 1G | ||
| - | accessModes: | ||
| - | - ReadWriteOnce | ||
| - | hostPath: | ||
| - | path: "/ | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | Danach kann die Storage Ressource angelegt werden. | ||
| - | < | ||
| - | k8s@kube01: | ||
| - | persistentvolume/ | ||
| - | |||
| - | k8s@kube01: | ||
| - | NAME | ||
| - | pv01 | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | === Erstellen eines Persistent Volume Claim === | ||
| - | Yaml File erstellen | ||
| - | |||
| - | < | ||
| - | apiVersion: v1 | ||
| - | kind: PersistentVolumeClaim | ||
| - | metadata: | ||
| - | name: pvc01-nginx | ||
| - | spec: | ||
| - | storageClassName: | ||
| - | accessModes: | ||
| - | - ReadWriteOnce | ||
| - | resources: | ||
| - | requests: | ||
| - | storage: 300M | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | |||
| - | Danach kann der Claim angelegt werden | ||
| - | < | ||
| - | k8s@kube01: | ||
| - | persistentvolumeclaim/ | ||
| - | |||
| - | k8s@kube01: | ||
| - | NAME STATUS | ||
| - | pvc01-nginx | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | === Deploy eines Pods === | ||
| - | Jetzt kann ein Pod angelegt werden im PVC. \\ | ||
| - | Dazu ein Manifest erstellen: | ||
| - | < | ||
| - | k8s@kube01: | ||
| - | apiVersion: v1 | ||
| - | kind: Pod | ||
| - | metadata: | ||
| - | name: nginx-demo01 | ||
| - | spec: | ||
| - | volumes: | ||
| - | - name: task-pv-storage | ||
| - | persistentVolumeClaim: | ||
| - | claimName: pvc01-nginx | ||
| - | containers: | ||
| - | - name: nginx-demo01 | ||
| - | image: nginx | ||
| - | ports: | ||
| - | - containerPort: | ||
| - | name: " | ||
| - | volumeMounts: | ||
| - | - mountPath: "/ | ||
| - | name: task-pv-storage | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | Deploy vom Pod: | ||
| - | < | ||
| - | k8s@kube01: | ||
| - | pod/ | ||
| - | k8s@kube01: | ||
| - | k8s@kube01: | ||
| - | NAME | ||
| - | nginx-demo01 | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | Serivce dafür anlegen | ||
| - | < | ||
| - | |||
| - | </ | ||
| - | |||
| - | asdf | ||
| - | asdf | ||
| - | |||
| - | |||
| - | \\ | ||
| - | ===== CLI ===== | ||
| - | Sammlung von CLI Befehlen | ||
| - | \\ | ||
| - | |||
| - | ==== Cluster Befehle ==== | ||
| - | |||
| - | < | ||
| - | kubectl version | ||
| - | kubectl cluster-info | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | ==== Node Befehle ==== | ||
| - | < | ||
| - | kubectl describe nodes < | ||
| - | kubectl describe pods < | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | ==== Pod Befehle ==== | ||
| - | < | ||
| - | kubectl get pods | ||
| - | kubectl get pods -o wide | ||
| - | kubectl get pods --all-namespaces | ||
| - | kubectl get pods --all-namespaces -o jsonpath=" | ||
| - | kubectl describe pod/ | ||
| - | kubectl describe pods nginx-server | ||
| - | kubectl exec nginx-server -- cat / | ||
| - | kubectl exec -ti nginx-server -- /bin/bash | ||
| - | kubectl logs nginx-server | ||
| - | kubectl logs nginx-server -f | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | ==== Service Befehle ==== | ||
| - | |||
| - | < | ||
| - | Service Befehle | ||
| - | kubectl get service | ||
| - | kubectl get service -o wide | ||
| - | kubectl get service < | ||
| - | |||
| - | kubectl delete service < | ||
| - | </ | ||
| - | \\ | ||
| - | |||
| - | |||
| - | TODO: | ||
| - | kubectl delete pv pv01 | ||
| - | kubectl delete pvc pvc01-nginx | ||
| - | |||
| - | apt-get install yamllint | ||
| - | |||
| - | |||
| - | |||
container/kubernetes.1604568071.txt.gz · Last modified: by stone
