Kubernetes Cluster in Proxmox VE (AlmaLinux/CentOS): Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung |
|||
Zeile 146: | Zeile 146: | ||
<nowiki>##</nowiki> Cluster initialisieren<syntaxhighlight lang="bash"> | <nowiki>##</nowiki> Cluster initialisieren<syntaxhighlight lang="bash"> | ||
kubeadm init --control-plane-endpoint= | kubeadm init --control-plane-endpoint=<Controller-IP> --node-name k8s-ctrlr --pod-network-cidr=10.244.0.0/16 | ||
</syntaxhighlight><nowiki>##</nowiki> Join Kommandos brauch man sich nicht zu speichern da der Token jederzeit mit <code>kubeadm token create --print-join-command</code> neu generiert werden kann. | </syntaxhighlight><nowiki>##</nowiki> Join Kommandos brauch man sich nicht zu speichern da der Token jederzeit mit <code>kubeadm token create --print-join-command</code> neu generiert werden kann. | ||
Zeile 156: | Zeile 156: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<nowiki>#</nowiki> Als root muss nur folgender Befehl ausgeführt werden | <nowiki>#</nowiki> Als root muss nur folgender Befehl ausgeführt werden<syntaxhighlight lang="bash"> | ||
export KUBECONFIG=/etc/kubernetes/admin.conf | export KUBECONFIG=/etc/kubernetes/admin.conf | ||
</syntaxhighlight>Damit das nicht bei jeder neuen Sitzung wiederholt werden muss die Zeile am Ende von <code>.bash_profile</code> einfügen:<syntaxhighlight lang="bash"> | |||
<nowiki>#</nowiki> Network overlay konfigurieren | vi ~/.bash_profile | ||
</syntaxhighlight><nowiki>#</nowiki> Network overlay konfigurieren | |||
kubectl apply -f <nowiki>https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml</nowiki> | kubectl apply -f <nowiki>https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml</nowiki> |
Version vom 15. Dezember 2022, 19:36 Uhr
Anleitung um ein Kubernetes Cluster innerhalb von Proxmox VE einzurichten.
Getestet auf AlmaLinux 8
Vorbereitungen
######################
## Auf ctrlr & node ##
######################
# Feste IP einrichten
Grafische Oberfläche:
nmtui
Oder per Konsole (Name des Interfaces kann abweichen):
vi /etc/sysconfig/network-scripts/ifcfg-ens18
Beispiel:
BOOTPROTO=none
IPADDR=192.168.2.65
PREFIX=24
GATEWAY=192.16.2.1
DNS1=192.168.2.1
DNS2=1.1.1.1
Hostname festlegen
vi /etc/hostname
Für den Controller .z.B.:
k8s-ctrlr
Für die Worker-Nodes z.B.:
k8s-node-1
Hosts-Datei:
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.2.65 k8s-ctrlr.my.domain k8s-ctrlr
# Containerd installieren
dnf install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install containerd
# Die ggf. automatisch installierte config.toml löschen und neu generieren:
rm /etc/containerd/config.toml
containerd config default | tee /etc/containerd/config.toml
# Die neu erzeugte config.toml bearbeiten
vi /etc/containerd/config.toml
Folgenden Absatz suchen und SystemdCgroup
auf true setzen (Suchen in vi mit /<Suchbegriff>
):
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
BinaryName = ""
CriuImagePath = ""
CriuPath = ""
CriuWorkPath = ""
IoGid = 0
IoUid = 0
NoNewKeyring = false
NoPivotRoot = false
Root = ""
ShimCgroup = ""
SystemdCgroup = false
#
vi /etc/sysctl.conf
Folgende Zeile am Ende einfügen, bzw. auskommentieren, falls schon vorhanden:
net.ipv4.ip_forward=1
# Module config / Enable bridge netfilter
vi /etc/modules-load.d/k8s.conf
Einfügen:
br_netfilter
# Anschließend noch ein Neustart um alle Änderungen zu übernehmen
reboot
# Add kubernetes repository
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
# Da kubelet
noch nicht SELinux optimimert ist muss dieses dauerhaft deaktiviert werden
Nur so können die Container auf das Dateisystem des Hosts zugreifen.
Disable SELinux /
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Kubernetes installieren
dnf update
dnf install kubeadm kubectl kubelet --disableexcludes=kubernetes
Den kubelet Service automatisch starten:
systemctl enable kubelet
##
- kubeadm / initialize new cluster & joining nodes & updating cluster
- kubectl / cmd line util to manage cluster
- kubelet / communication between nodes and API
##
Firewall konfigurieren
Auf dem Controller
firewall-cmd --permanent --add-port={6443,10250,10256,2379-2380}/tcp
firewall-cmd --permanent --add-port=8472/udp
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
Auf den Worker Nodes
firewall-cmd --permanent --add-port={10250,10256,30000-32767}/tcp
firewall-cmd --permanent --add-port=8472/udp
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
####
Vom Worker-Node kann nun ein Template erstellt werden, welches immer wieder verwendet werden kann
####
## Wenn alle VMs aus dem selben Template erstellt wurden, muss die 'machine-id' neu generiert werden
rm /etc/machine-id
systemd-machine-id-setup
Initializing machine ID from KVM UUID. -> machine-id aus der UUID der VM generiert die Proxmox festgelegt hat.
######################
## Nur auf ctrlr ##
######################
## Cluster initialisieren
kubeadm init --control-plane-endpoint=<Controller-IP> --node-name k8s-ctrlr --pod-network-cidr=10.244.0.0/16
## Join Kommandos brauch man sich nicht zu speichern da der Token jederzeit mit kubeadm token create --print-join-command
neu generiert werden kann.
Damit ein Linux User auf dem Controller Administrativen Zugriff auf den Cluster hat m
# Benutzer die Berechtigung für kubernetes geben
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# Als root muss nur folgender Befehl ausgeführt werden
export KUBECONFIG=/etc/kubernetes/admin.conf
Damit das nicht bei jeder neuen Sitzung wiederholt werden muss die Zeile am Ende von .bash_profile
einfügen:
vi ~/.bash_profile
# Network overlay konfigurieren
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
######################
## Nur auf worker ##
######################
## Auf dem Controller das join command anzeigen lassen
kubeadm token create --print-join-command
# Auf node ausführen
# Auf dem controller überprüfen ob der node registreiert wurde
kubectl get nodes
k8s-ctrlr Ready control-plane 19m v1.26.0
k8s-node-1 Ready <none> 3m1s v1.26.0
#### Dashboard
# Dashboard installieren
# Zugriff von LAN / https://www.thegeekdiary.com/how-to-access-kubernetes-dashboard-externally/
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
type: NodePort ### clusterIP to NodePort
# Create admin-user
https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md
# Metrics Server installieren / https://www.scmgalaxy.com/tutorials/kubernetes-metrics-server-error-readiness-probe-failed-http-probe-failed-with-statuscode/
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
- Download https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
- Modify and add "- --kubelet-insecure-tls" in deployment.spec.template.spec.containers.args
- kubectl apply -f components.yaml
###############################
###Speziell gitlab
###############################
# DNS zur gitlab-runner config
[runners.kubernetes.dns_config]
nameservers = [
"10.16.0.3",
"10.16.0.4"
]
Quellen
https://www.youtube.com/watch?v=U1VzcjCB_sY
https://docs.docker.com/engine/install/centos/
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/