Puncte:0

Kubernetes: alăturarea kubeadm eșuează în rețeaua privată

drapel at

Încerc să configurez un cluster HA Kubernetes pe Hetzner Cloud acest ghid. Am creat 6 servere, 3 gazde pentru avioane de control și 3 lucrători. Când încerc să folosesc kubeadm pentru a se alătura celui de-al doilea server la cluster, primesc următoarele erori:

Pe k8s-server-1:

06 iulie 14:09:01 k8s-server-1 kubelet[8059]: E0706 14:09:01.430599 8059 controller.go:187] nu a reușit să actualizeze contractul de închiriere, eroare: eroare rpc: cod = Desc necunoscut = termen limită de context depășit
06 iulie 14:08:54 k8s-server-1 kubelet[8059]: E0706 14:08:54.370142 8059 controller.go:187] nu a reușit să actualizeze contractul de închiriere, eroare: eroare rpc: cod = Desc necunoscut = termen limită de context depășit
Iul 06 14:08:51 k8s-server-1 kubelet[8059]: E0706 14:08:51.762075 8059 kubelet_node_status.go:470] „Eroare la actualizarea stării nodului, va reîncerca” err="eroare la obținerea nod-server \"k8 -1\": Obțineți \"https://my.kubernetes.test:6443/api/v1/nodes/k8s-server-1?resourceVersion=0&timeout=10s\": termenul limită de context a depășit"
Iul 06 14:08:47 k8s-server-1 kubelet[8059]: E0706 14:08:47.325309 8059 event.go:273] Imposibil de scris evenimentul: '&v1.Event{TypeMeta:v1.TypeMeta:"{Kind:" , APIVersion:""}, ObjectMeta:v1.ObjectMeta{Nume:"kube-apiserver-k8s-server-1.168f32516b37209a", GenerateName:"", Namespace:"kube-system", SelfLink:"", UID:"" , ResourceVersion:"", Generation:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1. Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Adnotări:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Finalizatori :[]string(nil), ClusterName:"", ManagedFields:[]v1.ManagedFieldsEntry(nil)}, InvolvedObject:v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"kube- apiserver-k8s-server-1", UID:"10b8928a4f8e5e0b449a40ab35a3efdc", APIVersion:"v1", ResourceVersion:"", FieldPath:"spec.containers{kube-apiserver}"}, Reason:"Unhealthyness", Mesaj:"Nesănătos", probe failed: HTTP probe fai led cu statuscode: 500", Sursă:v1.EventSource{Component:"kubelet", Gazdă:"k8s-server-1"}, FirstTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd0ee49429a, ext:115787424848, loc:(*time.Locație)(0x74c3600)}}, LastTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd16f1a0a1d, ext:117801107410, loc:(*time.Location)(0x74c3600:)}, Count:)} 2, Tip: „Avertisment”, EventTime:v1.MicroTime{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, Series:(*v1.EventSeries) (nil), Action:"", Related:(*v1.ObjectReference)(nil), ReportingController:"", ReportingInstance:""}': „Correcție „https://my.kubernetes.test:6443/api/ v1/namespaces/kube-system/events/kube-apiserver-k8s-server-1.168f32516b37209a": citiți tcp 192.168.178.2:60934->192.168.178.8:64443 după reînchiderea conexiunii la rețea:"
06 iulie 14:08:47 k8s-server-1 kubelet[8059]: E0706 14:08:47.324053 8059 controller.go:187] nu a reușit să actualizeze contractul de închiriere, eroare: eroare rpc: cod = Desc necunoscut = termen limită de context depășit
Iul 06 14:08:46 k8s-server-1 kubelet[8059]: I0706 14:08:46.986663 8059 status_manager.go:566] „Nu s-a putut obține starea pentru pod” podUID=10b8928a4f8e59ae40b44598928a4f8e59a40db4459a4f8b8928a46.986663 apiserver-k8s-server-1" error="etcdserver: cererea a expirat"

Pe k8s-server-2:

