Ricerca nel sito web

Come installare un cluster Kubernetes su CentOS 8


Il processo di installazione di un CentOS 7 su CentOS 8 è quasi simile a quello di CentOS 7 (che puoi seguire qui), ma il il processo qui presenta alcune modifiche. Questi cambiamenti ruotano principalmente attorno all'installazione di Docker.

A partire da CentOS 8 (e per estensione RHEL 8), docker è ora stato sostituito nativamente da podman e buildah che sono strumenti di Redhat. Di fatto, il pacchetto docker è stato ora rimosso dal repository dei pacchetti predefinito.

Con questa mossa, il team di Redhat mira a semplificare il processo di creazione e utilizzo dei contenitori, senza bisogno di autorizzazioni speciali, mantenendo allo stesso tempo la compatibilità con le immagini docker e operandole senza bisogno di un demone. Podman promette di offrire maggiore flessibilità durante l'esecuzione in ambienti Kubernetes, ma il verdetto resta in sospeso.

Per questo articolo, esamineremo il processo di installazione di Kubernetes su una piattaforma CentOS 8, in esecuzione su Docker-CE (Community Edizione). In un articolo successivo eseguiremo anche un'installazione simile, utilizzando podman per i nostri contenitori.

Prerequisiti

  1. Tre server che eseguono CentOS 8: 1 nodo master e 2 nodi di lavoro.
  2. Si consiglia che i tuoi nodi abbiano almeno 2 CPU con 2 GB di RAM o più per macchina. Non si tratta di un requisito rigoroso ma dipende in gran parte dalle esigenze dell'applicazione che si intende eseguire.
  3. Connettività Internet su tutti i tuoi nodi. Recupereremo i pacchetti Kubernetes e docker dal repository. Allo stesso modo, dovrai assicurarti che il gestore pacchetti DNF sia installato per impostazione predefinita e possa recuperare i pacchetti in remoto.
  4. Tutti i tuoi nodi dovrebbero anche essere in grado di connettersi tra loro, su una rete privata o pubblica, a seconda di quale sia disponibile.
  5. Avrai anche bisogno di accedere a un account con privilegi sudo o root. In questo tutorial utilizzerò il mio account root.

Precauzione

La maggior parte dei nodi generalmente viene fornita con indirizzi MAC univoci, tuttavia, in alcuni casi unici, alcune macchine virtuali potrebbero avere indirizzi MAC identici. Si consiglia pertanto di verificare che il Product_UUID e l'indirizzo MAC non siano identici in nessuno dei nodi.

Kubernetes utilizza questi valori per identificare in modo univoco i nodi nel cluster. Se questi valori non sono univoci per ciascun nodo, il processo di installazione potrebbe non riuscire.

Per controllare l'indirizzo MAC dell'interfaccia di rete e confrontarlo.

ip link

Per controllare product_uuid e confrontare, esegui il comando seguente.

cat /sys/class/dmi/id/product_uuid 

Architettura logica

La nostra installazione è progettata per avere il Master-Node che controlla i Nodi di lavoro. Alla fine di questa installazione, la nostra architettura logica sarà simile a questa.

Nodo master: questa macchina generalmente funge da piano di controllo ed esegue il database del cluster e il server API (con cui comunica la CLI kubectl).

Il nostro cluster Kubernetes a 3 nodi sarà simile a questo:

Installazione del Cluster Kubernetes su Master-Node

Affinché Kubernetes funzioni, avrai bisogno di un motore di containerizzazione. Come accennato, utilizzeremo Docker-CE.

Le seguenti istituzioni verranno eseguite sul CentOS 8 Master-Node.

Passaggio 1: preparare nome host, firewall e SELinux

Sul tuo CentOS 8 Master-Node, imposta il nome host del sistema e aggiorna il DNS nel tuo file /etc/hosts.

hostnamectl set-hostname master-node
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

