Kubernetes Cluster in Proxmox VE (AlmaLinux/CentOS): Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
Zeile 7: | Zeile 7: | ||
'''''Getestet auf AlmaLinux 8''''' | '''''Getestet auf AlmaLinux 8''''' | ||
== Vorbereitungen == | |||
<nowiki>######################</nowiki> | <nowiki>######################</nowiki> | ||
Zeile 21: | Zeile 20: | ||
</syntaxhighlight>Oder per Konsole (Name des Interfaces kann abweichen):<syntaxhighlight lang="bash"> | </syntaxhighlight>Oder per Konsole (Name des Interfaces kann abweichen):<syntaxhighlight lang="bash"> | ||
vi /etc/sysconfig/network-scripts/ifcfg-ens18 | vi /etc/sysconfig/network-scripts/ifcfg-ens18 | ||
</syntaxhighlight>Beispiel:<syntaxhighlight lang="bash"> | </syntaxhighlight>Beispiel:<syntaxhighlight lang="bash" line="1"> | ||
BOOTPROTO=none | BOOTPROTO=none | ||
IPADDR=192.168.2.65 | IPADDR=192.168.2.65 | ||
Zeile 28: | Zeile 27: | ||
DNS1=192.168.2.1 | DNS1=192.168.2.1 | ||
DNS2=1.1.1.1 | DNS2=1.1.1.1 | ||
</syntaxhighlight> | |||
Hostname festlegen<syntaxhighlight lang="bash"> | |||
vi /etc/hostname | |||
</syntaxhighlight> | |||
Für den Controller .z.B.:<syntaxhighlight lang="bash" line="1"> | |||
k8s-ctrlr | |||
</syntaxhighlight>Für die Worker-Nodes z.B.:<syntaxhighlight lang="bash" line="1"> | |||
k8s-node-1 | |||
</syntaxhighlight>Hosts-Datei:<syntaxhighlight lang="bash"> | |||
vi /etc/hosts | |||
</syntaxhighlight><syntaxhighlight lang="bash" line="1"> | |||
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 | |||
192.168.2.65 k8s-ctrlr.my.domain k8s-ctrlr | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Zeile 61: | Zeile 77: | ||
</syntaxhighlight>Einfügen:<syntaxhighlight lang="bash"> | </syntaxhighlight>Einfügen:<syntaxhighlight lang="bash"> | ||
br_netfilter | br_netfilter | ||
</syntaxhighlight><nowiki>#</nowiki> | </syntaxhighlight><nowiki>#</nowiki> Anschließend noch ein Neustart um alle Änderungen zu übernehmen<syntaxhighlight lang="bash"> | ||
reboot | reboot | ||
</syntaxhighlight><nowiki>#</nowiki> Add kubernetes repository<syntaxhighlight lang="bash"> | |||
<nowiki>#</nowiki> Add kubernetes repository | |||
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo | cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo | ||
[kubernetes] | [kubernetes] | ||
name=Kubernetes | name=Kubernetes | ||
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch | |||
baseurl= | |||
enabled=1 | enabled=1 | ||
gpgcheck=1 | gpgcheck=1 | ||
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg | |||
gpgkey= | |||
exclude=kubelet kubeadm kubectl | exclude=kubelet kubeadm kubectl | ||
EOF | EOF | ||
</syntaxhighlight><nowiki>#</nowiki> Da <code>kubelet</code> noch nicht SELinux optimimert ist muss dieses dauerhaft deaktiviert werden | |||
Nur so können die Container auf das Dateisystem des Hosts zugreifen. | |||
Disable SELinux / <syntaxhighlight lang="bash"> | |||
setenforce 0 | setenforce 0 | ||
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config | sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config | ||
</syntaxhighlight> | |||
== Kubernetes installieren == | |||
dnf update | dnf update | ||
Zeile 241: | Zeile 247: | ||
https://techviewleo.com/how-to-install-docker-ce-on-almalinux/ | https://techviewleo.com/how-to-install-docker-ce-on-almalinux/ | ||
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ |
Version vom 15. Dezember 2022, 13:42 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
systemctl enable kubelet
##
- kubeadm / initialize new cluster & joining nodes & updating cluster
- kubectl / cmd line util to manage cluster
- kubelet / communication between nodes and API
##
####
Vom 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
######################
## Nur auf ctrlr ##
######################
## Firewall konfigurieren
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
## Cluster initialisieren
kubeadm init --control-plane-endpoint=10.16.0.65 --node-name k8s-ctrlr --pod-network-cidr=10.244.0.0/16
## Join Kommandos kopieren und irgendwo sicher ablegen ## !!!ACHTUNG Zertifikat läuft schnell ab
### Join Kommandos können erneut angezeigt werden
kubeadm token create --print-join-command
# Benutzer die Berechtigung für kubernetes geben
mkdir -p $HOME/.kube
cp -i /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
# Network overlay konfigurieren
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
######################
## Nur auf worker ##
######################
## Firewall konfigurieren
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
## 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://techviewleo.com/how-to-install-docker-ce-on-almalinux/
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/