Iul 06 14:09:04 k8s-server-2 kubelet[6685]: E0706 14:09:04.072247 6685 event.go:264] Serverul a respins evenimentul „&v1.Event{TypeMeta:v1.TypeMeta{Version API:” :""}, ObjectMeta:v1.ObjectMeta{Name:"weave-net-9fldg.168f3252093de42e", GenerateName:"", Namespace:"kube-system", SelfLink:"", UID:"", ResourceVersion:"" , Generation:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)(nil) , DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Finalizers:[]string( nil), ClusterName:"", ManagedFields:[]v1.ManagedFieldsEntry(nil)}, InvolvedObject:v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"weave-net-9fldg", UID:"88743b7a-aa81-4948-be9b-78c4bbf436fe", APIVersion:"v1", ResourceVersion:"714", FieldPath:"spec.initContainers{weave-init}"}, Reason:"Pulled", Message:"Succesfully imagine trasă \"docker.io/weaveworks/weave-kube :2.8.1\" în 6.525660057s", Source:v1.EventSource{Component:"kubelet", Host:"k8s-server-2"}, FirstTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd1997fa82e, ext:11173601176, loc:(*time.Location)(0x74c3600)}}, LastTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd1997fa82e, ext:11173601176, loc:(*time.Location)74}6) }, Count:1, Type:"Normal", EventTime:v1.MicroTime{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, Series:(* v1.EventSeries)(nil), Action:"", Related:(*v1.ObjectReference)(nil), ReportingController:"", ReportingInstance:""}': 'eroare rpc: cod = Desc necunoscut = termen limită de context depăşit' (nu voi reîncerca!)
06 iulie 14:08:57 k8s-server-2 kubelet[6685]: E0706 14:08:57.993540 6685 controller.go:144] nu a reușit să se asigure că există contractul de închiriere, va încerca din nou în 400 ms, eroare: Obțineți „https://my .kubernetes.test:6443/apis/coordination.k8s.io/v1/namespaces/kube-node-lease/leases/k8s-server-2?timeout=10s": termenul limită a contextului a fost depășit
Iul 06 14:08:57 k8s-server-2 kubelet[6685]: I0706 14:08:57.352989 6685 scope.go:111] "RemoveContainer" containerID="9e05ad27088c41bdd02f1960f062bd060f0520000000000000000000000
Iul 06 14:08:56 k8s-server-2 kubelet[6685]: E0706 14:08:56.992481 6685 event.go:273] Imposibil de scris evenimentul: '&v1.Event{TypeMeta:v1.TypeMeta:"{Kind:" , APIVersion:""}, ObjectMeta:v1.ObjectMeta{Name:"weave-net-9fldg.168f3252093de42e", GenerateName:"", Namespace:"kube-system", SelfLink:"", UID:"", ResourceVersion: „”, Generation:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)( nil), DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Finalizers:[] șir(nil), ClusterName:"", ManagedFields:[]v1.ManagedFieldsEntry(nil)}, InvolvedObject:v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"weave-net-9fldg ", UID:"88743b7a-aa81-4948-be9b-78c4bbf436fe", APIVersion:"v1", ResourceVersion:"714", FieldPath:"spec.initContainers{weave-init}"}, Reason:"Pulled", Mesaj: „Imaginea extrasă cu succes \”docker.io/weaveworks/weave-kub e:2.8.1\" în 6.525660057s", Source:v1.EventSource{Component:"kubelet", Host:"k8s-server-2"}, FirstTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd1997fa82e , ext:11173601176, loc:(*time.Location)(0x74c3600)}}, LastTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd1997fa82e, ext:11173601176, loc:)(*6004Location) }}, Count:1, Type:"Normal", EventTime:v1.MicroTime{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, Series:( *v1.EventSeries)(nil), Action:"", Related:(*v1.ObjectReference)(nil), ReportingController:"", ReportingInstance:""}': „Postează „https://my.kubernetes.test :6443/api/v1/namespaces/kube-system/events": citiți tcp 192.168.178.3:47722->192.168.178.8:6443: folosirea conexiunii de rețea închisă" (poate reîncerca după repaus)
Iul 06 14:08:56 k8s-server-2 kubelet[6685]: E0706 14:08:56.990109 6685 kubelet_node_status.go:470] „Eroare la actualizarea stării nodului, va reîncerca” err="eroare la obținerea nod-server \"k8 -2\": Obțineți \"https://my.kubernetes.test:6443/api/v1/nodes/k8s-server-2?timeout=10s\": net/http: cererea anulată (Client.Timeout depășit în timp ce în așteptarea antetelor)"
Iul 06 14:08:56 k8s-server-2 kubelet[6685]: I0706 14:08:56.989160 6685 scope.go:111] "RemoveContainer" containerID="9e05ad27088c41bdd02f1160f062bd0460f02bd060f02f080f0000000001
Jul 06 14:08:56 k8s-server-2 kubelet[6685]: E0706 14:08:56.988865 6685 kubelet.go:1683] „Crearea unui pod oglindă pentru” err="Postează \"https://my. kubernetes.test:6443/api/v1/namespaces/kube-system/pods\": citiți tcp 192.168.178.3:47722->192.168.178.8:6443: utilizarea conexiunii de rețea închisă" pod="kube-system/etcd- k8s-server-2"
Iul 06 14:08:54 k8s-server-2 kubelet[6685]: E0706 14:08:54.210098 6685 pod_workers.go:190] „Eroare de sincronizare a podului, sărirea peste” err="Nu a reușit să \"StartContainer\" pentru \" etcd\" cu CrashLoopBackOff: \"back-off 10s reporting failed container=etcd pod=etcd-k8s-server-2_kube-system(22b3a914daf1bef98cb01ddd7868523d)\"" pod="kube-system/etcd-28-pod-server-28 =22b3a914daf1bef98cb01ddd7868523d
Iul 06 14:08:54 k8s-server-2 kubelet[6685]: I0706 14:08:54.208472 6685 scope.go:111] "RemoveContainer" containerID="9e05ad27088c41bdd02f1160f0654160f0520080000000000000000000000
Jul 06 14:08:54 k8s-server-2 kubelet[6685]: E0706 14:08:54.208199 6685 kubelet.go:1683] „Eșuat la crearea unui pod oglindă pentru” err="eroare rpc: cod = Desc necunoscut = context termen limită depășit" pod="kube-system/etcd-k8s-server-2"
Iul 06 14:08:53 k8s-server-2 kubelet[6685]: E0706 14:08:53.347043 6685 event.go:264] Serverul a respins evenimentul „&v1.Event{TypeMeta:v1.TypeMeta{Version API:” :""}, ObjectMeta:v1.ObjectMeta{Nume:"kube-proxy-2z5js.168f3250c7fc2120", GenerateName:"", Namespace:"kube-system", SelfLink:"", UID:"", ResourceVersion:"" , Generation:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)(nil) , DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Finalizers:[]string( nil), ClusterName:"", ManagedFields:[]v1.ManagedFieldsEntry(nil)}, InvolvedObject:v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"kube-proxy-2z5js", UID:"0ac8fe5d-7332-4a4d-abee-48c6d4dee38f", APIVersion:"v1", ResourceVersion:"711", FieldPath:"spec.containers{kube-proxy}"}, Reason:"Started", Mesaj:"Started container kube-proxy", Sursa:v1.EventSource{Compone nt:"kubelet", Gazdă:"k8s-server-2"}, FirstTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd04243d720, ext:5783805064, loc:(*time.Location)(0x74c3600)}} , LastTimestamp:v1.Time{Time:time.Time{wall:0xc0312fd04243d720, ext:5783805064, loc:(*time.Location)(0x74c3600)}}, Count:1, Type:"Normal", EventTime:v1.MicroTime {Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, Series:(*v1.EventSeries)(nil), Action:"", Înrudit:(* v1.ObjectReference)(nil), ReportingController:"", ReportingInstance:""}': „eroare rpc: cod = Desc necunoscut = termen limită de context depășit” (nu se va reîncerca!)
Iul 06 14:08:53 k8s-server-2 kubelet[6685]: I0706 14:08:53.269542 6685 scope.go:111] "RemoveContainer" containerID="e2664d16d53ff5ae6de917ae517716ae5177176ae52708778001
Iul 06 14:08:47 k8s-server-2 kubelet[6685]: I0706 14:08:47.194425 6685 scope.go:111] "RemoveContainer" containerID="7aaa63419740b5e30ccbd486bd46bd48bd48bd48bfd4bd48bd4b4bd4b4bd4b4bd4b4bd4b4bd4bd4bd4bd4bd4bd4bd4d4bd
Iul 06 14:08:46 k8s-server-2 kubelet[6685]: I0706 14:08:46.987598 6685 status_manager.go:566] „Nu s-a putut obține starea pentru pod” podUID=778e041efc75c75c19bbd5/podc75c75c19bbd5/bcbd5/46.987598 controller-manager-k8s-server-2" error="etcdserver: cererea a expirat"
06 iulie 14:08:46 k8s-server-2 kubelet[6685]: E0706 14:08:46.986807 6685 controller.go:144] nu a reușit să se asigure că există contractul de închiriere, va reîncerca în 200 ms, eroare: etcdserver: cererea expirată
Iul 06 14:08:46 k8s-server-2 kubelet[6685]: E0706 14:08:46.986800 6685 kubelet_node_status.go:470] „Eroare la actualizarea stării nodului, va reîncerca” err="eroare la obținerea nod-server \"k8 -2\": etcdserver: cererea a expirat"