Successivamente, esegui il ping del tuo worker-node-1 e worker-node-2 per verificare se il file host aggiornato funziona correttamente utilizzando il comando ping.

ping 192.168.0.48
ping 192.168.0.49

Successivamente, disabilita Selinux, poiché ciò è necessario per consentire ai contenitori di accedere al filesystem host, necessario alle reti pod e ad altri servizi.

setenforce 0

Impostando setenforce su 0 si imposta effettivamente SELinux su permissivo, il che disabilita di fatto SELinux fino al successivo riavvio. Per disabilitarlo completamente, utilizzare il comando seguente e riavviare.

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

Kubernetes utilizza varie porte per la comunicazione e l'accesso e queste porte devono essere accessibili a Kubernetes e non limitate dal firewall.

Configurare le regole del firewall sulle porte.

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Passaggio 2: installa Docker-CE su CentOS 8

Dovrai prima aggiungere il repository Docker poiché non è più nell'elenco dei pacchetti predefinito utilizzando il seguente comando dnf config-manager.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Installa anche il pacchetto containerd.io che è disponibile come demone che gestisce l'intero ciclo di vita del contenitore del suo sistema host, dal trasferimento e archiviazione delle immagini all'esecuzione e supervisione del contenitore, all'archiviazione di basso livello fino ai collegamenti di rete e oltre .

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Ora installa l'ultima versione di un pacchetto docker-ce.

dnf install docker-ce

Ora puoi abilitare e avviare il servizio docker.

systemctl enable docker
systemctl start docker

Passaggio 3: installa Kubernetes (Kubeadm) su CentOS 8

Successivamente, dovrai aggiungere manualmente i repository Kubernetes poiché non vengono installati per impostazione predefinita su CentOS 8.

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

Kubeadm ti aiuta ad avviare un cluster Kubernetes minimo vitale conforme alle migliori pratiche. Con kubeadm, il tuo cluster dovrebbe superare i test di conformità Kubernetes.

Kubeadm supporta anche altre funzioni del ciclo di vita del cluster, come aggiornamenti, downgrade e gestione dei token bootstrap. Kubeadm è anche facile da integrare con altri strumenti di orchestrazione come Ansible e Terraform.

Con il repository del pacchetto ora pronto, puoi procedere e installare il pacchetto kubeadm.

dnf install kubeadm -y 

Una volta completata correttamente l'installazione, abilitare e avviare il servizio.

systemctl enable kubelet
systemctl start kubelet

Passaggio 4: crea un master del piano di controllo con kubeadm

Il master Kubernetes che funge da piano di controllo per il cluster esegue alcuni servizi critici necessari per il cluster. Pertanto, il processo di inizializzazione eseguirà una serie di controlli preliminari per garantire che la macchina sia pronta per eseguire Kubernetes. Questi controlli preliminari espongono avvisi e terminano in caso di errori. kubeadm init scarica e installa quindi i componenti del piano di controllo del cluster.

Ora è il momento di inizializzare il master Kubernetes, ma prima devi disabilitare lo scambio per poter eseguire il comando "kubeadm init".

swapoff -a

L'inizializzazione del master Kubernetes è un processo completamente automatizzato controllato dal comando "kubeadm init" come mostrato.

kubeadm init

Successivamente, copia il seguente comando e memorizzalo da qualche parte, poiché abbiamo richiesto di eseguire questo comando sui nodi di lavoro in un secondo momento.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  \ --discovery-token-ca-cert-hash ha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Suggerimento: a volte il comando precedente potrebbe generare errori sugli argomenti passati, quindi per evitare errori è necessario rimuovere il carattere '\' e il tuo comando finale sarà simile a questo.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5 –discovery token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Una volta inizializzato correttamente Kubernetes, devi consentire all'utente di iniziare a utilizzare il cluster. Nel nostro scenario, utilizzeremo l'utente root. Puoi anche avviare il cluster utilizzando sudo user come mostrato.

