Installation eines Kubernetes-Clusters unter CentOS7

Scope
Ziel des Artikels ist es, einfache Schritte für die Installation eines ersten Testclusters für Kubernetes aufzuzeigen.

Abgrenzungen
Dabei sind folgende Punkte zu beachten:

  • Die Konfiguration von SELINUX wird in einem anderen Artikel behandelt werden, für diesen Artikel werden wir SELINUX deaktivieren
  • Die Anpassung der Podsubnet Adressen folgt in einem nachfolgenden Artikel
  • Die Anpassung des ServiceSubenets erfolgt ebenfalls in einem anderen Artikel
 
Gentian Rrafshi
IT Consultant / DevOps Engineer

 


Installation

Schritt 1 – Statische IPs setzen 

Für ein Kubernetes-Cluster ist es empfehlenswert, statische IPs zu setzen. Hierfür wird im Verzeichnis /etc/sysconfig/network-scripts/ die Datei ifcfg-ens33 wie folgt geändert bzw. hinzufügen: 

BOOTPROTO="none"
IPADDR="<IP welche die VM haben soll>"
GATEWAY="<GATEWAY-IP>"
PREFIX="24"

Des Weiteren sollte das resolv.conf im /etc/-Verzeichnis geändert werden:

# Generated by NetworkManager
search <DOMAINNAME>
nameserver <GATEWAY-IP>

Um die Einstellungen zu übernehmen, sollte zumindest das Network neu gestartet werden. Der Befehl dafür ist:  

systemctl restart network

 

Schritt 2 - Vorbereiten des Hostnames 

Damit die VMs miteinander kommunizieren können, setzen wir Hostnames. 
In diesem Beispiel wird der Master als master-node und die Worker als worker-node-1worker-node-2, usw. bezeichnet. 

hostnamectl set-hostname master-node
hostnamectl set-hostname worker-node-1
hostnamectl set-hostname worker-node-2

und 

cat <<EOF>> /etc/hosts
192.168.70.100 master-node
192.168.70.101 node-1 worker-node-1
192.168.70.102 node-2 worker-node-2
EOF

Nun können sich alle Maschinen erreichen. (Testen per ping) 

 

Schritt 3 - Vorbereiten des SE-Linux 

CentOS7 hat SE-Linux, welches das Kubernetes-Cluster beeinflusst. Empfehlenswert ist es, in einer Testumgebung dies erstmal auszuschalten und später, in der produktiven Umgebung, zu konfigurieren. Um SE-Linux auszuschalten reichen folgende Befehle: 

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
reboot

 

Schritt 4 - Vorbereiten der Firewall 

Sind Firewall und IP-Tables nun aktiv, sollten dementsprechend die für das Kubernetes-Cluster notwendigen Ports freigeschaltet werden. Für die Masternodes sollten folgende Ports freigegeben werden [1]:

Protocol  Port Range  Purpose                  Used By
TCP       6443        Kubernetes API server    All
TCP       2379-2380   etcd server client API   kube-apiserver, etcd
TCP       10250       Kubelet API              Self, Control plane
TCP       10255       Read-Only, Kubelet API   Self, Control plane
TCP       10251       kube-scheduler           Self
TCP       10252       kube-controller-manager  Self

 

Weiter werden für die Workernodes folgende Ports benötigt: 

Protocol  Port Range  Purpose                  Used By
TCP       10250       Kubelet API              Self, Control plane
TCP       10255       Read-Only, Kubelet API   Self, Control plane

 

Hierfür ist in CentOS7 der Befehl 

firewall-cmd --permanent --add-port=XXX

zuständig.  Wichtig ist, danach die Firewall neu zu laden mit 

firewall-cmd –reload

Kubernetes selbst benötigt noch eine CNI (Container Network Interface). In diesem Falle wird Weave verwendet, für welchen ebenso Ports freigeschaltet werden sollten. 

