Moin zusammen
in Teil 1-2 ging es darum den K8S Cluster aufzusetzen und kurz mittels eines Webserverdeployments zu testen.
AUf dem Master muss also beim Aufrugf kubectl get nodes folgendes kommen:
olaf-krause@k8s-master-i:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-compute-i Ready <none> 5d14h v1.17.2
k8s-compute-ii Ready <none> 2m40s v1.17.2
k8s-master-i Ready master 5d21h v1.17.2
Jetzt geht es darum was für Werkzeuge gibt es den Cluster zu betreiben/nutzen. Ich möchte das gar nicht so sehr aus K8S Administratorsicht (K8S Infra) betrachten sondern eher aus Nutzer der Images deployed und betreibt. Hm naja evtl. ist das auch immer diesselbe Person. Folgende Tools habt Ihr schon kennengelernt:
kubeadm
ist ein Kommandozeilenprogramm zur einfachen Bereitstellung eines sicheren Kubernetes-Clusters auf physischen oder Cloud-Servern oder virtuellen Maschinen.kubectl
ist ein Kommandozeilenprogramm für Kubernetes. Es steuert den Kubernetes Clustermanager.
weitere standard tools sind unter https://kubernetes.io/de/docs/reference/tools/ gelistet. Wie
kubefed
ist ein Kommandozeilenprogramm um Ihnen bei der Verwaltung Ihrer Verbundcluster zu helfen.Dashboard
, die webbasierte Benutzeroberfläche von Kubernetes ermöglicht es Ihnen containerisierte Anwendungen in einem Kubernetes-Cluster bereitzustellen Fehler zu beheben und den Cluster und seine Ressourcen selbst zu verwalten.Kubernetes Helm
ist ein Tool zur Verwaltung von Paketen mit vorkonfigurierten Kubernetes-Ressourcen, auch bekannt als Kubernetes charts.
Weiteres findet Ihr unter https://dzone.com/articles/50-useful-kubernetes-tools - es gibt hunderte, man könnte sich also locker wochenlang damit beschäftigen. Wir werden uns Dashboard & Helm jetzt mal genauer anschauen um zu lernen wir wir denn Applikation in unserem Cluster bereitstellen könnnen.
Installation Kubernetes Dashboard
Als erstes sollte man schauen was die letzte releaseversion ist: https://github.com/kubernetes/dashboard/releases. Stand 08.02.2020 die 2.0.0-rc5. Also lautet das Installationskommando (als user):
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml
output:
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
Alles anzeigen
Zu installation ersetzt man oben das apply durch ein delete. Zu Verfügung stellen kann man das Dash board nun mit
Wobei die IP Adresse natürlich angepasst werden muss. Default wenn man nichts angibt ist localhost (nützt einem nicht wenn man keine GUI für einen webbrowser hat).
Dashboard login
Die Dashboard URL http://localhost:8001/api/v1/namespa…:/proxy/#/login (localhost müssen wir so stehen lassen! siehe unten).
Um sich einloggen zu können brauchen wir eine Berechtigung, dazu erstellen wir uns jetzt ein token:
olaf-krause@k8s-master-i:~$ kubectl create serviceaccount dashboard-admin-sa
serviceaccount/dashboard-admin-sa created
olaf-krause@k8s-master-i:~$ kubectl create clusterrolebinding dashboard-admin-sa --clusterrole=cluster-admin --serviceaccount=default:dashboard-admin-sa
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin-sa created
olaf-krause@k8s-master-i:~$ kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
.....
Name: kubernetes-dashboard-token-hhpmx
Namespace: kubernetes-dashboard
Labels: <none>
Annotations: kubernetes.io/service-account.name: kubernetes-dashboard
kubernetes.io/service-account.uid: 54abf113-661d-4ace-b280-d19c9ca2b0ec
Type: kubernetes.io/service-account-token
Data
====
token: eyJhbGciOiJSUzI1NiIsImtpZCI6Imowc1BvQnZGbmw3NUFqVldmMk1tQWNPbUZqX3FvQkxfcWt5QUFObzBTbTgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1oaHBteCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjU0YWJmMTEzLTY2MWQtNGFjZS1iMjgwLWQxOWM5Y2EyYjBlYyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.XFZ73qmVeQyI3lcrANg3PhEGPXItArbOEqwt1Va4qBxpGEnjrlekN6-0G3x0RPXtAQsflX71bfcqdPGXxUnvwGWjgW67TDXi9ZvoVCfZbb-1QfOc_T69cOzoVXnhal_9mTjnY8O8QSROSsgERf5NDeQdtJ75X-RJqsYcovY31noNipC1cadgrweiaZJNH5dugm5PkoodNjFsvWr_FcjDMPggL5mWViot6rKd2BdlhwbOI46Y0b1mmwG3mZ77i0_GTYoSwBMEv5Ff48ZHodD9IZgIXvIvMT6B2ffIF7WxIjubKhA_3w7lXYchEEEewDtNG3n4VGLChFIb8x77GQZ3DA
ca.crt: 1025 bytes
namespace: 20 bytes
oder
olaf-krause@k8s-master-i:~$ kubectl get secrets
NAME TYPE DATA AGE
dashboard-admin-sa-token-4ssgj kubernetes.io/service-account-token 3 157m
default-token-ct5gd kubernetes.io/service-account-token 3 6d1h
olaf-krause@k8s-master-i:~$ kubectl describe secret dashboard-admin-sa-token-4ssgj Name: dashboard-admin-sa-token-4ssgj
Namespace: default
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-admin-sa
kubernetes.io/service-account.uid: 82c58d55-740c-4cdf-8e3f-97c858102061
Type: kubernetes.io/service-account-token
Data
====
token: eyJhbGciOiJSUzI1NiIsImtpZCI6Imowc1BvQnZGbmw3NUFqVldmMk1tQWNPbUZqX3FvQkxfcWt5QUFObzBTbTgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRhc2hib2FyZC1hZG1pbi1zYS10b2tlbi00c3NnaiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tc2EiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI4MmM1OGQ1NS03NDBjLTRjZGYtOGUzZi05N2M4NTgxMDIwNjEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpkYXNoYm9hcmQtYWRtaW4tc2EifQ.HT6KGHIRFNwz_Ih0JyrThb7TIqVMyXcUcDlAk4gkmmlCg_ns6Hs_RO5f04tmTsvucKQIGW-djtpZWJDgFuS799h8w15aczYu3HA_C660scDLZE6Eht-_jdGq4fDLD-3wT06s7HLyhsaVtMB7S20Sco8Ex_HBIw--CiD0wVvMKkw7znZnEXJ-RglBGAW09fqJOrKYKlHFbhZA3jCXRBuhpDGRnUJJFKw0cKGAOUfbSV1xHZehcza02WsWcu41U3sOS6vnxgdQzH-2ts-Uay0UanxZQfMH-xks2RjpAqe0rCrK--UxSCZ8l-TcbIpvbrpIxfjCs2FgnBJH49XwcvGNzA
ca.crt: 1025 bytes
namespace: 7 bytes
Alles anzeigen
Hmm es funktioniert trotzdem nicht. Grund das Dashboard läuft in der http variante nur auf localhost. Das kann man aber austricksen mit einem putty portforward:
Putty forward und das Dashboard
Im Dashboard sieht man den nginx service den wir im letzten Teil deployed haben. Klickt man auf cluster/nodes dann sieht man die cluster nodes mit CPU etc. Zustand. Das soll es eigentlich auch erstmal bzgl. Dashboard sein. Ihr könnt da mal etwas drin rumstöbern und wir werden da evtl. später nochmals drauf zurückkommen - ist eben eine nette Visualisierung.
Anmerkung: Sollte man ein leeres Dashboard sehen und oben recht bei der Glocke lauter permissions Fehler kommen habt Ihr ein token mit zuwenig Rechten erwischt -> anderes Token nehmen.
Was ich aber selber auch festgestellt habe - man muss ich auf jeden Fall auch mit dem Securitykonzepten für Kubernetes beschäftigen und mit der Ingress Komponente. Das manuelle Portforwarding wie wir es hier mit kubectl genutzt haben macht ja für eine Produktivumgebung nicht wirklich Sinn.
Installation Helm
Die Installation ist sehr einfach mit
olaf-krause@k8s-master-i:~$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
olaf-krause@k8s-master-i:~$ chmod 700 get_helm.sh
olaf-krause@k8s-master-i:~$ ./get_helm.sh
Downloading https://get.helm.sh/helm-v3.0.3-linux-amd64.tar.gz
Preparing to install helm into /usr/local/bin
[sudo] password for olaf-krause:
helm installed into /usr/local/bin/helm
erledigt. Dann müsst Ihr noch das Helm Chart Repo konfigurieren
olaf-krause@k8s-master-i:~$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" has been added to your repositories
Charts sind quasi vorgefertigte Schablonen um Softwarepakete zu deployen. Siehe hier https://hub.helm.sh/ für eine Auswahl. Oder Ihr ruft einfach
auf um eine Liste in der Shell zu bekommen.
Hinweis: Ab der Version 3 von Helm wird kein Tiller mehr verwendet (man findet das of als mandatory wenn man über Helm liest). Siehe auch https://www.heise.de/developer/meld…er-4586105.html
Das erste deplyoment mit Helm
Ich nehme mal Traefik. Grund ist simple ich habe mich außerhalb von K8S schon mal kurz mit Traefik beschäftigt und wir brauchen eh einen Ingress controller um die Cloud sinnvoll betrieben zu können.
olaf-krause@k8s-master-i:~$ helm install traefik stable/traefik
NAME: traefik
LAST DEPLOYED: Sat Feb 8 12:48:49 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get Traefik's load balancer IP/hostname:
NOTE: It may take a few minutes for this to become available.
You can watch the status by running:
$ kubectl get svc traefik --namespace default -w
Once 'EXTERNAL-IP' is no longer '<pending>'
$ kubectl describe svc traefik --namespace default | grep Ingress | awk '{print $3}'
2. Configure DNS records corresponding to Kubernetes ingress resources to point to the load balancer IP/hostname found in step 1
olaf-krause@k8s-master-i:~$ kubectl get svc traefik --namespace default -w
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
traefik LoadBalancer 10.96.213.70 <pending> 443:32105/TCP,80:30001/TCP 92s
Alles anzeigen
Im Dashboard sieht das jetzt so aus:
Trafik als zweiter service sichtbar
man kann sich die deployten pakete äh charts einfach mit
olaf-krause@k8s-master-i:~$ helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
traefik default 1 2020-02-08 12:48:49.234103505 +0000 UTC deployed traefik-1.86.1 1.7.20
anzeigen lassen und mit helm uninstall <name> deinstallieren. Das war mal wieder ein einfacherer Teil. Wer die Chart Repos mit einer GUI anschauen möchte sollte sich https://github.com/helm/monocular anschauen - evtl. kommt das ja in einer der nächsten Folgen.
Zuerst wird aber vermutlich das Thema Ingress Controller und Storage kommen da es zum Betrieb notwendig ist und irgendwie wollen wir ja von außen an die containern rankommen und auch Daten speichern.
Bis denne Ole
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.