Lista de servere: | Nume | IP public | IP privat | | --- | --- | --- | | k8s-server-1 | 192.168.178.2 | 10.23.1.2 | | k8s-server-2 | 192.168.178.3 | 10.23.1.3 | | k8s-server-3 | 192.168.178.4 | 10.23.1.4 | | k8s-lucrător-1 | 192.168.178.5 | 10.23.1.5 | | k8s-lucrător-2 | 192.168.178.6 | 10.23.1.6 | | k8s-lucrător-3 | 192.168.178.7 | 10.23.1.7 |

În plus, k8s-server-* au următoarele reguli de firewall aplicate (se aplică numai traficului direcționat prin IP public, nu în interiorul rețelei private): | Direcție | Port | Sursa/Destinație | | --- | --- | --- | | Intrare | 80 | orice | | Intrare | 443 | orice | | Intrare | 22 | IP static al companiei | | Intrare | 6443 | IP static al companiei | | Ieșire | orice | orice |

Există un echilibrator de încărcare în interiorul aceleiași rețele care direcționează traficul către k8s-server-1. IP-ul public este 192.168.178.8, iar IP-ul privat este 10.23.1.8.

Ce am rulat pe ambele noduri:

apt-get update
apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stabil" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io
systemctl enable docker.service
systemctl enable containerd.service
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

