Puncte:1

Serverul API Kubernetes nu poate înregistra nodul principal

drapel gb

Încercam să creez un cluster Kubernetes folosind kubeadm. Am pornit un server Ubuntu 18.04, am instalat docker (m-am asigurat că rulează docker.service), am instalat kubeadm kubelet și kubectl.

Următorii sunt pașii pe care i-am făcut:

sudo apt-get update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository „deb [arch=amd64] https://download.docker.com/linux/ubuntu `lsb_release -cs` test”
actualizare sudo apt
sudo apt install docker-ce
sudo systemctl enable docker
sudo systemctl start docker

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get install kubeadm kubelet kubectl -y
sudo apt-mark hold kubeadm kubelet kubectl 
versiunea kubeadm
swapoff âa

De asemenea, pentru a configura driverul Docker cgroup, am editat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf. In cadrul fisierului am adaugat Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd" și a comentat Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml".

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf pentru trimitere:

# Notă: acest dropin funcționează numai cu kubeadm și kubelet v1.11+
[Serviciu]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
#Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
# Acesta este un fișier pe care „kubeadm init” și „kubeadm join” îl generează în timpul execuției, populând variabila KUBELET_KUBEADM_ARGS în mod dinamic
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# Acesta este un fișier pe care utilizatorul îl poate folosi pentru suprascrieri ale argumentelor kubelet ca ultimă soluție. De preferință, utilizatorul ar trebui să folosească
# obiectul .NodeRegistration.KubeletExtraArgs din fișierele de configurare. KUBELET_EXTRA_ARGS ar trebui să provină din acest fișier.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

Dupa asta am alergat: systemctl daemon-reload și systemctl reporniți kubelet. kubelet.service a funcționat bine.

Apoi, am fugit sudo kubeadm init --pod-network-cidr=10.244.0.0/16 și am primit următoarea eroare:

root@ip-172-31-1-238:/home/ubuntu# kubeadm init --pod-network-cidr=10.244.0.0/16
[init] Folosind versiunea Kubernetes: v1.23.1
[preflight] Executare verificări înainte de zbor
[flight] Extragerea imaginilor necesare pentru configurarea unui cluster Kubernetes
[flight] Acest lucru poate dura un minut sau două, în funcție de viteza conexiunii dvs. la internet
[flight] Puteți efectua această acțiune în prealabil folosind „kubeadm config images pull”
[cert] Folosind folderul certificateDir „/etc/kubernetes/pki”
[cert] Se generează certificatul și cheia „ca”.
[cert] Se generează certificatul și cheia „apiserver”.
[certs] apiserver server cert este semnat pentru nume DNS [ip-172-31-1-238 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] și IP-uri [10.96.0.1 172.2381].
[cert] Se generează certificatul și cheia „apiserver-kubelet-client”.
[cert] Se generează certificatul și cheia „front-proxy-ca”.
[cert] Se generează certificatul și cheia „front-proxy-client”.
[cert] Se generează certificatul și cheia „etcd/ca”.
[cert] Se generează certificatul și cheia „etcd/server”.
[certs] certificatul de servire etcd/server este semnat pentru numele DNS [ip-172-31-1-238 localhost] și IP-uri [172.31.1.238 127.0.0.1 ::1]
[cert] Se generează certificatul și cheia „etcd/peer”.
[cert] etcd/cert de servire peer este semnat pentru numele DNS [ip-172-31-1-238 localhost] și IP-uri [172.31.1.238 127.0.0.1 ::1]
[cert] Se generează certificatul și cheia „etcd/healthcheck-client”.
[cert] Se generează certificatul și cheia „apiserver-etcd-client”.
[cert] Se generează cheia „sa” și cheia publică
[kubeconfig] Folosind folderul kubeconfig „/etc/kubernetes”
[kubeconfig] Se scrie fișierul kubeconfig „admin.conf”.
[kubeconfig] Se scrie fișierul kubeconfig „kubelet.conf”.
[kubeconfig] Se scrie fișierul kubeconfig „controller-manager.conf”.
[kubeconfig] Se scrie fișierul kubeconfig „scheduler.conf”.
[kubelet-start] Se scrie un fișier de mediu kubelet cu steaguri în fișierul „/var/lib/kubelet/kubeadm-flags.env”
[kubelet-start] Se scrie configurația kubelet în fișierul „/var/lib/kubelet/config.yaml”
[kubelet-start] Pornirea kubeletului
[control-plane] Folosind folderul manifest „/etc/kubernetes/manifests”
[control-plane] Se creează manifestul Pod static pentru „kube-apiserver”
[control-plane] Se creează manifestul Pod static pentru „kube-controller-manager”
[control-plane] Se creează manifestul static Pod pentru „kube-scheduler”
[etcd] Se creează manifestul Pod static pentru etcd local în „/etc/kubernetes/manifests”
[wait-control-plane] Se așteaptă ca kubelet să pornească planul de control ca Pod-uri statice din directorul „/etc/kubernetes/manifests”. Acest lucru poate dura până la 4m0s
[kubelet-check] Timpul de expirare inițial de 40 de secunde a trecut.

    Din păcate, a apărut o eroare:  
            a expirat în așteptarea stării  

    Această eroare este probabil cauzată de:  
            - Kubeletul nu rulează  
            - Kubelet-ul este nesănătos din cauza unei configurări greșite a nodului într-un fel (cgroups obligatorii dezactivate)  

    Dacă sunteți pe un sistem alimentat de sistem, puteți încerca să depanați eroarea cu următoarele comenzi:  
            - „systemctl status kubelet”  
            - 'journalctl -xeu kubelet'  

    În plus, este posibil ca o componentă a planului de control să se fi prăbușit sau să fi ieșit atunci când a fost pornită de rularea containerului.  
    Pentru a depana, listați toate containerele utilizând CLI pentru rulajele de containere preferate.  

    Iată un exemplu de cum puteți enumera toate containerele Kubernetes care rulează în docker:  
            - 'docker ps -a | grep kube | grep -v pauză'  
             Odată ce ați găsit containerul defect, îi puteți inspecta jurnalele cu:  
            - „docker logs CONTAINERID”  

