Com instal·lar un clúster Kubernetes a CentOS 8


El procés d'instal·lació d'un clúster de Kubernetes a CentOS 8 és gairebé similar al de CentOS 7 (que podeu seguir aquí), però el procés aquí té alguns canvis. Aquests canvis, majoritàriament, giren al voltant de la instal·lació de Docker.

A partir de CentOS 8 (i per extensió RHEL 8), ara docker s'ha substituït de manera nativa per podman i buildah, que són eines de Redhat. De fet, ara el paquet docker s'ha eliminat del dipòsit de paquets predeterminat.

Amb aquest moviment, l'equip de Redhat pretén simplificar el procés de creació i ús de contenidors, sense necessitat de permisos especials, alhora que manté la compatibilitat amb les imatges de Docker i opera'ls sense necessitat de dimoni. Podman promet oferir més flexibilitat quan s'executa en entorns Kubernetes, però el jurat continua allà fora.

Per a aquest article, passarem a través del procés d'instal·lació de Kubernetes en una plataforma CentOS 8, que s'executa a Docker-CE (Community Edition). En un article posterior, també passarem a una instal·lació similar, utilitzant podman per als nostres contenidors.

  1. Tres servidors amb CentOS 8: 1 node mestre i 2 nodes de treball.
  2. Es recomana que els vostres nodes tinguin almenys 2 CPU amb 2 GB de RAM o més per màquina. Aquest no és un requisit estricte, però es deu en gran mesura a les necessitats de l'aplicació que voleu executar.
  3. Connectivitat a Internet a tots els vostres nodes. Recollirem els paquets Kubernetes i Docker del repositori. Igualment, haureu d'assegurar-vos que el gestor de paquets DNF estigui instal·lat de manera predeterminada i que pugui recuperar paquets de manera remota.
  4. Tots els vostres nodes també haurien de poder connectar-se entre ells, ja sigui en una xarxa privada o pública, la que estigui disponible.
  5. També necessitareu accedir a un compte amb privilegis sudo o root. En aquest tutorial, faré servir el meu compte root.

La majoria dels nodes solen tenir adreces MAC úniques, però, en alguns casos únics, algunes màquines virtuals poden tenir adreces MAC idèntiques. Per tant, es recomana que confirmeu que Product_UUID i l'adreça MAC no són idèntiques en cap dels nodes.

Kubernetes utilitza aquests valors per identificar de manera única els nodes del clúster. Si aquests valors no són únics per a cada node, el procés d'instal·lació pot fallar.

Per comprovar l'adreça MAC de la interfície de xarxa i comparar-la.

# ip link

Per comprovar el product_uuid i comparar, executeu l'ordre següent.

# cat /sys/class/dmi/id/product_uuid 

La nostra instal·lació està dissenyada perquè el node mestre controli els nodes de treball. Al final d'aquesta instal·lació, la nostra arquitectura lògica semblarà així.

Node mestre: aquesta màquina normalment actua com a pla de control i executa la base de dades del clúster i el servidor de l'API (amb el qual es comunica la CLI de kubectl).

El nostre clúster Kubernetes de 3 nodes tindrà un aspecte com aquest:

Instal·lació de Kubernetes Cluster en Master-Node

Perquè Kubernetes funcioni, necessitareu un motor de contenidorització. Com s'ha esmentat, farem servir Docker-CE.

Les institucions següents es realitzaran a CentOS 8 Master-Node.

Al vostre node mestre CentOS 8, configureu el nom d'amfitrió del sistema i actualitzeu el DNS al fitxer /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

A continuació, feu ping al vostre worker-node-1 i worker-node-2 per comprovar si el vostre fitxer d'amfitrió actualitzat funciona correctament mitjançant l'ordre ping.

# ping 192.168.0.48
# ping 192.168.0.49

A continuació, desactiveu Selinux, ja que és necessari per permetre als contenidors accedir al sistema de fitxers amfitrió, que necessiten les xarxes de pods i altres serveis.

# setenforce 0

Establir setenforce a 0 estableix SELinux com a permissiu, la qual cosa desactiva efectivament SELinux fins al proper reinici. Per desactivar-lo completament, utilitzeu l'ordre següent i reinicieu-lo.

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

Kubernetes fa ús de diversos ports per a la comunicació i l'accés i aquests ports han de ser accessibles per Kubernetes i no estar limitats pel tallafoc.

Configureu les regles del tallafoc als ports.

# 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

Haureu d'afegir primer el dipòsit de Docker, ja que ja no es troba a la llista de paquets per defecte mitjançant la següent comanda dnf config-manager.

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

Instal·leu també el paquet containerd.io que està disponible com a dimoni que gestiona el cicle de vida complet del contenidor del seu sistema amfitrió, des de la transferència i l'emmagatzematge d'imatges fins a l'execució i supervisió del contenidor, passant per l'emmagatzematge de baix nivell fins a fitxers adjunts de xarxa i més enllà.

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

Ara instal·leu la darrera versió d'un paquet docker-ce.

# dnf install docker-ce

Ara podeu habilitar i iniciar el servei Docker.

# systemctl enable docker
# systemctl start docker

A continuació, haureu d'afegir els repositoris de Kubernetes manualment, ja que no s'instal·len de manera predeterminada a 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 us ajuda a iniciar un clúster Kubernetes viable mínim que s'ajusti a les millors pràctiques. Amb kubeadm, el vostre clúster hauria de superar les proves de conformitat de Kubernetes.