systemctl enable docker
systemctl daemon-reload
systemctl reporniți docker

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

sysctl --system

apt-get update
apt-get install -y apt-transport-https ca-certificates curl
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
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

... pe serverul 1:

imaginile de configurare kubeadm pull
kubeadm init --apiserver-advertise-address=10.23.1.2 --control-plane-endpoint "my.kubernetes.test:6443" --upload-certs

mkdir ~/.kube
cp /etc/kubernetes/admin.conf ~/.kube/config

kubectl aplică -f "https://cloud.weave.works/k8s/net?k8s-version=$(versiunea kubectl | base64 | tr -d '\n')"
uitați-vă la kubectl obține pod -n kube-system
uitați-vă la kubectl obține noduri

... pe serverul 2:

imaginile de configurare kubeadm pull
kubeadm alăturați-vă la my.kubernetes.test:6443 --token XXXXX.XXXXX --discovery-token-ca-cert-hash sha256:XXXXXXXXXX --control-plane --certificate-key XXXXXXXXXX
Dawid Kruk avatar
drapel cn
`VM`-urile dvs. au mai multe interfețe (publice, private) sau folosesc un NAT 1:1? Există reguli de firewall pentru rețeaua dvs. privată? De asemenea, pentru ca weave să funcționeze, ar trebui să permiteți [porturile TCP 6783 și UDP 6783/6784](https://www.weave.works/docs/net/latest/faq/#ports).
mway-niels avatar
drapel at
Da, fiecare VM are 3 interfețe implicit: ens10 (private), eth0 (public) și lo (loopback). Mașinile virtuale din aceeași rețea pot comunica liber pe toate porturile (atunci când folosesc IP-ul privat), indiferent de setările firewallului extern. Rulez Ubuntu, ufw este inactiv. Mulțumesc pentru indiciu cu privire la Weave. Încearcă să comunice prin rețeaua publică? Dacă nu, porturile ar trebui deja permise.
Puncte:1
drapel at

Am reușit să rezolv problema adăugând --apiserver-advertise-address parametru la kubeadm join comanda de asemenea.

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.