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:
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
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
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
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
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
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:
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
- k8s-master-i (192.168.0.40)
- k8s-compute-i (192.168.0.43)
- k8s-compute-ii (192.168.0.44)
+ nginx im Docker am laufen.
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.
Kommentare
Neu erstellte Kommentare unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.
Neu erstellte Kommentare unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.