Kubeadm també admet altres funcions del cicle de vida del clúster, com ara actualitzacions, rebaixes i gestió de testimonis d'arrencada. Kubeadm també és fàcil d'integrar amb altres eines d'orquestració com Ansible i Terraform.

Amb el repositori de paquets a punt, podeu continuar i instal·lar el paquet kubeadm.

# dnf install kubeadm -y 

Quan la instal·lació finalitzi correctament, habiliteu i inicieu el servei.

# systemctl enable kubelet
# systemctl start kubelet

El mestre de Kubernetes, que actua com a pla de control del clúster, executa alguns serveis crítics necessaris per al clúster. Com a tal, el procés d'inicialització farà una sèrie de comprovacions prèvies per assegurar-se que la màquina estigui preparada per executar Kubernetes. Aquestes comprovacions prèvies exposen advertències i surten en cas d'error. kubeadm init baixa i instal·la els components del pla de control del clúster.

Ara és el moment d'inicialitzar el mestre Kubernetes, però abans d'això, heu de desactivar l'intercanvi per executar l'ordre \kubeadm init\.

# swapoff -a

La inicialització del mestre Kubernetes és un procés completament automatitzat que està controlat per l'ordre \kubeadm init\, tal com es mostra.

# kubeadm init

A continuació, copieu l'ordre següent i emmagatzemeu-lo en algun lloc, ja que més tard vam haver d'executar aquesta comanda als nodes de treball.

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

Consell: De vegades, l'ordre anterior pot generar errors sobre els arguments passats, de manera que per evitar errors, heu d'eliminar el caràcter ‘\’ i l'ordre final tindrà aquest aspecte.

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

Un cop Kubernetes s'hagi inicialitzat correctament, heu d'habilitar el vostre usuari perquè comenci a utilitzar el clúster. En el nostre escenari, utilitzarem l'usuari root. També podeu iniciar el clúster utilitzant sudo user tal com es mostra.

Per utilitzar root, executeu:

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

Per utilitzar un usuari habilitat per a sudo, executeu:

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

Ara confirmeu que l'ordre kubectl està activada.

# kubectl get nodes

En aquest moment, veureu que l'estat del node mestre és NotReady. Això es deu al fet que encara hem de desplegar la xarxa de pods al clúster.

La pod Network és la xarxa de superposició per al clúster, que es desplega a la part superior de la xarxa de nodes actual. Està dissenyat per permetre la connectivitat a través del pod.

La implementació del clúster de xarxa és un procés molt flexible en funció de les vostres necessitats i hi ha moltes opcions disponibles. Com que volem que la nostra instal·lació sigui el més senzilla possible, utilitzarem el connector de Weavenet que no requereix cap configuració ni codi addicional i proporciona una adreça IP per pod, la qual cosa és ideal per a nosaltres. Si voleu veure més opcions, consulteu aquí.

Aquestes ordres seran importants per configurar la xarxa de pods.

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

Ara, si comproveu l'estat del vostre node mestre, hauria d'estar Listo.

# kubectl get nodes

A continuació, afegim els nodes de treball al clúster.

Afegir nodes de treball al clúster de Kubernetes

Les instruccions següents es realitzaran a cada node de treball en unir-se al clúster de Kubernetes.

Primer establiu el nom d'amfitrió al vostre worker-node-1 i worker-node-2, i després afegiu les entrades de l'amfitrió al fitxer /etc/hosts.

# 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

A continuació, feu ping al vostre node mestre des dels vostres nodes de treball per confirmar que el vostre fitxer d'amfitrió actualitzat funciona bé mitjançant l'ordre ping.

# 192.168.0.47

A continuació, desactiveu SElinux i actualitzeu les regles del tallafoc.

# 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

Afegiu primer el dipòsit de Docker mitjançant el gestor de configuració DNF.

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

A continuació, afegiu el paquet 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

Amb aquests dos paquets instal·lats, instal·leu la darrera versió de docker-ce.

# dnf install docker-ce

Activeu i inicieu el servei Docker.

# systemctl enable docker
# systemctl start docker

Haureu d'afegir els repositoris de Kubernetes manualment, ja que no vénen preinstal·lats a 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

Amb el repo de paquets a punt, podeu continuar i instal·lar kubeadm.

# dnf install kubeadm -y 

Inicieu i activeu el servei.

# systemctl enable kubelet
# systemctl start kubelet

Ara necessitem el testimoni que kubeadm init va generar per unir-se al clúster. Podeu copiar-lo i enganxar-lo al vostre node-1 i node-2 si l'heu copiat en algun lloc.

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

Tal com es suggereix a l'última línia, torneu al vostre node mestre i verifiqueu si el node treballador-1 i el node treballador-2 s'han unit al clúster mitjançant l'ordre següent.

# kubectl get nodes

Si tots els passos s'executen correctament, hauríeu de veure el node-1 i el node-2 en estat llest al node mestre. En aquest punt, ja heu implementat correctament un clúster Kubernetes a CentOS 8.

Lectura recomanada: Com implementar Nginx en un clúster de Kubernetes

El clúster que hem creat aquí té un únic node mestre i, com a tal, si falla el node mestre, és possible que el vostre clúster perdi dades i s'hagi de tornar a crear des de zero.

Per aquest motiu, recomano una configuració d'alta disponibilitat.