La documentazione per questo prodotto è stata redatta cercando di utilizzare un linguaggio senza pregiudizi. Ai fini di questa documentazione, per linguaggio senza di pregiudizi si intende un linguaggio che non implica discriminazioni basate su età, disabilità, genere, identità razziale, identità etnica, orientamento sessuale, status socioeconomico e intersezionalità. Le eventuali eccezioni possono dipendere dal linguaggio codificato nelle interfacce utente del software del prodotto, dal linguaggio utilizzato nella documentazione RFP o dal linguaggio utilizzato in prodotti di terze parti a cui si fa riferimento. Scopri di più sul modo in cui Cisco utilizza il linguaggio inclusivo.
Cisco ha tradotto questo documento utilizzando una combinazione di tecnologie automatiche e umane per offrire ai nostri utenti in tutto il mondo contenuti di supporto nella propria lingua. Si noti che anche la migliore traduzione automatica non sarà mai accurata come quella fornita da un traduttore professionista. Cisco Systems, Inc. non si assume alcuna responsabilità per l’accuratezza di queste traduzioni e consiglia di consultare sempre il documento originale in inglese (disponibile al link fornito).
Questo documento descrive l'implementazione del cluster Kubernetes con 3 nodi master e 4 nodi di lavoro con un host bastion che funge da bilanciatore del carico su Google Cloud Platform (GCP).
Cisco raccomanda la conoscenza dei seguenti argomenti:
Le informazioni fornite in questo documento si basano su:
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
Kube-apiserver:
i. Fornisce un'API che funge da front-end di un control plane Kubernetes.
ii. Gestisce le richieste esterne e interne che determinano se una richiesta è valida e quindi la elabora.
iii. È possibile accedere all'API tramite kubectl
interfaccia della riga di comando o altri kubeadm
e tramite chiamate REST.
Utilità di pianificazione Kube:
i. Questo componente programma i pod su nodi specifici in base a workflow automatizzati e condizioni definite dall'utente.
Kube-controller-manager:
i. Il responsabile del controller Kubernetes è un loop di controllo che controlla e regola lo stato di un cluster Kubernetes.
ii. Riceve informazioni sullo stato corrente del cluster e degli oggetti al suo interno e invia istruzioni per spostare il cluster verso lo stato desiderato dal gestore del cluster.
etcd:
i. Database key-value contenente dati relativi allo stato e alla configurazione del cluster.
ii. L'Etcd è a tolleranza d'errore e distribuito.
Kubelet
i. Ogni nodo contiene kubelet
, che è una piccola applicazione in grado di comunicare con il control plane Kubernetes.
ii. Il kubelet
garantisce che i contenitori specificati nella configurazione pod vengano eseguiti su un nodo specifico e ne gestiscono il ciclo di vita.
iii. Esegue le azioni comandate dal control plane.
Kube-proxy:
i. Tutti i nodi di calcolo contengono kube-proxy
, un proxy di rete che facilita i servizi di rete Kubernetes.
ii. Gestisce tutte le comunicazioni di rete all'esterno e all'interno del cluster e inoltra il traffico o le risposte sul livello di filtro dei pacchetti del sistema operativo.
Baccelli:
i. Un baccello serve come singola istanza di applicazione ed è considerato l'unità più piccola nel modello a oggetti di Kubernetes.
Ospitante del bastione:
i. Il computer in genere ospita una singola applicazione o processo, ad esempio un server proxy o un servizio di bilanciamento del carico, e tutti gli altri servizi vengono rimossi o limitati per ridurre la minaccia per il computer.
Cluster:
Nota: configurare VPC su GCP prima di eseguire il provisioning delle VM. Fare riferimento a VPC su GCP.
Per quanto riguarda la fornitura di GCP, un Centos7 del mercato GCP.
Clic Launch
.
Scegliere la regione in base alla raggiungibilità più vicina. In questo laboratorio, la regione è configurata come Mumbai.
La configurazione della macchina è di tipo generico E2 e2-standard-16 (16 vCPU, 64 GB memory)
.
Seleziona Allow default access
e per firewall, Allow HTTP traffic
e Allow HTTPS traffic
.
Clic Create
.
Analogamente, create 8 nodi come mostrato di seguito.
IP privati:
Su GCP gli IP pubblico e privato vengono assegnati automaticamente.
master-1 = 10.160.x.9
master-2 = 10.160.x.10
master-3 = 10.160.x.11
worker-1 = 10.160.x.12
worker-2 = 10.160.x.13
worker-3 = 10.160.x.14
worker-4 = 10.160.x.16
bastion = 10.160.x.19
Su tutti i nodi (master, lavoratore, bastione):
1. Aprire le porte del firewall richieste sul server Linux e configurare le configurazioni di sicurezza.
Sui nodi master nelle distribuzioni con più master:
Kubernetes etcd server client API: 2379/tcp, 2380/tcp
Kubernetes API server: 6443/tcp
Nota: verificare anche che le porte sul firewall GCP siano consentite.
2. Configurare le impostazioni di rete necessarie (DNS locale, nomi host, NTP).
Bastion Server:
1. Impostare un proxy HA.
2. Aggiungi configurazione server front-end e back-end su haproxy.conf
file.
3. Riavviare il haproxy
servizio.
Passaggi comuni per i nodi master e di lavoro:
1. Installare e configurare il docker.
2. Installare e configurare Kubernetes.
Solo nei nodi principali:
1. Inizializzare il nuovo cluster Kubernetes (kubeadm init
).
2. Installazione Calico
plug-in di rete (utilizzato in modo specifico per il servizio DNS di base nei nodi master).
3. Utilizzare questo comando per unire i nodi principali con un nodo principale.
kubeadm join
:6443 --token
\ --discovery-token-ca-cert-hash
\ --control-plane --certificate-key
4. Convalidare le informazioni sul cluster con kubectl get nodes
Solo nei nodi di lavoro:
1. Utilizzare questo comando per unire il nodo di lavoro al nodo principale.
kubeadm join
:6443 --token
\ --discovery-token-ca-cert-hash
2. Dopo aver completato l'aggiunta, convalidare le informazioni sul cluster sui nodi master con questo comando kubectl get nodes
.
1. Modificare la password di root se sconosciuta con questo comando:
passwd
2. Se necessario, modificare i nomi host con questo comando.
hostnamectl set-hostname
3. Configurare il DNS locale.
cat > /etc/hosts <
4. Abilitare la sincronizzazione per i servizi NTP con questo comando.
systemctl enable --now chronyd
2. Verificare lo stato con questo comando.
systemctl status chronyd
3. Controllare le origini NTP con questo comando.
chronyc sources -v
Bastion Server
Passaggio 1. Controllare gli aggiornamenti.
sudo yum check-update
Passaggio 2. Installare gli aggiornamenti se non sono aggiornati.
yum update -y
Passaggio 3. Installare le utilità yum.
yum -y install yum-utils
Passaggio 4. Installare il pacchetto haproxy.
yum install haproxy -y
Passaggio 5. Aggiungi questa configurazione ai valori predefiniti in /etc/haproxy/haproxy.cfg
:
frontend kubernetes
bind 10.160.x.19:6443
option tcplog
mode tcp
default_backend kubernetes-master-nodes
frontend http_front
mode http
bind 10.160.x.19:80
default_backend http_back
frontend https_front
mode http
bind 10.160.x.19:443
default_backend https_back
backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend http_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend https_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
listen stats
bind 10.160.x.19:8080
mode http
stats enable
stats uri /
Passaggio 6. Verificare il file di configurazione in modo che assomigli al comando vi /etc/haproxy/haproxy.cfg
:
---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend kubernetes
bind 10.160.x.19:6443
option tcplog
mode tcp
default_backend kubernetes-master-nodes
frontend http_front
mode http
bind 10.160.x.19:80
default_backend http_back
frontend https_front
mode http
bind 10.160.x.19:443
default_backend https_back
backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend http_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
backend https_back
mode http
server master-1 10.160.x.9:6443 check fall 3 rise 2
server master-2 10.160.x.10:6443 check fall 3 rise 2
server master-3 10.160.x.11:6443 check fall 3 rise 2
listen stats
bind 10.160.x.19:8080
mode http
stats enable
stats uri /
Passaggio 7. Verificare lo stato di haproxy:
[root@k8-loadbalancer vapadala]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-10-26 08:33:17 UTC; 6s ago
Main PID: 30985 (haproxy-systemd)
CGroup: /system.slice/haproxy.service
├─30985 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
├─30986 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
└─30987 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Oct 26 08:33:17 k8-loadbalancer systemd[1]: Started HAProxy Load Balancer.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /r...pid -Ds
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for frontend 'kube...P mode.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for backend 'kuber...P mode.
Hint: Some lines were ellipsized, use -l to show in full.
[root@k8-loadbalancer vapadala]#
Errori possibili
1. Il servizio HAProxy è in stato di errore dopo che sono state apportate modifiche alla configurazione in haproxy.cfg
. Ad esempio;
[root@k8-loadbalancer vapadala]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2022-10-26 08:29:23 UTC; 3min 44s ago
Process: 30951 ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid $OPTIONS (code=exited, status=1/FAILURE)
Main PID: 30951 (code=exited, status=1/FAILURE)
Oct 26 08:29:23 k8-loadbalancer systemd[1]: Started HAProxy Load Balancer.
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /r...pid -Ds
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: [WARNING] 298/082923 (30952) : config : 'option forwardfor' ignored for frontend 'kube...P mode.
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: [WARNING] 298/082923 (30952) : config : 'option forwardfor' ignored for backend 'kuber...P mode.
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: [ALERT] 298/082923 (30952) : Starting frontend kubernetes: cannot bind socket [10.160.x.19:6443].
Oct 26 08:29:23 k8-loadbalancer haproxy-systemd-wrapper[30951]: haproxy-systemd-wrapper: exit, haproxy RC=1.
Oct 26 08:29:23 k8-loadbalancer systemd[1]: haproxy.service: main process exited, code=exited, status=1/FAILURE.
Oct 26 08:29:23 k8-loadbalancer systemd[1]: Unit haproxy.service entered failed state.
Oct 26 08:29:23 k8-loadbalancer systemd[1]: haproxy.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
Risoluzione
1. Set the boolean value for haproxy_connect_any to true.
2. Restart the haproxy service.
3. Verify the status.
Esecuzione:
[root@k8-loadbalancer vapadala]# setsebool -P haproxy_connect_any=1
[root@k8-loadbalancer vapadala]# systemctl restart haproxy
[root@k8-loadbalancer vapadala]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2022-10-26 08:33:17 UTC; 6s ago
Main PID: 30985 (haproxy-systemd)
CGroup: /system.slice/haproxy.service
├─30985 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
├─30986 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
└─30987 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
Oct 26 08:33:17 k8-loadbalancer systemd[1]: Started HAProxy Load Balancer.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /r...pid -Ds.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for frontend 'kube...P mode.
Oct 26 08:33:17 k8-loadbalancer haproxy-systemd-wrapper[30985]: [WARNING] 298/083317 (30986) : config : 'option forwardfor' ignored for backend 'kuber...P mode.
Hint: Some lines were ellipsized, use -l to show in full.
[root@k8-loadbalancer vapadala]#
Installa Docker nei nodi master e di lavoro
Passaggio 1. Controllare gli aggiornamenti.
sudo yum check-update
Passaggio 2. Installare gli aggiornamenti se non sono aggiornati.
yum update -y
Passaggio 3. Installare le utilità yum.
yum -y install yum-utils
Passaggio 4. Installare Docker.
curl -fsSL https://get.docker.com/ | sh
Passaggio 5. Attiva ancoraggio.
systemctl enable --now docker
Passaggio 6. Avviare il servizio docker.
sudo systemctl start docker
Passaggio 7. Controllare lo stato dell'alloggiamento.
sudo systemctl status docker
Uscita:
[root@kube-master1 vapadala]# sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-10-25 10:44:28 UTC; 40s ago
Docs: https://docs.docker.com
Main PID: 4275 (dockerd)
Tasks: 21
Memory: 35.2M
CGroup: /system.slice/docker.service
└─4275 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Oct 25 10:44:26 kube-master1 dockerd[4275]: time="2022-10-25T10:44:26.128233809Z" level=info msg="scheme \"unix\" not registered, fallback to defaul...dule=grpc.
Oct 25 10:44:26 kube-master1 dockerd[4275]: time="2022-10-25T10:44:26.128251910Z" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:/...dule=grpc.
Oct 25 10:44:26 kube-master1 dockerd[4275]: time="2022-10-25T10:44:26.128260953Z" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc.
Oct 25 10:44:27 kube-master1 dockerd[4275]: time="2022-10-25T10:44:27.920336293Z" level=info msg="Loading containers: start."
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.104357517Z" level=info msg="Default bridge (docker0) is assigned with an IP ad... address".
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.163830549Z" level=info msg="Loading containers: done."
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.182833703Z" level=info msg="Docker daemon" commit=03df974 graphdriver(s)=overl...=20.10.20.
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.182939545Z" level=info msg="Daemon has completed initialization".
Oct 25 10:44:28 kube-master1 systemd[1]: Started Docker Application Container Engine.
Oct 25 10:44:28 kube-master1 dockerd[4275]: time="2022-10-25T10:44:28.208492147Z" level=info msg="API listen on /var/run/docker.sock".
Hint: Some lines were ellipsized, use -l to show in full.
[root@kube-master1 vapadala]#
Installazione di Kubernetes sui nodi master e di lavoro
Passaggio 1. Aggiungere il repository Kubernetes.
cat <
"gpgcheck = 0" will not verify the authenticity of the package if unsigned. Production environment it is recommended to set "gpgcheck = 1"
Passaggio 2. Disattiva SELinux
.
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Passaggio 3. Install Kubernetes
.
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
Passaggio 4. Abilita Kubelet
.
sudo systemctl enable --now kubelet
Passaggio 5. Configurazione Pod Network
.
kubeadm init --control-plane-endpoint "10.160.x.19:6443" --upload-certs
Passaggio 6. Generazione token:
Output per il master (control plane) e per i nodi di lavoro.
Nodo principale
Token: Il control-plane Kubernetes è stato inizializzato correttamente.
Per utilizzare il cluster, eseguire questo comando come utente normale:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
In alternativa, l'utente root può eseguire.
export KUBECONFIG=/etc/kubernetes/admin.conf
È ora possibile distribuire una rete di pod al cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
È ora possibile unire come root qualsiasi numero di nodi del control plane o di nodi master che eseguono questo comando su ciascuno di essi.
Fare riferimento al flusso di lavoro di kubeadm join
kubeadm join 10.160.0.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0 \
--control-plane --certificate-key 66773b960199ef4530461ef4014e1432066902d4a3dee01669d8622579731701
Nota: la chiave del certificato consente di accedere ai dati sensibili al cluster e di mantenerla segreta.
Per sicurezza, i certificati caricati vengono eliminati in due ore; se necessario, è possibile utilizzarli.
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.
È quindi possibile unire qualsiasi numero di nodi di lavoro ed eseguirli su ciascuno come nodi radice.
kubeadm join 10.160.0.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
Passaggio 7. Verificare il servizio DNS di base.
[root@kube-master1 vapadala]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-59697b644f-v2f22 1/1 Running 0 32m
kube-system calico-node-gdwr6 1/1 Running 0 5m54s
kube-system calico-node-zszbc 1/1 Running 11 (5m22s ago) 32m
kube-system calico-typha-6944f58589-q9jxf 1/1 Running 0 32m
kube-system coredns-565d847f94-cwgj8 1/1 Running 0 58m
kube-system coredns-565d847f94-tttpq 1/1 Running 0 58m
kube-system etcd-kube-master1 1/1 Running 0 59m
kube-system kube-apiserver-kube-master1 1/1 Running 0 59m
kube-system kube-controller-manager-kube-master1 1/1 Running 0 59m
kube-system kube-proxy-flgvq 1/1 Running 0 5m54s
kube-system kube-proxy-hf5qv 1/1 Running 0 58m
kube-system kube-scheduler-kube-master1 1/1 Running 0 59m
[root@kube-master1 vapadala]#
Passaggio 8. Verificare lo stato del nodo master.
[root@kube-master1 vapadala]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master1 Ready control-plane 11m v1.25.3
Per unire in join più nodi master, questo comando di join viene eseguito sui nodi master.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0 \
--control-plane --certificate-key 66773b960199ef4530461ef4014e1432066902d4a3dee01669d8622579731701
Possibili errori rilevati al momento della generazione del token
Errore CRI
[root@kube-master1 vapadala]# kubeadm init --control-plane-endpoint "10.160.x.19:6443" --upload-certs
[init] Using Kubernetes version: v1.25.3
[preflight] Running pre-flight checks
[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: time="2022-10-25T08:56:42Z" level=fatal msg="unable to determine runtime API version: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/containerd/containerd.sock: connect: no such file or directory\"", error: exit status 1.
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
Risoluzione errore CRI
Passaggio 1. Rimuovere il file config.toml e riavviare il contenitore.
rm -rf /etc/containerd/config.toml
systemctl restart containerd
kubeadm init
Passaggio 2. Installa contenitore:
Installare il pacchetto containerd.io dai repository Docker ufficiali con questi comandi.
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo.
yum install -y containerd.io
Passaggio 3. Configura contenitore:
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
Passaggio 4. Riavviare il contenitore:
systemctl restart containerd
Errore FileContent—proc-sys-net-ipv4-ip_forward
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
FileContent di errore—proc-sys-net-ipv4-ip_forward Resolution
Impostare il valore ip_forward su 1.
echo 1 > /proc/sys/net/ipv4/ip_forward
Il servizio DNS di base non viene eseguito
[root@kube-master1 vapadala]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master1 NotReady control-plane 11m v1.25.3
[root@kube-master1 vapadala]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-565d847f94-cwgj8 0/1 Pending 0 12m
kube-system coredns-565d847f94-tttpq 0/1 Pending 0 12m
kube-system etcd-kube-master1 1/1 Running 0 12m
kube-system kube-apiserver-kube-master1 1/1 Running 0 12m
kube-system kube-controller-manager-kube-master1 1/1 Running 0 12m
kube-system kube-proxy-hf5qv 1/1 Running 0 12m
kube-system kube-scheduler-kube-master1 1/1 Running 0 12m
[root@kube-master1 vapadala]#
Risoluzione
Il DNS di base è in sospeso, il che indica un problema di rete. Per questo motivo, è necessario installare Calico.
Riferimento: Calico
Eseguire i due comandi seguenti:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.24.3/manifests/calico-typha.yaml -o calico.yaml
kubectl apply -f calico.yaml
Nodo Worker
Nel nodo di lavoro quando il token viene ottenuto dal master:
Passaggio 1. Abilita il servizio kubelet.
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl restart kubelet
systemctl enable kubelet.service
Passaggio 2. Unire tutti i nodi di lavoro con il nodo master con questo comando di join.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
Passaggio 3. In caso di errori relativi a file o porte, reimpostare kubeadm con questo comando.
kubeadm reset
Dopo la reimpostazione, immettere il token dal nodo master.
kubeadm join 10.160.x.19:6443 --token 5fv6ce.h07kyelronuy0mw2 \
--discovery-token-ca-cert-hash sha256:b5509b6fe784561f3435bf6b909dc8877e567c70921b21e35c464eb61d9527d0
Output finale
Il cluster è ora formato. Verificarlo con il comando kubectl get nodes.
Nota: al momento della formazione del cluster, viene configurato solo il controllo dai nodi master. L'host bastione non è configurato come server centralizzato per monitorare tutti i Kube nel cluster.
Revisione | Data di pubblicazione | Commenti |
---|---|---|
1.0 |
14-Dec-2022 |
Versione iniziale |