1. Dashboard
  2. Blog
    1. Artikel
  3. Forum
  4. Galerie
    1. Alben
    2. Karte
  5. Shop
    1. Hilfe
    2. Bestellungen
    3. Versandkosten
  6. Marktplatz
    1. Nutzungsbedingungen
    2. Karte
    3. Bewertungen
  7. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  • Anmelden
  • Registrieren
  • Suche
Blog-Artikel
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Blog-Artikel
  • Galerie
  • Produkte
  • Marktplatz-Eintrag
  • Erweiterte Suche
  1. Oles Techblog
  2. Blog
  3. Oles Technik & Smarthome Blog

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

  • Olaf Krause
  • 2. Februar 2020 um 15:43
  • 2.500 Mal gelesen
Inhaltsverzeichnis [VerbergenAnzeigen]
  1. Vorraussetzungen
  2. Paketinstallation
    1. Anpassungen um bei der Konfig Warnungen zu vermeiden
  3. K8s Configuration des Masters
  4. Ein kubernetes pod network anlegen und zu Verfügung stellen

Moin zusammen,

ehrlich gesagt noch keine Ahnung ob das jetzt ein Posting oder mehrere werden, da ich live blogge sprich während der Installation. Wenn es zu viel wird splitte ich es in mehrer Beiträge.

Ziel ist es einen Kubernetes Cluster mit mindestens einem Master (weniger geht eh nicht) und 2 worker nodes aufzusetzen. Das ganze auf Ubuntu Version 18 wegen LTS support; die 19 hat nur support bis Mitte 2020. Hardwareplatform sind Intel I5 und i7 also gebräuchliche Heimprozessoren aber mit Hyper-V Cluster als Hardwareabstraktionsschicht (einfach weil ich das schon laufen habe). Ob das geht werden wir sehen, Alternative Openstack, VMCluster oder wenn Ihr übrig habt direkt auf dem nackten Metall eine Ubuntu Barebone Installation machen.

Input zu dieser Anleitung kam von folgenden Seiten:

  • https://vitux.com/install-and-deploy-kubernetes-on-ubuntu/
  • https://linuxconfig.org/how-to-install…ic-beaver-linux

Vorraussetzungen

Also ich setze mal voraus das Ubuntu 18 LTS schon läuft. Server Variante ohne GUI-Kram und keine zusätzlichen Pakete installiert & SSH aktiviert. Wir werden alles auf der Kommandozeile machen. Bei mir laufen also aktuell drei nodes:

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

Alles mit einer statischen IP (oder fest via DHCP) versehen. Anmerkung: Statische IP Adressen für Ubuntu 18 weist mit netplan zu. Die Rechnernamen müssen eindeutig sein (sollte eh selbstverständlich sein aber wer weiss). Zwingend erforderlich sind mindestens zwei CPU-Cores, Speichermenge: ich habe es mit 512MB min und dynamisch nach oben konfiguriert.

Anmerkung nachdem der Master läuft: Er braucht im idle Zustand gerade 3GB Speicher.

Hier die Installation der Komponenten bevor wir anfangen K8s zu konfigurieren:

Paketinstallation

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

curl sollte schon auf der LTS version sein. Wenn nicht, nachinstallieren. Nicht wundern das wir xenial (Ubuntu 16) angeben, es gibt noch kein bionic (Ubuntu 18) repo für Kubernetes. Ob die Installation geklappt hat mit

Code
kubeadm version
docker --version 

prüfen. das ergibt bei mir (02.02.2020):

Code
olaf-krause@k8s-master-i:~$ docker --version
Docker version 18.09.7, build 2d0083d
olaf-krause@k8s-master-i:~$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.2", GitCommit:"59603c6e503c87169aea6106f57b9f242f64df89", GitTreeState:"clean", BuildDate:"2020-01-18T23:27:49Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"linux/amd64"}

Anpassungen um bei der Konfig Warnungen zu vermeiden

Docker mit systemd starten siehe https://kubernetes.io/docs/setup/pro…ainer-runtimes/ dazu die /etc/docker/daemon.json erstellen und die service.d.

