Vai al contenuto

Laboratorio 9: Avvio dei nodi di lavoro Kubernetes

Info

Si tratta di un fork dell'originale "Kubernetes the hard way" scritto originariamente da Kelsey Hightower (GitHub: kelseyhightower). A differenza dell'originale, che si basa su distribuzioni simili a Debian per l'architettura ARM64, questo fork si rivolge a distribuzioni Enterprise Linux come Rocky Linux, che gira su architettura x86_64.

In questo laboratorio, si avvierà il bootstrap di due nodi di lavoro Kubernetes. Si installeranno i seguenti componenti: runc, plugin di rete per container, containerd, kubelet, e kube-proxy.

Prerequisiti

Dal jumpbox, copiare i file binari di Kubernetes e i file unit di systemd su ciascuna istanza di lavoro:

for host in node-0 node-1; do
  SUBNET=$(grep $host machines.txt | cut -d " " -f 5)
  sed "s|SUBNET|$SUBNET|g" \
    configs/10-bridge.conf > 10-bridge.conf 

  sed "s|SUBNET|$SUBNET|g" \
    configs/kubelet-config.yaml > kubelet-config.yaml

  scp 10-bridge.conf kubelet-config.yaml \
  root@$host:~/
done
for host in node-0 node-1; do
  scp \
    downloads/runc.amd64 \
    downloads/crictl-v1.32.0-linux-amd64.tar.gz \
    downloads/cni-plugins-linux-amd64-v1.6.2.tgz \
    downloads/containerd-2.0.3-linux-amd64.tar.gz \
    downloads/kubectl \
    downloads/kubelet \
    downloads/kube-proxy \
    configs/99-loopback.conf \
    configs/containerd-config.toml \
    configs/kubelet-config.yaml \
    configs/kube-proxy-config.yaml \
    units/containerd.service \
    units/kubelet.service \
    units/kube-proxy.service \
    root@$host:~/
done

I comandi in questo laboratorio devono essere eseguiti separatamente su ciascuna istanza di lavoro: node-0 e node-1. Vengono mostrati solo i passaggi relativi a node-0. È necessario ripetere esattamente gli stessi passaggi e comandi su node-1.

Accedere all'istanza di lavoro node-0 con il comando ssh.

ssh root@node-0

Fornitura ad un nodo di lavoro Kubernetes

Installare le dipendenze del sistema operativo:

  dnf -y update
  dnf -y install socat conntrack ipset tar

Il binario socat supporta il comando kubectl port-forward.

Disattivazione della swap

Se hai abilitato la swap, il kubelet non riuscirà ad avviarsi. Si consiglia di disabilitare lo swap per garantire che Kubernetes fornisca una corretta allocazione delle risorse e una qualità del servizio adeguata.

Verificare se la swap è attiva:

swapon --show

Se l'output è vuoto, la swap non è abilitata. Se l'output non è vuoto, eseguire il seguente comando per disabilitare immediatamente la swap:

swapoff -a

Per garantire che la swap rimanga disattivata dopo il riavvio, commentare la riga che monta automaticamente il volume di swap nel file /etc/fstab. Digitare:

sudo sed -i '/swap/s/^/#/' /etc/fstab

Creare le directory di installazione:

mkdir -p \
  /etc/cni/net.d \
  /opt/cni/bin \
  /var/lib/kubelet \
  /var/lib/kube-proxy \
  /var/lib/kubernetes \
  /var/run/kubernetes

Installare i binari di lavoro:

  mkdir -p containerd
  tar -xvf crictl-v1.32.0-linux-amd64.tar.gz
  tar -xvf containerd-2.0.3-linux-amd64.tar.gz -C containerd
  tar -xvf cni-plugins-linux-amd64-v1.6.2.tgz -C /opt/cni/bin/
  mv runc.amd64 runc
  chmod +x crictl kubectl kube-proxy kubelet runc 
  mv crictl kubectl kube-proxy kubelet runc /usr/local/bin/
  mv containerd/bin/* /bin/

Configurazione della rete CNI

Creare il file di configurazione di rete bridge:

mv 10-bridge.conf 99-loopback.conf /etc/cni/net.d/

Configurazione di containerd

Installare i file di configurazione containerd:

  mkdir -p /etc/containerd/
  mv containerd-config.toml /etc/containerd/config.toml
  mv containerd.service /etc/systemd/system/

Configurazione di Kubelet

Creare il file di configurazione kubelet-config.yaml:

  mv kubelet-config.yaml /var/lib/kubelet/
  mv kubelet.service /etc/systemd/system/

Configurazione del proxy Kubernetes

  mv kube-proxy-config.yaml /var/lib/kube-proxy/
  mv kube-proxy.service /etc/systemd/system/

Nota

Sebbene questa sia considerata una forma di sicurezza inadeguata, potrebbe essere necessario disabilitare temporaneamente o permanentemente SELinux se si riscontrano problemi nell'avvio dei servizi systemd necessari. La soluzione corretta consiste nell'analizzare e creare i file di policy richiesti utilizzando strumenti quali ausearch, audit2allow, ecc.\

Per rimuovere SELinux e disabilitarlo, eseguire quanto segue:

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

Avvio dei servizi di lavoro

  systemctl daemon-reload
  systemctl enable containerd kubelet kube-proxy
  systemctl start containerd kubelet kube-proxy

Verifica

Le istanze di calcolo create in questo tutorial non avranno l'autorizzazione per completare questa sezione di verifica. Eseguire i seguenti comandi dalla macchina jumpbox.

Elencare i nodi Kubernetes registrati:

ssh root@server "kubectl get nodes --kubeconfig admin.kubeconfig"
NAME     STATUS   ROLES    AGE    VERSION
node-0   Ready    <none>   1m     v1.32.0

Dopo aver completato tutti i passaggi precedenti in questo laboratorio sia su node-0 che su node-1, l'output del comando kubectl get nodes dovrebbe mostrare:

NAME     STATUS   ROLES    AGE    VERSION
node-0   Ready    <none>   1m     v1.32.0
node-1   Ready    <none>   10s    v1.32.0

Successivo: Configurazione di kubectl per l'accesso remoto

Author: Wale Soyinka

Contributors: Steven Spencer, Ganna Zhyrnova