Kubernetes Cluster in Proxmox VE (AlmaLinux/CentOS)
######################
## Auf ctrlr & node ##
######################
# Statische IP
nmtui
# Containerd
dnf install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install containerd
# Remove old config file if present and populate new default config
rm /etc/containerd/config.toml
containerd config default | tee /etc/containerd/config.toml
# Edit config.toml
vi /etc/containerd/config.toml
[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 = true #!Auf true setzen!
#
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
# Module config / Enable bridge netfilter
vi /etc/modules-load.d/k8s.conf
br_netfilter
# Reboot
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
# Disable SELinux / https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# Install kubernetes
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"
]