Hierfür werden TCP 6783, UDP 6783 und UDP 6784 benötigt, welche Weaves Kontroll- und Datenports sind. [2] Diese Ports sind obligatorisch für das Kubernetes-Cluster. Es gibt noch weitere, eher optionale Ports, wie die Ports TCP 6781/6782, welche - falls Metricdaten von Weave gesammelt werden sollen - gebraucht werden. 

 

Schritt 5 - Ausschalten des Swaps 

Der nächste Schritt widmet sich dem Swap. Kubernetes ist ein verteiltes System, welches für den Betrieb im großen Maße ausgelegt ist. Bei einer großen Zahl von Containern mit vielen VMs ist Vorhersehbarkeit und Konsistent wünschenswert. Das Deaktivieren vom Swap ist hier der richtige Ansatz. Schließlich ist es besser, einen einzelnen Container zu eliminieren, als mehrere Container unvorhersehbar und langsam auf dem Computer laufen zu lassen.  Temporär lässt sich Swap wie folgt ausgeschalten: 

swapoff -a

Da der Swap nach jedem Reboot neu ausgeschalten werden muss, ist es empfehlenswert Swap permanent auszuschalten:  

sed -i ‘/ swap / s/^/#/’ /etc/fstab
swapoff -a

 

Schritt 6 - Installieren einer Container Runtime 

Kubernetes selbst braucht eine Container Runtime, damit die Container gestartet werden können und somit Pods deployed werden können. Docker ist hierfür ein der präferierte Kandidat. Zur Installation von Docker, hier speziell Version 18.09.6, wird folgender Befehl ausgeführt: 

yum install docker-18.09.6_ce -y 
systemctl start docker
systemctl enable docker

 

Schritt 7 - Vorbereiten Modprobe und IP-Tables 

Um für Kubernetes die Kommuniktion im Cluster zu erleichtern, sollte Sysctl konfiguriert werden: 

sysctl -w net.brigde.bridge-nf-call-iptables=1

 

Schritt 8 - Installieren von KubeletKubectl und Kubeadm 

Um ein Kubernetes-Cluster initialisieren zu können, werden Kubelet, Kubeadm und Kubectl benötigt. 

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install kubelet-18.2 kubeadm-18.2 kubectl-18.2 -y
systemctl start kubelet
systemctl enable kubelet

 

Schritt 9 - (NUR AUF MASTER AUSZUFÜHREN) Initialisieren von Kubernetes (dieser Schritt ist nur im Master zu machen) 

Zur Initialisierung wird einfach nur 

Kubeadm init

eingegeben. Danach sollte ein Join-Token generiert werden. Zum Beispiel:

kubeadm join 192.168.20.100:6443 --token 3r0tkb.4ily1z9seitmuqr8 \ 
    --discovery-token-ca-cert-hash sha256:e7555f4231e9553cd4363608886f32fb016dcfa9f38bee605a72dd9c06622142

Weiterhin weißt Kubelet nun daraufhin, einen /.kube-Ordner zu erstellen: 

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

Zu guter Letzt benötigen wir noch ein CNI, in diesem Falle Weave:

export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

 

Schritt 10 - (NUR AUF WORKER AUSFÜHREN) Die Workernodes hinzufügen 

Der vorher ausgegebene Jointoken wird jetzt in jedem Worker-Node ausgeführt. Z.B. 

kubeadm join 192.168.20.100:6443 --token 3r0tkb.4ily1z9seitmuqr8 \
    --discovery-token-ca-cert-hash sha256:e7555f4231e9553cd4363608886f32fb016dcfa9f38bee605a72dd9c06622142

 

Quellen: 

[1] https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#check-required-ports 

[2] https://www.weave.works/docs/net/latest/faq/ 

 


 

Kubernetes, how-to, k8s, Guide, installation , test, clusterenvironment

Kubernative GmbH
Ziegelei 9
72336 Balingen

Telefon:
Mail:
Internet:

+49 7433 2781296
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
www.kubernative.net

Social Media

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.