După alergare starea systemctl kubelet.service, se pare că kubelet merge bine.
Totuși, după alergare journalctl -xeu kubelet, am următoarele jurnale:

kubelet.go:2347] „Rețeaua de rulare a containerului nu este gata” networkReady="NetworkReady=false motiv:NetworkPluginNotReady mesaj:docker: pluginul de rețea nu este gata: configurația cni neinițializată”
kubelet.go:2422] „Eroare la obținerea nodului” err="nodul „ip-172-31-1-238” nu a fost găsit”
kubelet.go:2422] „Eroare la obținerea nodului” err="nodul „ip-172-31-1-238” nu a fost găsit”
controller.go:144] nu a reușit să se asigure că închirierea există, va reîncerca în 7s, eroare: Obțineți „https://172.31.1.238:6443/apis/coordination.k8s.io/v1/namespaces/kube-node-lease/leases /ip-172-31-1-238?timeout=10s": formați tcp 172.31.1.238:6443: conectare: conexiune refuzată
kubelet.go:2422] „Eroare la obținerea nodului” err="nodul „ip-172-31-1-238” nu a fost găsit”
kubelet.go:2422] „Eroare la obținerea nodului” err="nodul „ip-172-31-1-238” nu a fost găsit”
kubelet_node_status.go:70] „Se încearcă înregistrarea nodului” node="ip-172-31-1-238"
kubelet_node_status.go:92] „Nu se poate înregistra nodul cu serverul API” err="Postează „https://172.31.1.238:6443/api/v1/nodes”: formați tcp 172.31.1.238:6443: conectare: conexiune refuzată” node="ip-172-31-1-238"
kubelet.go:2422] „Eroare la obținerea nodului” err="nodul „ip-172-31-1-238” nu a fost găsit”

Versiuni:
Docher: Docker versiunea 20.10.12, build e91ed57
Kubeadm: {Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"clean", BuildDate:"2021T5-11:-3", Go go1.17.5", Compiler:"gc", Platform:"linux/amd64"}

Nu sunt sigur dacă aceasta este o problemă de conexiune între Kube Api Server și Kubelet.
Stie cineva cum sa repare asta?

Puncte:1
drapel br

Versiunea kubeadm folosită aici este 1.23.1. Kubernetes nu mai oferă suport direct pentru docker. citeste aici. După înțelegerea mea, le-ați instalat pe ambele, dar nu sunt conectate. De asemenea, nu văd că aveți containerd.io specificat în comanda de instalare docker. Consultați aici.

Opțiunea 1: Instalați conianerd. Vă rugăm să urmați acest pas. Dacă problema persistă, Configurați serviciul kubelet pentru a utiliza containerd adăugând următoarele opțiuni în serviciul kubelet.

--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock

Opțiunea 2: Instalați docker corect și configurați așa cum este menționat Aici.

arjunbnair avatar
drapel gb
Mulțumesc, asta a fost foarte util.
Rajesh Dutta avatar
drapel br
@arjunbnair dacă acest răspuns v-a ajutat, atunci cred că îl puteți marca ca răspuns acceptat, astfel încât alți utilizatori să poată fi siguri de acest răspuns și context. Mulțumiri.
Puncte:0
drapel cn

Problema este că nu specificați advertiseAddress. Am aceeași problemă și îmi ia câteva ore să o găsesc.

Puncte:0
drapel gb

Am rezolvat acest lucru parcurgând documentația oficială Kubernetes despre crearea unui cluster folosind kubeadm. Iată pașii pe care i-am urmat:

#!/bin/bash

sudo apt update -y && sudo apt upgrade -y
sudo apt-get install -y ca-certificates curl gnupg lsb-release

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stabil" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get install docker.io -y
systemctl enable docker.service
systemctl porniți docker.service

echo 1 > /proc/sys/net/ipv4/ip_forward
lsmod | grep br_netfilter
sudo modprobe br_netfilter

pisica <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

pisica <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

pisica <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "fișier-json",
  „log-opts”: {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

sudo apt-get update -y
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo „deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update -y
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo hostnamectl set-hostname master-node

kubeadm init --pod-network-cidr=10.244.0.0/16

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

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Acest lucru se poate rula într-un server Ubuntu 20.04 ca un script shell și va fi creat nodul Master.

Testat pe versiunea kubeadm: 1.23.1
Testat pe versiunea kubernetes: 1.23.1
Timp de rulare a containerului: Docker

Referința documentului:

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.