-
Notifications
You must be signed in to change notification settings - Fork 781
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
k8s-dqlite spiking cpu core to 100% #3227
Comments
I am facing the same issue on multiple AWS EC2s, each running single node Microk8s instances. Microk8s version: 1.23 classic Enabled addons:
For example, here is a screenshot of htop on an EC2.XLarge (16Gb memory): Microk8s was running smoothly until this week. On the other hand, instances running microk8s version 1.18 were not affected. |
We found similar results where the dqlite service on the leader node was hitting 100% usage. It is mentioned in a few other issues but dqlite is sensitive to slow disk performance. In other scenarios such as a node drain, it took a while to write to the database. You should see in the logs, something similar to We monitored the CPU and RAM utilisation for Dqlite IdleEtcd Idle |
I'm seeing something similar. I was running a 4-node HA cluster but it failed (see #3735) so I removed 2 nodes to disable HA mode and hopefully restore quorum , now running 2 nodes, 1 is master. The master has a dqlite process rammed at 100% CPU. Running
Hardware isn't exactly a rocketship but all my nodes are i5-6500T with 4 cores, 16GB memory, 256GB SSD and that should be adequate. Most of my workloads are not running at the moment, either. |
Hi all. I work on dqlite, and I'm going to try to figure out what's causing these CPU usage spikes. If you're experiencing this issue on a continuing basis and are in a position to collect some diagnostic info, I could use your help! Short of a reproducer that I can run myself (which I realize is difficult for this kind of complex system), the data I'd find most helpful would be a sampling profiler report showing where the k8s-dqlite process is spending its time during one of these spikes. A separate report for the same process and workload during a period of nominal CPU usage would also be great, so I can compare the two and see if anything stands out. You can gather this information as follows:
If the spikes last long enough that you can notice one happening and have time to ssh in and gather data before it ends, do that. Otherwise, since it's probably not feasible to just leave perf running (perf.data would get too huge), you could have a script like
Or with a longer timeout, etc. Then if you notice after the fact that a spike has occurred, you hopefully still have the perf.data file for that time period around. Thanks for your reports -- let's get this issue fixed! |
Hey @cole-miller, thanks for looking at this. I've done a
With those caveats, here's my attached |
@cole-miller likewise, k8s-dqlite doesn't spike, it's just at 100% all the time. |
It seems like a lot of people are affected by this issue. |
As well as my prod cluster being affected by this, last week I quickly threw together a 3-node MicroK8s cluster on v1.26 in VirtualBox to test something. No workloads. Initially it worked normally, but then I shut down all 3 VMs. When I booted them up again later, I had the dqlite 100% CPU problem. I didn't have time to look into it as I was working on something else, but it does show that it can happen on a new cluster that hasn't been "messed with". |
I understand that MicroK8s is free software, no guarantees, etc, but it is run by a prominent company like Canonical so it is surprising/disappointing that there are quite few serious, long-standing issues, affecting multiple users, that don't appear to be getting much attention from maintainers (for example this one, #3735 and #3204) I have been running MicroK8s since v1.17 I think and it has generally been rock solid and only broken when I've fiddled with it. Since v1.25/v1.26 there seem to be chronic issues affecting the stability. I have personally lost data due to this dqlite CPU problem (long story short, I lost dqlite quorum which broke the kube api-server, but I was using OpenEBS/cStor clustered storage, which depends on kube quorum for its own quorum. When it lost quorum and the kube api-server become silently read-only, the storage controller got itself into a bad state and volumes could not be mounted). A lot of people are talking about switching to k3s, and I don't want to be that guy who rants about switching, but it is something I will consider doing at next refresh. I note that k3s ditched dqlite in favour of etcd in v1.19. I don't know what their reasons were, but it was probably a good move. |
Hi Jonathan, I lead Kubernetes at Canonical and I wanted to firstly offer both an apology and a thank you for your help thus far. We know that there are situations where people like yourself are using MicroK8s and suddenly unbeknownst to you something goes wrong - not being able to easily solve that only compounds the problem. Our ambition for MicroK8s is to keep it as simple as possible, both in day-to-day operation but also upgrading. I wanted to thank you again for taking the time to engage with us and help us try and improve our projects. Projects plural, as DQLite is also something we build and maintain, hence our investment in building it for a low-ops K8s database backend. ( That said, there is the option to run ETCD with MicroK8s should you desire too ). This resilience issue is being taken extremely seriously and we are configuring machines to try and reproduce your environment as we are aware of it to the best of our abilities and to work with our DQLite team counterparts to resolve any performance issues. ( Please do let us know what your storage configuration is, localpath etc ). I believe one thing that really sets MicroK8s apart from alternatives is that we have no secret agenda here. All that said, I will do the following immediately:
|
Thanks @AlexsJones, I really appreciate the detailed response. It's good to hear that there is more going on behind the scenes than I was aware of. I'll be happy to help with testing and providing inspections reports, etc. I've generally had really good experiences interacting with the Canonical team on previous issues (@ktsakalozos in particular has been really helpful). My specific environment is 4 identical hardware nodes, each with a SATA SSD which has the OS (Ubuntu LTS 22.04) and also the Snap stuff, so that will include the dqlite database. Each node also has an M.2 NVMe which is claimed by OpenEBS/cStor for use as clustered storage. I don't use any localpath storage. I do also have an off-cluster TrueNAS server which provides NFS volumes via a RWX storage class. I'm actually part-way through a series of blog posts and the first part covers my architecture. The third part was going to be about OpenEBS/cStor but then it all went wrong, so I'm holding off on writing that! |
Thanks for the additional detail, I've setup a bare metal cluster ( albeit lower scale than yours ) and will look to install EBS/cstor with rook-ceph. We will then conduct a soak test and a variety of interrupts to generate data |
Thanks. I installed my cStor from Helm directly, rather than using Rook. I've just made a gist with my values file so you can create a similar environment if you need to, although I the root cause of my problem was with dqlite rather than cStor. |
It's still worth investigating as there might be a disk activity correlation - Will set this up now |
Are you using CephFS or RBD? If so how's that interacting with the cstor SC? |
I'm not using CephFS or RBD, only OpenEBS & cStor |
Okay, I saw it was mentioned at the top of the thread, thanks! |
No worries, this isn't my thread originally, but I am affected by the same dqlite CPU spike |
Hi @djjudas21, @doctorpangloss -- thanks very much for uploading the perf files, they're quite useful for narrowing down the root of the problem. Here are the resulting flamegraphs:
As you can see, CPU usage is dominated by calls to sqlite3_step. Looking at just the children of that function, the big contributions are from SQLite code, with some contributions also from dqlite's custom VFS (about 14% of the grand total), much of which boils down to calls to memcpy (9%). So my preliminary conclusion is that most of the CPU cycles are spent in SQLite, in which case it's likely the route to fixing this problem lies in optimizing the requests send by microk8s to dqlite (via the kine bridge). But I'll continue to investigate whether any parts of dqlite stand out as causing excessive CPU usage. |
One possible issue: dqlite runs sqlite3_step in the libuv main thread, so if calls to sqlite3_step are taking quite a long time then we're effectively blocking the event loop -- which could have bad downstream consequences like Raft requests timing out and causing leadership churn. @djjudas21, @doctorpangloss, and anyone else who's experiencing this issue, it'd be very helpful if you could follow these steps to generate some data about the distribution of time spent in sqlite3_step:
Thanks again for your willingness to help debug this issue! |
@cole-miller I could capture the requested histogram during about 3 minutes of such an event:
This is a 3 nodes cluster with 2 12-CPU nodes and 1 2-CPU node. The particularity (?) is that there is a relatively high (~10ms) latency between nodes 1,2 and node 4. Below the CPU load measurement during the event. This event was on the little node, but it can equally happen on the big nodes, sending CPU load to 300% (apparently due to iowait, not sure).
|
As a side note, I have always been wondering what dqlite is doing to consume 0.2 CPU when the cluster is otherwise idle. Although I don't want to divert this thread if this is unrelated. |
|
@sbidoul, @doctorpangloss -- thanks! It does look like a substantial number of our calls to sqlite3_step are taking milliseconds to tens of milliseconds, which is not outrageous but is long enough that we should probably try to move those calls out of the main thread. (We will want to do this in any case for the experimental disk mode.) I will try to work up a patch that does that and we'll make it available for you to try out when it's ready. (I don't know what to think about the small number of calls that took entire seconds to complete.) |
would it be helpful to have a reproducible environment? i can give you access to a hardware cluster reproduction of what is executing here. |
@doctorpangloss Yes, that would be very helpful! My SSH keys are listed at https://github.com/cole-miller.keys, and you can contact me at [email protected] to share any private details. |
@sbidoul I had some trouble generating a flamegraph or Re: your second graph, I'm a little confused because it looks like CPU usage for dqlite goes down during the spike event, and it's the kubelite process that's responsible for the spike. Am I misinterpreting?
The main thing that dqlite has to do even in the steady state where it's not receiving any client requests is to exchange Raft "heartbeat" messages with other nodes, so that they don't think it has crashed. If you can gather perf data for one of those idle periods I'd be happy to try to interpret the results (it would be educational for me too, and we might uncover something unexpected). |
I am using 1.30/stable currently and saw no difference |
Same problem here, dqlite is using massive amounts of CPU on a 3 node Microk8s v1.30 cluster. |
I ended up moving away from HA mode on my cluster and have been having
better results.
…On Sun, Jun 2, 2024 at 6:31 PM Maxime Moreillon ***@***.***> wrote:
Same problem here, dqlite is using massive amounts of CPU on a 4 node
Microk8s v1.30 cluster
—
Reply to this email directly, view it on GitHub
<#3227 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAD63FL4QTPFIOQ7EPGLOXDZFOMMRAVCNFSM5YFUCNGKU5DIOJSWCZC7NNSXTN2JONZXKZKDN5WW2ZLOOQ5TEMJUGQYDIMRSG44Q>
.
You are receiving this because you commented.Message ID:
***@***.***>
--
[image: photo]
Ken Kyger
Founder, FutureHax Development
<http://www.linkedin.com/in/r2doesinc/> <http://github.com/futurehax>
<http://stackexchange.com/users/1130968/r2doesinc>
<http://twitter.com/r2DoesInc>
407.965.8510
***@***.***
Skype: r2doesinc <#SignatureSanitizer_SafeHtmlFilter_>
futurehax.org
The best way to predict the future, is to create it.
Click here to schedule a meeting <https://calendly.com/futurehax>
IMPORTANT: The contents of this email and any attachments are confidential.
They are intended for the named recipient(s) only. If you have received
this email by mistake, please notify the sender immediately and do not
disclose the contents to anyone or make copies thereof.
|
microk8s-k8s-dqlite-debug-github.com-issue-3227-A.txt @ktsakalozos log files with --debug according to your instructions from a comment above. No pods created over the standard ones. microceph is installed, too. The high CPU usage by k8s-dqlite, kubelite and rsyslog started on most nodes when disks got full of logs. Tha attached log files are from worker1 with more than 1G disk available, which after maybe 5-10 minutes after reboot goes to 100% CPU usage. There are lot's of entries with the IP 10.0.2.15 which maybe shouldn't be there at all. That is the VirtualBox NAT IP. There is another Host-only network which was used to add worker nodes, 192.168.60.0/24. I should probably configure the microk8s cluster for the 192 network at install time, will look into that. Edit 1: Edit 2: Edit 3: Possible reasonTime sync was not implemented/working (due to me not installing Guest Additions on each VirtualBox VM).
Hope this helps in troubleshooting. |
I've just upgraded my cluster from 1.27 to 1.30. I run a small homelab with 3 nodes, 8,8 and 4G and 2c each. After the upgrade i noticed lack of stability. The 4G node got hit especially badly. Even though i drained the nodes during the update, the added load caused them to misbehave. Right now my the 4G node is cordoned, and sitting on 90% CPU. I tried disabling and enabling the control plane, and it didn't help. That's when i found this thread. I'm perplexed as to why this issue can be open so long without a mitigation. I understand that m8s is an open source project, but if it's meant to be production ready, i should at least have a way of fixing my cluster in a hotfix way. I've read through all 100+ comments and it seems the best way is to back up my Longhorn, pack everything in boxes and move to a fresh k3s install. |
The solution I found was to simply disable ha-cluster support.
This solved both the stability issues and the runaway CPU and memory usage.
It's not ideal, but until I migrate the whole cluster to something like k3s
or k0s, it seems to be the best solution to keep the mk8s stack viable.
…On Thu, Jun 27, 2024, 3:35 PM Bartek Banachewicz ***@***.***> wrote:
I've just upgraded my cluster from 1.27 to 1.30. I run a small homelab
with 3 nodes, 8,8 and 4G and 2c each. After the upgrade i noticed lack of
stability. The 4G node got hit especially badly. Even though i drained the
nodes during the update, the added load caused them to misbehave. Right now
my the 4G node is cordoned, and sitting on 90% CPU. I tried disabling and
enabling the control plane, and it didn't help. That's when i found this
thread.
I'm perplexed as to why this issue can be open so long *without a
mitigation*. I understand that m8s is an open source project, but if it's
meant to be production ready, i should at least have a way of fixing my
cluster, and it seems the best way is to back up my Longhorn, pack
everything in boxes and move to a fresh k3s install.
—
Reply to this email directly, view it on GitHub
<#3227 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAD63FPHWVDJFM3M2A27J3DZJRSRBAVCNFSM5YFUCNGKU5DIOJSWCZC7NNSXTN2JONZXKZKDN5WW2ZLOOQ5TEMJZGU2TENRUGI4Q>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beats me. I would have started the migration to |
I don't believe versions changes has much impact on triggering the issue or not. Nearly 2 years ago I was on 1.26 and got it sporadically, sometimes rebooting one node would fix it. I tried to upgrade to 1.27 and never managed to get it working, it was always stuck in this mode. I downgraded back to 1.26 and it's been running flawlessly ever since (nearly two years). I do believe it just require one heavy change of node structure to trigger it, and it's the same issue that linger since years. So no @bananu7 switching from 1.30 to 1.29 fixing it was probably dumb luck. I somehow also believe it's related to disk usage. I have issues related to Longhorn, other comments here mentioned ceph and microceph struggling, and low disk space remaining. Suggesting disabling HA is also completely ridiculous, HA is the only reason why we use kubernetes in the first place. |
Got this problem on my 3 master, 8c 16G (my mistake that I didnt isolate master node with worker node on my 500 pod cluster, but nonetheless), One of the 3 node become unresponsive and hogging 100% cpu, 100% memory, and because swap is disabled as per recommendation, it have nowhere to go, and I tried to force reboot it. But then the other node now become like that, so i ended up doing recovery and downgrade it into single cluster, and need to do leave-rejoin the worker node, which also broke my cluster longhorn state and 40 volume faulted (also my mistake). On the migration to standalone master node (that will solely host microk8s, without any other k8s workload, with 3 node 4c/8g because I think it will be enough), I found some findings,
What does help me debugging is enabling dqlite debug with flag in
accessing the dqlite database with
checking the kubelite Txn duration
The questions that remain is,
What I currently use is throw_more_ram™, although I think we need a benchmark on how many k8s resource can dqlite realistically handle with how big the storage size On the other hand, or rather the main thread here is, there are still occasionally constant 100% dqlite usage, but with my 8 core, I didnt worry too much |
I'm also facing with this issue. I want to install a external etcd cluster and to restore data from dqlite backup. Has anyone tried this? Can it be done? |
because
By adopting
For your sake, I'd hope so. |
After a bit more than a year, my microk8s now finally gave up. I ran it in single node mode because of this bug but now it ended up CPU freezing my whole server and eating all CPU. Restarting helped but I never got it back to a consistent state regarding running pods etc. I finally gave up, uninstalled microk8s and snap and moved to k3s. It is sad to see that dqlite is fundamentally broken and Canonical has no interest in fixing it. I can just recommend everyone moving to k3s. It was extremely straight forward to setup. Actually its much more flexible when installing since you are not bound to snap. Good luck everyone here! ❤️ |
Hello there! I see this has been quite the thread, and it took a while to catch up on everything that's been happening here. I am bit late here, but I'm going to touch on a few of the things which have been mentioned here, and share some of my thoughts, ramblings, knowledge, experiences, and findings with you as well. Will try to keep the following as impartial as possible. Some are general tips that may or may not apply to you, even if you use microk8s or not. I see that quite a few people are trying to use Rook-Ceph and / or kubevirt. Actually, I see a lot of people here have mentioned they're also using something storage-related, like Longhorn, minio, etc., which is interesting. In fact, it seems that they're quite storage intensive; I wonder if it all leads to some sort of storage-related resource starvation, which also impacts Anyways, in regards to Rook-Ceph and / or kubevirt (may also be relevant for RedPanda, not sure, or any other applications / operators that have to watch a lot of files), this may be an important tip for you, but I don't think it will solve the issue that has been observed in this thread with
By default in Ubuntu (I've verified this in 22.04 and 24.04), they're set to ubuntu@microk8s-03:~/inotify-info$ sudo ./_release/inotify-info
------------------------------------------------------------------------------
INotify Limits:
max_queued_events 16,384
max_user_instances 128
max_user_watches 45,674
------------------------------------------------------------------------------
Pid Uid App Watches Instances
180833 0 kubelite 287 12
1 0 systemd 113 5
782 0 polkitd 18 2
193917 0 udevadm 14 1
448 0 udevadm 14 1
174351 1000 systemd 7 3
188787 0 containerd-shim-runc-v2 4 2
187202 0 containerd-shim-runc-v2 4 2
188712 0 containerd-shim-runc-v2 4 2
188519 0 containerd-shim-runc-v2 4 2
188369 0 containerd-shim-runc-v2 4 2
188257 0 containerd-shim-runc-v2 4 2
188128 0 containerd-shim-runc-v2 4 2
187930 0 containerd-shim-runc-v2 4 2
...
190950 0 containerd-shim-runc-v2 4 2
186828 0 containerd-shim-runc-v2 4 2
773 103 dbus-daemon 4 1
178685 1000 dbus-daemon 4 1
181207 0 containerd-shim-runc-v2 4 2
182200 0 containerd-shim-runc-v2 4 2
...
185321 0 containerd-shim-runc-v2 4 2
185042 0 containerd-shim-runc-v2 4 2
801 0 udisksd 3 2
191028 0 containerd-shim-runc-v2 2 1
180711 0 containerd 1 1
799 0 systemd-logind 1 1
684 102 systemd-resolved 1 1
651 104 systemd-timesyncd 1 1
445 0 multipathd 1 1
------------------------------------------------------------------------------
Total inotify Watches: 675
Total inotify Instances: 136
------------------------------------------------------------------------------ We have had some issues with these settings in some baremetal deployments that also used Rook and Kubevirt (note that it may be possible for some Kubernetes operators to overwrite these values as well), and we had to update these values in order for them to function properly. This has also been noted in a few places as well:
The inotify values have been updated in microk8s as well since v1.28: #4094, and
As a personal anecdote, when I was trying to replicate the scenarios listed here and tried to deploy Rook-Ceph on microk8s + deploying a Ceph cluster on top of it in microk8s, it got stuck after spawning the first After writing this, I see that @djjudas21 also mentioned these settings. Oh well. I've talked about these settings since I've assumed that it may have had something to do with this issue, but I haven't observed an impact, or I haven't done sufficient testing on it to notice. A biiiit unrelated to the k8s-dqlite issue, but still kinda' related (will mention a bit later how):
and:
So. You might have another issue here, when it comes to those numbers. By default, Kubernetes supports only 110 Pods per node, as you can see here: https://kubernetes.io/docs/setup/best-practices/cluster-large/. So, if you indeed want to scale to such numbers, you should probably have a few more nodes in order to handle that kind of influx of Jobs / Pods, or adjust your workflow / pipeline to throttle that number a bit. If you do have bulky nodes that could potentially handle that kind of workloads, then you should also adjust that number. I'm saying this because someone had 110+ Pods on a single node, in which case, any additional Pod would end up stuck in a Pending state or even in an Error state. Of course, I think it's ok to go a biiit over the limit for short-lived Pods (Jobs), but not for regular, long-lived Pods. Now, I said that it is slightly related. Regarding how Kubernetes works, it really does store a lot of data, or more precisely, it can cause data updates very frequently. Every Kubernetes Object has a
As you can see, the Anyways, this basically means that Kubernetes does need a database that's able to keep up with this (a bit absurd, IMO) number of updates, in addition to it being fault tolerant. That is a bit difficult, IMO, and I'm not exactly sure how etcd or k8s-dqlite handles this sort of thing. Though, if I may throw in an unwarranted opinion, there are a few things which could probably help a lot on "scaling" these database updates:
Other than that, as a general note, I would take a look at what exactly is generating a lot of noise / churn in the Kubernetes cluster itself. I'd take a look at the Kubernetes Events. For example, flip-floping resources can cause quite a few events and thus resource status updates, which translates in several database updates which would have to be sync'ed across multiple nodes:
As a note, I think restarting a node would generate a lot of events / status updates for all the resources currently present on that node (haven't checked). But, there could also be other cluster-related health issues or warnings which could generate a lot of events / status updates, including misconfigurations, node health warnings (disk, memory, PID pressure), etc. For example, I've tried one v1.26 which apparently many people had issues with, and I've seen the following events:
So, a lot of events have been generated simply because
An idle cluster still has a lot of updates to do, apparently, from what we've seen above. It's gotten better since then though I've seen it getting better though as you'll see below. But tl;dr, I've tried in a v1.31.1 microk8s 3-node cluster which was busy spawning 10K pods, and the master node was orbiting around 10-20% CPU usage in a VM.
I tried microk8s v1.26 as well, and bombarded it with loads of resources, and ... but those numbers of masterleases updates... are so high. It makes out to be the majority of those updates. And it's only 3 of them. And I assume that's also after some compacting. What if there are more
I wonder if anyone else has a higher number of Endpoints / EndpointSlices, and could share the number of
It is interesting how the number of entries varies so much. I wonder if it's due to compacting, or some sort of lease duration.
Hmm, I see you have 6 API servers running, based on the number of **PS: You can add nodes as a worker to a microk8s cluster if you add the
I have tried to replicate some of the scenarios as well. I might have to do some additional digging, in light of some of the discoveries above, but will have to do it later. I will detail my setup for comparison. I've ran these experiments in 3 Hyper-V Generation 2 VMs (on a Windows 11 host), created on an SSD, each VM with a 100GB dynamically expanding differential disks, each VM having 2 vCPUs, and each VM having 5GB memory (one of them has 6GB though). This setup is a bit weaker when compared to some of the specs that have been shared here. (a small FYI here, a Kubernetes node should have at least 2 (v)CPUs, otherwise it'll probably freeze up, learned that the hard way). As for the VMs, they're all identical:
I've tried out microk8s v1.31.1, and they have been clustered up:
I have generated quite a bit of load on the cluster generating Pods like this:
There are quite a few of them:
Of course, not everything can be running, based on the Pod / node limit. But it should generate a bit of churn, also considering how many events, service account tokens, other leases, etc. I've followed the CPU consumption of
Will have to check later the logs as well, to see if Best regards, Claudiu |
PS: A few other quick updates.
The PS: But I did find that there are multiple endpoint reconciler types: https://github.com/kubernetes/kubernetes/blob/55b83c92b3b69cd53d5bf22b8ccff859a005241a/pkg/controlplane/reconcilers/reconcilers.go#L53-L58 . This can be set through the
Indeed, I found this part as well. It's the endpoint's Speaking of guaranteeing database updates, as seen in a comment in the link above, I wonder if there's ever a case in which Another quick thing I found to be interesting. In the kube-apiserver commandline arguments (https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/) there seems to be an option,
It can also be because they haven't been around for as long as the others. Didn't think about that at the time. 3AM may not be a good moment to think about things. PS: It seems to me that there are a lot operations related to leases. I'm not sure on-disk database is a good choice for leases, keeping in mind that they have to be constantly updated, otherwise they expire. In fact, it is a quite known as a mechanism to store distributed locks / leases on in-memory databases like Redis or etcd (in fact, they've even come up with their own name for it, "Redis Lock"). This could be the reason people haven't seen these issues with etcd-backed K8s nodes. In this sense, if I may amend the list of |
Since I participated here - my cluster worked for a while with mismatched versions, but finally became completely unusable. The 4GB node stopped working altogether (even SSH didn't work), so I removed everything and finally moved to K3s. On exactly the same hardware, I now see 0.6% cpu use instead of 60% with an empty cluster. |
Any progress on that? Every 2h I have not reasonable spikes. I already once needed to wipe everything, and it came back. And increases every day. |
Hi @Azbesciak could you share a |
Hi @ktsakalozos - No, I am not aware of any process like this, when I got alert I quickly checked I will provide when I am able to catch the spike, thank you for the answer |
@ktsakalozos |
Hello @Azbesciak, would you be willing to upgrade your microk8s snap to To ensure that no other processes may be causing the spike I would recommend looking at the metrics using pidstat on the k8s-dqlite process. Thanks for sharing your metrics with us! |
Will do, thank you |
I've moved to kubeadm and haven't looked back.
The plugins for microk8s are great, but not worth it if the cluster itself
can even stay alive.
…On Thu, Jan 16, 2025, 1:27 AM hulucc ***@***.***> wrote:
v1.31 is not helping, master still get 100% cpu, 100% memory and massive
of disk io.
image.png (view on web)
<https://github.com/user-attachments/assets/940eb8d4-f7e6-464c-8f0e-b2e8c88471bb>
—
Reply to this email directly, view it on GitHub
<#3227 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAD63FNLASO3HAEOMQSEFC32K5GNRAVCNFSM5YFUCNGKU5DIOJSWCZC7NNSXTN2JONZXKZKDN5WW2ZLOOQ5TENJZGQ3DGMZXG4ZA>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Not sure if this type of comment has any value for this community/Canonical devs so I'll keep it short. I'm also moving on, just completed migration of all our deployments to k3s. The sole reason for us abandoning microk8s is dqlite, specifically this cpu issue, and the unreasonably large amount of writes killing our flash storage on nodes (#3064). Our use case is single node relatively low-power edge compute, and microk8s just isn't stable enough for anything resembling production use in our experience. Good luck to everyone sticking with microk8s, hope these issues do get fixed eventually! |
Well, maybe you havent noticed that you can migrate microk8s to use etcd.
št 16. 1. 2025 o 23:49 realG ***@***.***> napísal(a):
… Not sure if this type of comment has any value for this
community/Canonical devs so I'll keep it short. I'm also moving on, just
completed migration of all our deployments to k3s.
The sole reason for us abandoning microk8s is dqlite, specifically this
cpu issue, and the unreasonably large amount of writes killing our flash
storage on nodes (#3064
<#3064>). Our use case is
single node relatively low-power edge compute, and microk8s just isn't
stable enough for anything resembling production use in our experience.
Good luck to everyone sticking with microk8s, hope these issues do get
fixed eventually!
—
Reply to this email directly, view it on GitHub
<#3227 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AC3IHU6Y3MKHX5O6UUHROXT2LAZN5AVCNFSM5YFUCNGKU5DIOJSWCZC7NNSXTN2JONZXKZKDN5WW2ZLOOQ5TENJZG4YDMMRVG43A>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Can you expand on this, @miro-balaz? I was only able to find documentation for running etcd with external etcd, but not internal. |
We shouldnt have to go tweaking the base install to make it viable. At this point they know dqlite is a failure, and them not moving to an external - or internal - etcd implementation is enough for me to realize they dont really care about this software any longer. |
Summary
I've setup a 4 node microk8s cluster on bare metal machines. Every now and then the
/snap/microk8s/3204/bin/k8s-dqlite
process will spike one of the cores on one of my nodes to 100% usage, sending my fans into overdrive.I can see the ram usage is low and all the other cores are running at <6% usage, and RAM is hardly used:
The specs of the machines are as follows:
The cluster has the metallb, dns, rbac, and storage enabled.
I've also deployed Rook-Ceph on the cluster.
What Should Happen Instead?
It shouldn't be using over 100% of a core.
Reproduction Steps
Introspection Report
inspection-report-20220608_143601.tar.gz
The text was updated successfully, but these errors were encountered: