Î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?