Code
# Setup daemon.
cat > /etc/docker/daemon.json <<EOF
{  "exec-opts": ["native.cgroupdriver=systemd"],  "log-driver": "json-file",  "log-opts": {    "max-size": "100m"  },  "storage-driver": "overlay2"
}
EOF

mkdir -p /etc/systemd/system/docker.service.d

# Restart docker.
systemctl daemon-reload
systemctl restart docker
Alles anzeigen

die Meldungen:

W0202 08:38:28.754318 2945 validation.go:28] Cannot validate kube-proxy config - no validator is available

W0202 08:38:28.754364 2945 validation.go:28] Cannot validate kubelet config - no validator is available

vom Init Kommando (nächster Schritt) können erstmal ignoriert werden. Ach der Swap muss für Kubernetes noch ausgeschaltet werden. Temporär geht das zwar mit swapoff -a aber beim nächsten reboot ist der dann wieder an. Besser in /etc/fstab die Zeile mit # auskommentieren.

K8s Configuration des Masters

Erster Schritt ist simple einfach das Kommando:

Code
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

aufrufen. 10.244.0.0/16 ist das private Netz in dem die Kubernetes pods später laufen.

Code
root@k8s-master-i:/etc/docker# kubeadm init --pod-network-cidr=10.244.0.0/16
W0202 10:35:37.495990   11851 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0202 10:35:37.496053   11851 validation.go:28] Cannot validate kubelet config - no validator is available
[init] Using Kubernetes version: v1.17.2
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [k8s-master-i kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.16                                        8.0.40]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [k8s-master-i localhost] and IPs [192.168.0.40 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [k8s-master-i localhost] and IPs [192.168.0.40 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
W0202 10:36:06.223184   11851 manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[control-plane] Creating static Pod manifest for "kube-scheduler"
W0202 10:36:06.235086   11851 manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 23.502240 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.17" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node k8s-master-i as control-plane by adding the label "node-role.kubernetes.io/master=''"
[mark-control-plane] Marking the node k8s-master-i as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Using token: ndcyaw.ofx2d33sueqg1qvb
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.40:6443 --token ndcyaw.ofx2bnuiasdeqg1qvb \
    --discovery-token-ca-cert-hash sha256:68c367b8dc017e217ff2a1034asdbi8f994d9d3b7ae4ac7b9ea639bd08c202
Alles anzeigen

dann noch wie es oben in der Ausgabe steht als normaler user

Code
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

mit dem Kommando

Code
kubeadm join 192.168.0.40:6443 --token ndcyaw.ofx2bnuiasdeqg1qvb \    --discovery-token-ca-cert-hash sha256:68c367b8dc017e217ff2a1034asdbi8f994d9d3b7ae4ac7b9ea639bd08c20

können dann weitere nodes dem cluster hinzugefügt werden (als root ausführen). Kurz prüfen wie der stand ist mit

Code
olaf-krause@k8s-master-i:~/.kube$ kubectl get nodes
NAME           STATUS     ROLES    AGE     VERSION
k8s-master-i   NotReady   master   3h45m   v1.17.2

soweit OK wir sind noch auf dem ersten Master und haben noch keine weiteren nodes hinzugefügt.

Ein kubernetes pod network anlegen und zu Verfügung stellen

Zum Einlesen evtl. https://kubernetes.io/docs/concepts/…ion/networking/ studieren. Default und deswegen recht einfach zu nutzen ist Flannel.

Diese Seite gibt auch noch eine gute Übersicht: https://rancher.com/blog/2019/2019…anal-and-weave/

Legen wir doch einfach los (denn Sie wissen nicht was sie tun :)):

Code
olaf-krause@k8s-master-i:~/.kube$ sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
[sudo] password for olaf-krause:
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds-amd64 created
daemonset.apps/kube-flannel-ds-arm64 created
daemonset.apps/kube-flannel-ds-arm created
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created
Alles anzeigen

kurzer check

Code
olaf-krause@k8s-master-i:~/.kube$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                   READY   STATUS    RESTARTS   AGE
kube-system   coredns-6955765f44-gk8m6               1/1     Running   0          4h3m
kube-system   coredns-6955765f44-nrt9k               1/1     Running   0          4h3m
kube-system   etcd-k8s-master-i                      1/1     Running   0          4h3m
kube-system   kube-apiserver-k8s-master-i            1/1     Running   0          4h3m
kube-system   kube-controller-manager-k8s-master-i   1/1     Running   0          4h3m
kube-system   kube-flannel-ds-amd64-7x2js            1/1     Running   0          32s
kube-system   kube-proxy-6qds9                       1/1     Running   0          4h3m
kube-system   kube-scheduler-k8s-master-i            1/1     Running   0          4h3m

Der Masternode ist jetzt einsatzbereit:

Code
olaf-krause@k8s-master-i:~/.kube$ kubectl get nodes
NAME           STATUS   ROLES    AGE    VERSION
k8s-master-i   Ready    master   4h4m   v1.17.

Das war's jetzt für Teil 1 Kubernetes aufsetzen für dummies. Damit wäre die Frage auch beantwortet ob es mehrere Teile gibt: Ja!

Wieviele es noch werden - mal schauen :P

EEG: PV 20kWp - 90kWh Victron LFP Speicher; EVs: BMW i3 60Ah & Tesla M3 Gadgets im Fluss
3D Drucker: Voron 2.4 & Qidi X-Max + X-Plus; Schaut im Shop vorbei: https://www.elektrifiziert.net/shop/

  • Vorheriger Artikel Energy4u Baumurkunde
  • Nächster Artikel Einen Kubernetes Cluster Installieren - Kubernetes für dummies - Teil 2

Kommentare

Neu erstellte Kommentare unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.

  • Smileys
  • :)
  • :(
  • ;)
  • :P
  • ^^
  • :D
  • ;(
  • X(
  • :*
  • :|
  • 8o
  • =O
  • <X
  • ||
  • :/
  • :S
  • X/
  • 8)
  • ?(
  • :huh:
  • :rolleyes:
  • :love:
  • :pinch:
  • 8|
  • :cursing:
  • :wacko:
  • :thumbdown:
  • :thumbup:
  • :sleeping:
  • :whistling:
  • :evil:
  • :saint:
  • <3
  • :!:
  • :?:

Neu erstellte Kommentare unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.

  • Smileys
  • :)
  • :(
  • ;)
  • :P
  • ^^
  • :D
  • ;(
  • X(
  • :*
  • :|
  • 8o
  • =O
  • <X
  • ||
  • :/
  • :S
  • X/
  • 8)
  • ?(
  • :huh:
  • :rolleyes:
  • :love:
  • :pinch:
  • 8|
  • :cursing:
  • :wacko:
  • :thumbdown:
  • :thumbup:
  • :sleeping:
  • :whistling:
  • :evil:
  • :saint:
  • <3
  • :!:
  • :?:

Kategorien

  • Computer und IT

Archiv

  1. 2024 (3)
    1. September (1)
    2. August (1)
    3. Februar (1)
  2. 2022 (2)
    1. März (1)
    2. Februar (1)
  3. 2021 (11)
    1. November (1)
    2. September (1)
    3. August (1)
    4. Mai (7)
    5. März (1)
  4. 2020 (10)
    1. Oktober (2)
    2. August (1)
    3. Juli (1)
    4. April (1)
    5. März (1)
    6. Februar (3)
      • Einen K8S Cluster betreiben - Kubernetes für dummies - Teil 3
      • Einen Kubernetes Cluster Installieren - Kubernetes für dummies - Teil 2
      • Einen Kubernetes Cluster Installieren - Kubernetes für dummies - Teil 1
    7. Januar (1)
  5. 2019 (2)
    1. Dezember (2)
  6. 2018 (6)
    1. Oktober (4)
    2. April (1)
    3. Februar (1)
  7. 2017 (8)
    1. Dezember (4)
    2. August (1)
    3. März (3)
  8. 2016 (10)
    1. November (1)
    2. Oktober (2)
    3. September (3)
    4. Mai (1)
    5. April (1)
    6. März (1)
    7. Februar (1)
  9. 2015 (1)
    1. November (1)

Tags

  • Ubuntu
  • kubernetes
  • k8s
  • cluster
  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™ 6.1.8