Einen Kubernetes Cluster Installieren - Kubernetes für dummies - Teil 2

Fortsetzung des Teil 1 in dem wir den Kubernetes Masternode installiert haben.

Vorraussetzungen

Für den ersten computer oder workernode gelten die gleichen Vorraussetzungen sprich

  • Ubuntu 18LTS
  • Mind. 2 CPUs (worker sollten eher noch mehr haben)
  • Speicher kommt drauf an was später als Container drauf laufen soll - aber 4GB scheint mir das Minimum
  • Feste IP Adresse und eindeutigen Namen
  • SWAP aus (fstab nicht vergessen)

Installation

wie Beim Server um kubeadm und docker laufen lassen zu können:

Code
sudo apt install docker.io
sudo systemctl enable docker
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt install kubeadm

dann immer noch als root

Code
kubeadm join 192.168.0.40:6443 --token ndcyaw.token--discovery-token-ca-cert-hash sha256:hash

obiges ist das Join Kommando inkl. token und hash am ende der Erstellung des Masters. Sollte das join einfach hängen und in /var/log/syslog kubelet service nicht starten können das /var/libe/kubelet fehlt lasst euch ein neues join kommanda auf dem Master geben mit "sudo kubeadm token create --print-join-command". Man kann jetzt auf dem Master als normaler user prüfen ob alles geklappt hat

Code
olaf-krause@k8s-master-i:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-compute-i NotReady <none> 29s v1.17.2
k8s-master-i Ready master 7h39m v1.17.2

Supi der erste compute node ist sichtbar. Nach ein paar Minuten sollte der Status auch auf Ready springen.

Erstes container deployment

klassisches Beispiel mit nginx also einem Webserver. Wieder als user auf dem master

Code
kubernetes-master:~$ kubectl run --image=nginx nginx-server --port=80 --env="DOMAIN=cluster"
kubernetes-master:~$ kubectl expose deployment nginx-server --port=80 --name=nginx-http

kurzer check auf dem worker

Code
olaf-krause@k8s-compute-i:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1236cbaa5e23 nginx "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes k8s_nginx-server_nginx-server-646bbbc896-9z2pc_default_26588fea-6f4b-4533-8c0c-cca30850ab3e_0

oder auf dem Master

Code
olaf-krause@k8s-master-i:~$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7h47m
nginx-http ClusterIP 10.108.185.230 <none> 80/TCP 3m18s

Kurzer check ob der Webserver tatsächlich läuft mit curl auf die IP oben:

Code
olaf-krause@k8s-compute-i:~$ curl -I 10.108.185.230
HTTP/1.1 200 OK
Server: nginx/1.17.8
Date: Sun, 02 Feb 2020 18:25:52 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 21 Jan 2020 13:36:08 GMT
Connection: keep-alive
ETag: "5e26fe48-264"
Accept-Ranges: bytes

sieht perfekt aus. Jetzt haben wir also einen Kubernetes Master und einen Worker noder am laufen und als test container nginx deployed. Noch ein kurzer resourcecheck beim worker: 1.6GB Speicherverbrauch im idle mit dem webserver am laufen. Das ist OK, wirklich sparen tun wir ja erst, wenn wir viele Container haben und uns das jeweilige OS sparen können.


Der zweite Compute node wird analog zum ersten erstellt - brauch ich denke ich nicht im Detail nochmals erklären. Am Ende des Teil 2 haben wir also

  1. k8s-master-i (192.168.0.40)
  2. k8s-compute-i (192.168.0.43)
  3. k8s-compute-ii (192.168.0.44)

+ nginx im Docker am laufen. :thumbup:


Jetzt haben wir die Grundlage geschaffen weitere Deployments in unserem Kubernetes Cluster vorzunehmen. Spannend wird es natürlich erst dann, wenn wir services nach außen zu Verfügung stellen und auch ein storage anbinden. Das kommt dann in den nächsten Teilen. <3

PV 18,2kWp - BHKW EcoPower 1.0, 30kWh LiON Sunny Island System

BMW i3 60Ah (Verbrauch ca. 13,8kWh/100km; SW: I001-16-07-506)

Comments