Danke für eure Hilfe etc. Ich habe das Thema erstmal auf Eis gelegt. Zumal die auch die etcd Doku sagt, dass Shared Virtual Disks nicht empfohlen sind. Hobbycluster lass ich mal weiter laufen, Production bleibt erstmal wo er ist.
Beiträge von Tom81
-
-
UPDATE 2: Doch nur so zu 50% gelöst.
Im Groben sieht es besser aus, aber völlig verschwunden sind die Probleme nicht.
-
Wenn die Tests jetzt einmal erfolgreich durch sind, kann ich die bonnie++-Cronjobs ja wieder reaktivieren …
Gerne, aber im Wiener RZ
-
SOLVED zu 50%: Umstellung auf SCSI verbessert, aber reduziert die nur die Häufigkeit des Auftretens.
Grund für die Disk Spikes etc. ist der KVM VIRTIO Festplatten Treiber. Aber zum Glück kann man umstellen auf SCSI, was auch empfohlen ist, aber nicht der Default bei Serverneuinstallation. Sogar wenn man auf SCSI gestellt hat und danach den Server neu installiert, wird wieder automatisch VIRTIO gewählt.
Man sieht es gut, gegen 18.40 Uhr habe ich alle etcd Server auf SCSI umgestellt.
Drauf gekommen bin ich, weil mein Homelab mit Proxmox und KVM auf langsamen HDD (mit SCSI) ohne Probleme läuft.
Die etcd Logs sind jetzt auch komplett frei von apply request took too long, nichtmal der 100ms Threshold wird gerissen.
-
FYI: So setze ich die Server nach Neuinstallation auf:
Container Runtime
Code
Alles anzeigenapt update && apt upgrade apt install \ ca-certificates \ curl \ gnupg \ lsb-release mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null apt update apt install containerd.io apt-mark hold containerd.io
Code
Alles anzeigentee /etc/containerd/config.toml << END version = 2 [plugins] [plugins."io.containerd.grpc.v1.cri"] [plugins."io.containerd.grpc.v1.cri".containerd] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true END systemctl restart containerd
Notwendiges für K8S
Codeecho "br_netfilter" >> /etc/modules-load.d/modules.conf echo "overlay" >> /etc/modules-load.d/modules.conf cat << 'EOF' | tee /etc/sysctl.d/99-kubernetes-cri.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF
K8S:
Codeapt install -y apt-transport-https ca-certificates curl curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list apt update apt install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl
kubeadm init../ join...
-
Moin, mal so interessehalber: sind das einzelne Pods oder ganze Nodes, die bei dir als nicht erreichbar gemeldet werden?
Pods
-
War gestern Abend noch fleissig, weil es mir keine Ruhe gelassen hat
Das Ergebnis:
- nur 1 single Master Node (kein weiterer Node)
- RS2000!
- Debain 12 NC Image
- kein VLAN Interface attached
- k8s mit stacked etcd installiert mit kubeadm init --upload-certs --pod-network-cidr 192.168.0.0/16
- Danach noch calico drauf:
Codekubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml -O kubectl create -f custom-resources.yaml
Logs des etcd pods:
ca 1-2h nach installieren: 9.5 Sekunden - so hoch habe ich es noch nie gesehen.
Code{"level":"warn","ts":"2023-06-22T23:54:00.061Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"9.516213776s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/clusterrolebindings/\" range_end:\"/registry/clusterrolebindings0\" count_only:true ","response":"range_response_count:0 size:8"} {"level":"warn","ts":"2023-06-22T23:54:00.061Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"6.226219627s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/operator.tigera.io/apiservers/\" range_end:\"/registry/operator.tigera.io/apiservers0\" count_only:true ","response":"range_response_count:0 size:8"} {"level":"warn","ts":"2023-06-22T23:54:00.061Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"7.71104878s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/jobs/\" range_end:\"/registry/jobs0\" count_only:true ","response":"range_response_count:0 size:6"} {"level":"warn","ts":"2023-06-22T23:54:00.061Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"7.816738481s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/services/endpoints/calico-system/calico-typha\" ","response":"range_response_count:1 size:670"} {"level":"warn","ts":"2023-06-22T23:54:00.061Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"3.632870759s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/crd.projectcalico.org/hostendpoints/\" range_end:\"/registry/crd.projectcalico.org/hostendpoints0\" count_only:true ","response":"range_response_count:0 size:6"}
und geht dann so im gewohnten 1-2 mal pro Stunde Takt so weiter
Code
Alles anzeigen{"level":"warn","ts":"2023-06-23T04:20:07.260Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"1.506491777s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/pods/kube-system/kube-apiserver-forum-single-ma\" ","response":"range_response_count:1 size:7028"} {"level":"warn","ts":"2023-06-23T04:20:07.260Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"2.218641341s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/statefulsets/\" range_end:\"/registry/statefulsets0\" count_only:true ","response":"range_response_count:0 size:6"} {"level":"warn","ts":"2023-06-23T04:20:07.260Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"3.842672756s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/crd.projectcalico.org/networksets/\" range_end:\"/registry/crd.projectcalico.org/networksets0\" count_only:true ","response":"range_response_count:0 size:6"} {"level":"warn","ts":"2023-06-23T04:20:07.260Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"4.1293098s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/volumeattachments/\" range_end:\"/registry/volumeattachments0\" count_only:true ","response":"range_response_count:0 size:6"} {"level":"warn","ts":"2023-06-23T04:20:07.260Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"4.891765963s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/ingressclasses/\" range_end:\"/registry/ingressclasses0\" count_only:true ","response":"range_response_count:0 size:6"} {"level":"warn","ts":"2023-06-23T04:20:07.260Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"5.582267793s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/services/endpoints/calico-system/calico-typha\" ","response":"range_response_count:1 size:670"} {"level":"warn","ts":"2023-06-23T04:20:07.260Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"5.591537251s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/resourcequotas/\" range_end:\"/registry/resourcequotas0\" count_only:true ","response":"range_response_count:0 size:6"} {"level":"warn","ts":"2023-06-23T04:20:07.261Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"5.821630015s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/roles/\" range_end:\"/registry/roles0\" count_only:true ","response":"range_response_count:0 size:8"} {"level":"warn","ts":"2023-06-23T04:20:07.261Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"6.145810215s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/crd.projectcalico.org/blockaffinities/\" range_end:\"/registry/crd.projectcalico.org/blockaffinities0\" count_only:true ","response":"range_response_count:0 size:8"} {"level":"warn","ts":"2023-06-23T04:20:07.449Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"182.245726ms","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/leases/kube-system/apiserver-nxv7vlqudyv75ikjsnsep4efke\" ","response":"range_response_count:1 size:697"} {"level":"warn","ts":"2023-06-23T04:39:54.731Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"2.000178908s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/health\" ","response":"","error":"context deadline exceeded"} {"level":"warn","ts":"2023-06-23T04:39:56.561Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"3.94637562s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/leases/tigera-operator/operator-lock\" ","response":"range_response_count:1 size:488"} {"level":"warn","ts":"2023-06-23T04:39:56.561Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"1.829626043s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/health\" ","response":"range_response_count:0 size:6"} {"level":"warn","ts":"2023-06-23T04:39:56.561Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"2.498253948s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/podtemplates/\" range_end:\"/registry/podtemplates0\" count_only:true ","response":"range_response_count:0 size:6"} {"level":"warn","ts":"2023-06-23T04:39:56.562Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"3.166075925s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/leases/kube-system/kube-controller-manager\" ","response":"range_response_count:1 size:516"} {"level":"warn","ts":"2023-06-23T05:33:27.731Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"2.000493432s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/health\" ","response":"","error":"context deadline exceeded"} {"level":"warn","ts":"2023-06-23T05:33:28.938Z","caller":"etcdserver/util.go:170","msg":"apply request took too long","took":"3.498632865s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/minions/\" range_end:\"/registry/minions0\" count_only:true ","response":"range_response_count:0 size:8"}
Das system ist absolut "clean and fresh"
Die Pods:
Code
Alles anzeigenkubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE calico-apiserver calico-apiserver-7d5d979f94-dtkm8 1/1 Running 0 9h calico-apiserver calico-apiserver-7d5d979f94-nz9qs 1/1 Running 0 9h calico-system calico-kube-controllers-789dc4c76b-8hj9m 1/1 Running 0 9h calico-system calico-node-gf45c 1/1 Running 0 9h calico-system calico-typha-685d55948f-vdtpv 1/1 Running 0 9h calico-system csi-node-driver-h25mc 2/2 Running 0 9h kube-system coredns-5d78c9869d-nlz9j 1/1 Running 0 9h kube-system coredns-5d78c9869d-vqngt 1/1 Running 0 9h kube-system etcd-forum-single-ma 1/1 Running 0 9h kube-system kube-apiserver-forum-single-ma 1/1 Running 0 9h kube-system kube-controller-manager-forum-single-ma 1/1 Running 5 (130m ago) 9h kube-system kube-proxy-lfwt2 1/1 Running 0 9h kube-system kube-scheduler-forum-single-ma 1/1 Running 6 (130m ago) 9h tigera-operator tigera-operator-549d4f9bdb-hm9tm 1/1 Running 5 (130m ago) 9h
-
Mit dem VPS 200 und RS 1000 sieht es da schon dünn aus.
VPS 200 zum Testen nur genutzt. RS 1000 4 Cores 8GB sollten ohne k8s Master absolut ausreichen ohne Belastung.
Wie ist dein Debian konfiguriert? Hast du das per Image oder per ISO installiert?
Hast du den Swap deaktiviert?
Image von NC, Swap ist off
Hast du schon mal probiert Calico über die öffentlichen IPs zu schicken, statt über das CloudVLAN?
Das CloudVLAN ist unter der Haube ein VXLAN, nutzt also UDP.
Ich werde es mal ohne VLAN testen die Tage
Kannst du die Tests mal mit nur 1 Master durchführen? Einfach 1 RS1000 dafür nehmen
Jop werde ich mal testen die Tage
Wenn du produktive Kubernetes Cluster bei Netcup betreiben willst, hast du dir schon überlegt wie du das mit dem Storage und dem LB machen willst?
Storage mit Longhorn, da seh ich auch keinen Grund die Workernodes Disks nicht zu verwenden. LB wird metallb
-
-
Ich teste jetzt seit Tagen mit verschiedenen K8s Setups und habe das Gefühl auf den NC Server läuft Kubernetes nicht einwandfrei.
Kubernetes Cluster Setup:
- 3 Master RS 1000 (RS 2000 und VPS 200 auch probiert)
- 1 Worker RS 1000 (RS 2000 und VPS 200 auch probiert)
- Debian 11 (10 und 12 auch schon probiert)
- Die Server kommunizieren über Cloud vLAN 2,5 Gbit/s
- kubernetes mit kubeadm aufgesetzt, und abgesehen von den privaten IPs ein absolutes Standard-Setup
- CSN calico tigera operator
- einzige Workload (bisher) prometheus-monitoring (Aber auch ohne gibt es die Probleme)
Angemerkt: Das gleiche Setup habe ich im privaten Homelab mit HDD (nicht SSD!) und auch beim großen A bis Z Cloud Anbieter (SSD Disks) probiert und hatte keine Problem bisher.
Zum Problem:
Mit ist aufgefallen, dass ich immer wieder mal Warnings habe. So ca alle 30 bis 60 Minuten.
Codekubectl get events -A | grep Warning kube-system 5m13s Warning Unhealthy pod/kube-apiserver-test-k8s Readiness probe failed: HTTP probe failed with statuscode: 500
Und auch den ein oder anderen kube-system pod Restart
Code
Alles anzeigenkubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE calico-apiserver calico-apiserver-7bccbfdcb4-4d94t 1/1 Running 0 45h calico-apiserver calico-apiserver-7bccbfdcb4-95sjr 1/1 Running 0 45h calico-system calico-kube-controllers-789dc4c76b-tp4g5 1/1 Running 0 45h calico-system calico-node-vdzq2 1/1 Running 0 45h calico-system calico-typha-8d9cb4c54-6xxnq 1/1 Running 0 45h calico-system csi-node-driver-jgggx 2/2 Running 0 45h kube-system coredns-5d78c9869d-pdqss 1/1 Running 0 45h kube-system coredns-5d78c9869d-xkwnx 1/1 Running 0 45h kube-system kube-apiserver-test-etcd-single 1/1 Running 0 45h kube-system kube-controller-manager-test-etcd-single 1/1 Running 60 (65m ago) 45h kube-system kube-proxy-ftc9g 1/1 Running 0 45h kube-system kube-scheduler-test-etcd-single 1/1 Running 56 (30m ago) 45h tigera-operator tigera-operator-549d4f9bdb-ksdlw 1/1 Running 63 (30m ago) 45h
Ich habe die Sache dann auf etcd zurückführen können, denn zeitgleich mit der Warning. Haben etcd logs folgendes ausgespuckt:
Code{"level":"warn","ts":"2023-06-22T15:29:36.314Z","caller":"etcdserver/util.go:166","msg":"apply request took too long","took":"5.999710819s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/apiregistration.k8s.io/apiservices/\" range_end:\"/registry/apiregistration.k8s.io/apiservices0\" count_only:true ","response":"range_response_count:0 size:8"} {"level":"warn","ts":"2023-06-22T15:29:36.313Z","caller":"etcdserver/util.go:166","msg":"apply request took too long","took":"4.003310712s","expected-duration":"100ms","prefix":"read-only range ","request":"key:\"/registry/ranges/servicenodeports\" ","response":"range_response_count:1 size:119"}
Also separaten etcd Cluster aufgesetzt und alle erdenklichen Benchmarks und Checks gemacht und das Ergebnis war: NC Disks sind einfach die schnellsten, einen Ticken besser wie A bis Z und deutlich besser wie meine Homelab HDDs. Und trotzem läuft es nicht rund.
Also k8s und etcd Cluster getrennt:
Neues Setup (mit VPS200 und RS1000 und RS2000 gestested - kein Unterschied)
- 3 etcd nodes
- 1 k8s master node
- 0 k8s worker
Anpassen der --heartbeat-interval --election-timeout parameter half auch nicht.
Ergebnis wie oben, grundsätzlich läuft es, aber hier und da Warnings und Neustart von kube-system pods.
etcd endpoint checks:
Codedocker exec etcd /usr/local/bin/etcdctl --write-out=table --endpoints $ENDPOINTS endpoint status +------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ | ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | +------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ | 10.241.0.17:2379 | 8b6b8d8fb98eca2e | 3.5.9 | 922 MB | false | false | 28 | 1090732 | 1090732 | | | 10.241.0.18:2379 | 6592412b034dfc6c | 3.5.9 | 922 MB | false | false | 28 | 1090732 | 1090732 | | | 10.241.0.19:2379 | 4dac3bf58bf8d547 | 3.5.9 | 922 MB | true | false | 28 | 1090732 | 1090732 | | +------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
Die große DB size kommt von den ganzen Benchmark tests.
Codedocker exec etcd /usr/local/bin/etcdctl --write-out=table --endpoints $ENDPOINTS endpoint health +------------------+--------+------------+-------+ | ENDPOINT | HEALTH | TOOK | ERROR | +------------------+--------+------------+-------+ | 10.241.0.19:2379 | true | 2.831555ms | | | 10.241.0.17:2379 | true | 2.43684ms | | | 10.241.0.18:2379 | true | 3.251807ms | | +------------------+--------+------------+-------+
Hier mal ein Graph der Disk Operations in den letzten 3h. Die Spikes + Zeiten passen zu den entsprechenden Logs von oben.
Im Vergleich der A-Z Laden: keine Spikes
Und mit diesem aktuellen Stand fühle ich mich nicht wohl ein Production Cluster zu fahren, der auch ein wenig Workload bekommen würde.
Hat jemand ähnliche Erfahrung? Wenn es bei euch läuft, welches OS habt ihr verwendet?
-------
Sideeffekts:
- Bei dem ganzen Rumgeteste, hatte ich einen RS1000, welcher einfach nicht den etcd Cluster nutzen wollten. Timeout bei kubeadm init .... Ich bin wirklich verzweifelt zumal das selbe Setupscript bei jedem anderen Server funktioniert hat, als hätte ich einen "Montagsserver" erwischt.. Auch mehrmalige OS Neuinstallation halfen nicht.
- Vermutlich purer Zufall, aber die RS1000 haben in den 2 Tagen Testen mehr Auffälligkeiten gezeigt, als die kleinen VPS200.