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:
- k8s-master-i (192.168.0.40)
- k8s-compute-i (192.168.0.43)
- 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
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
prüfen. das ergibt bei mir (02.02.2020):
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.
# 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:
aufrufen. 10.244.0.0/16 ist das private Netz in dem die Kubernetes pods später laufen.
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
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
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
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 :)):
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
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:
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
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.