User Tools

Site Tools


container:kubernetes

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
container:kubernetes [2020/11/05 09:19] stonecontainer: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/etcd/Scheduler/Controller Manager 
-    * API -> API 
- 
- 
- 
-===== Installation von Kubernetes ===== 
-Die Installation von Kubernetes habe ich unter Ubuntu 20.04 durchgeführt. 
- 
-==== OS Update ==== 
-Das System sollte am aktuellen Stand sein 
-<code> 
-apt update 
-apt dist-upgrade -y 
-</code> 
-\\ 
- 
-==== Docker Runtime installieren ==== 
-<code> 
-Auf allen Nodes: 
- 
-apt install -y docker.io 
-systemctl enable docker.service --now 
-systemctl status docker 
-docker --version 
-</code> 
-\\ 
- 
-==== 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 
-<code> 
-Auf allen Nodes: 
-swapoff -a 
-vim /etc/fstab 
-Swap auskommentieren 
-</code> 
-\\ 
- 
-Ich hatte bei Ubuntu 20.04 nach einem Reboot oftmal trotzdem Swap gemountet. Daher habe ich die Partiton einfach überschrieben 
-<code> 
-dd if=/dev/zero of=/dev/sdX3 bs=1048576 count=10 oflag=direct status=progress 
-</code> 
-\\ 
- 
-==== IP Forwarding aktivieren ==== 
-Damit Traffic durch die Container geroutet werden kann 
-<code> 
-Auf alle Nodes:  
-vim /etc/sysctl.conf 
-net.ipv4.ip_forward = 1 
-</code> 
-Diese Stelle gibt es normal schon und muss nur auskommentiert werden 
- 
-<code> 
-sysctl -p 
-</code> 
-\\ 
- 
-==== Installation von Kubernetes via Google Repo ==== 
-Wir verwenden hier ein Repo für Xenial (Ubuntu 16.04) da es kein neueres Repo gibt aktuell 
- 
-<code> 
-Auf allen Nodes: 
-apt install -y apt-transport-https curl 
-curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add 
-apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main" 
-apt update 
-apt install -y kubelet kubeadm kubectl 
-</code> 
-\\ 
- 
-==== Erstellen eines Clusters ==== 
-<code> 
-Auf der Master Node: 
-kubeadm init 
-</code> 
- 
-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. 
- 
-<code> 
-Auf den Worker: 
-kubeadm join 192.168.88.121:6443 --token 78c4by.cs8u65dcvxxxxxxx \ 
-    --discovery-token-ca-cert-hash sha256:3818424273aac366a6faa5b4b417158227a497xxxxxxxxxxxxxxxxxx 
-</code> 
-\\ 
- 
-Falls man diese nicht mehr hat kann man sich diesen wieder zusammen bauen 
-<code> 
-k8s@kube01:~$ kubeadm token create --print-join-command | grep join 
-kubeadm join 192.168.88.121:6443 --token dfipcc.r7ntkgh0n9344c1a     --discovery-token-ca-cert-hash sha256:3818424273aac366a6faa5b4b417158227a4972e2e44fcf1db114bfd6cc64496 
-</code> 
-\\ 
- 
-Status auf dem Cluster Checken 
-<code> 
-kubectl get nodes 
-</code> 
-\\ 
- 
-==== Cluster Netzwerk erstellen ==== 
-Es gibt dafür einen ganzen Haufen Möglichkeiten\\ 
-[[https://kubernetes.io/docs/concepts/cluster-administration/addons/|https://kubernetes.io/docs/concepts/cluster-administration/addons/]] 
-\\ 
-Ich habe mich hier für Calico entschieden. 
-<code> 
-Auf dem Master 
-kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml 
-</code> 
-\\ 
- 
-Nach 1-2 Minuten sollte der Status der Worker auf "Ready" gehen 
-<code> 
-Auf dem Master 
-kubectl get nodes 
-</code> 
-\\ 
- 
-Auch die Container sollten alle laufen 
-<code> 
-Auf dem Master 
-kubectl get pods --all-namespaces 
-</code> 
-\\ 
-==== Bash autocompletion für Kubernetes ==== 
- 
-<code> 
-echo 'source <(kubectl completion bash)' >> ~/.bashrc 
-source .bashrc 
-</code> 
-\\ 
-==== Starten eines Testcontainers ==== 
-<code> 
-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 
-</code> 
-\\ 
- 
-===== 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 
-<code> 
-apiVersion: v1 
-kind: PersistentVolume 
-metadata: 
-  name: pv01 
-  labels: 
-    type: local 
-spec: 
-  storageClassName: manual 
-  capacity: 
-    storage: 1G 
-  accessModes: 
-    - ReadWriteOnce 
-  hostPath: 
-    path: "/mnt/nfs" 
-</code> 
-\\ 
- 
-Danach kann die Storage Ressource angelegt werden. 
-<code> 
-k8s@kube01:~$ kubectl apply -f pv01.yaml  
-persistentvolume/pv01 created 
- 
-k8s@kube01:~$ kubectl get pv 
-NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE 
-pv01   1G         RWO            Retain           Available           manual                  4m40s 
-</code> 
-\\ 
- 
-=== Erstellen eines Persistent Volume Claim === 
-Yaml File erstellen 
- 
-<code> 
-apiVersion: v1 
-kind: PersistentVolumeClaim 
-metadata: 
-  name: pvc01-nginx 
-spec: 
-  storageClassName: manual 
-  accessModes: 
-    - ReadWriteOnce 
-  resources: 
-    requests: 
-      storage: 300M 
-</code> 
-\\ 
- 
- 
-Danach kann der Claim angelegt werden 
-<code> 
-k8s@kube01:~$ kubectl apply -f pvc01-nginx.yaml  
-persistentvolumeclaim/pvc01-nginx created 
- 
-k8s@kube01:~$ kubectl get pvc 
-NAME          STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE 
-pvc01-nginx   Bound    pv01     1G         RWO            manual         29s 
-</code> 
-\\ 
- 
-=== Deploy eines Pods === 
-Jetzt kann ein Pod angelegt werden im PVC. \\ 
-Dazu ein Manifest erstellen: 
-<code> 
-k8s@kube01:~$ cat nginx-demo01.yaml  
-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: 80 
-          name: "nginx-http" 
-      volumeMounts: 
-        - mountPath: "/mnt/nfs" 
-          name: task-pv-storage 
-</code> 
-\\ 
- 
-Deploy vom Pod: 
-<code> 
-k8s@kube01:~$ kubectl apply -f nginx-demo01.yaml  
-pod/nginx-demo01 created 
-k8s@kube01:~$  
-k8s@kube01:~$ kubectl get pods -o wide 
-NAME           READY   STATUS    RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES 
-nginx-demo01   1/    Running            9s    172.16.197.198   kube02   <none>           <none> 
-</code> 
-\\ 
- 
-Serivce dafür anlegen 
-<code> 
- 
-</code> 
- 
-asdf 
-asdf 
- 
- 
-\\ 
-===== CLI ===== 
-Sammlung von CLI Befehlen 
-\\ 
- 
-==== Cluster Befehle ==== 
- 
-<code> 
-kubectl version 
-kubectl cluster-info 
-</code> 
-\\ 
- 
-==== Node Befehle ==== 
-<code> 
-kubectl describe nodes <podname> 
-kubectl describe pods <podname> 
-</code> 
-\\ 
- 
-==== Pod Befehle ==== 
-<code> 
-kubectl get pods 
-kubectl get pods -o wide 
-kubectl get pods --all-namespaces 
-kubectl get pods --all-namespaces -o jsonpath="{..image}" | tr -s '[[:space:]]' '\n' | sort | uniq -c 
-kubectl describe pod/nginx-server -n default 
-kubectl describe pods nginx-server 
-kubectl exec nginx-server -- cat /etc/hostname 
-kubectl exec -ti nginx-server -- /bin/bash 
-kubectl logs nginx-server 
-kubectl logs nginx-server -f 
-</code> 
-\\ 
- 
-==== Service Befehle ==== 
- 
-<code> 
-Service Befehle 
-kubectl get service 
-kubectl get service -o wide 
-kubectl get service <service> 
- 
-kubectl delete service <service> 
-</code> 
-\\ 
- 
- 
-TODO: 
-kubectl delete pv pv01 
-kubectl delete pvc pvc01-nginx 
- 
-apt-get install yamllint 
- 
- 
- 
  
container/kubernetes.1604567993.txt.gz · Last modified: by stone