Per utilizzare root, esegui:

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

Per utilizzare un utente abilitato a sudo, esegui:

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

Ora conferma che il comando kubectl è attivato.

kubectl get nodes

In questo momento, vedrai che lo stato del nodo master è "Non pronto". Questo perché dobbiamo ancora distribuire la rete di pod nel cluster.

La rete pod è la rete sovrapposta per il cluster, che viene distribuita sopra la rete del nodo attuale. È progettato per consentire la connettività attraverso il pod.

Passaggio 5: configura la tua rete Pod

La distribuzione del cluster di rete è un processo altamente flessibile a seconda delle tue esigenze e sono disponibili molte opzioni. Poiché vogliamo mantenere la nostra installazione il più semplice possibile, utilizzeremo il plug-in Weavenet che non richiede alcuna configurazione o codice aggiuntivo e fornisce un indirizzo IP per pod, il che è ottimo per noi. Se vuoi vedere più opzioni, controlla qui.

Questi comandi saranno importanti per ottenere la configurazione della rete del pod.

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

Ora se controlli lo stato del tuo nodo principale, dovrebbe essere "Pronto".

kubectl get nodes

Successivamente, aggiungiamo i nodi di lavoro al cluster.

Aggiunta di nodi di lavoro al cluster Kubernetes

Le seguenti istruzioni verranno eseguite su ciascun nodo di lavoro quando si accede al cluster Kubernetes.

Passaggio 1: preparare nome host, firewall e SELinux

Per prima cosa imposta il nome host sul tuo worker-node-1 e worker-node-2, quindi aggiungi le voci host a /etc/hosts fascicolo.

hostnamectl set-hostname 'node-1'
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

Successivamente, esegui il ping del tuo nodo master dai tuoi nodi di lavoro per confermare che il file host aggiornato funzioni correttamente utilizzando il comando ping.

192.168.0.47

Successivamente, disabilita SElinux e aggiorna le regole del firewall.

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
firewall-cmd --permanent --add-port=6783/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --reload
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Passaggio 2: configurare Docker-CE e Kubernetes Repo

Aggiungi prima il repository Docker utilizzando il gestore di configurazione DNF.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Successivamente, aggiungi il pacchetto containerd.io.

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Con questi due pacchetti installati, installa l'ultima versione di docker-ce.

dnf install docker-ce

Abilita e avvia il servizio docker.

systemctl enable docker
systemctl start docker

Dovrai aggiungere manualmente i repository Kubernetes poiché non sono preinstallati su CentOS 8.

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

Passaggio 3: installa Kubeadm su CentOS 8

Con il repository del pacchetto ora pronto, puoi procedere e installare kubeadm.

dnf install kubeadm -y 

Avvia e abilita il servizio.

systemctl enable kubelet
systemctl start kubelet

Passaggio 4: unisci il nodo di lavoro al cluster Kubernetes

Ora richiediamo il token generato da kubeadm init per unirci al cluster. Puoi copiarlo e incollarlo sul tuo nodo-1 e nodo-2 se lo hai copiato da qualche parte.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf78

Come suggerito nell'ultima riga, torna al tuo nodo master e verifica se il nodo-1 di lavoro e il nodo di lavoro-2 si sono uniti al cluster utilizzando il seguente comando.

kubectl get nodes

Se tutti i passaggi vengono eseguiti correttamente, dovresti vedere node-1 e node-2 nello stato pronto sul master-node. A questo punto, hai distribuito con successo un cluster Kubernetes su CentOS 8.

Lettura consigliata: Come distribuire Nginx su un cluster Kubernetes

Alcune limitazioni

Il cluster che abbiamo creato qui ha un singolo nodo master e, come tale, se il nodo master fallisce, il tuo cluster potrebbe perdere dati e potrebbe essere necessario ricrearlo da zero.

Per questo motivo, consiglio una configurazione Altamente disponibile.