{"id":30692,"date":"2024-03-04T16:13:49","date_gmt":"2024-03-04T15:13:49","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=30692"},"modified":"2024-03-04T16:13:51","modified_gmt":"2024-03-04T15:13:51","slug":"kured-no-more-patching-anxiety-for-kubernetes-clusters","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/","title":{"rendered":"Kured: No more patching anxiety for Kubernetes clusters"},"content":{"rendered":"\n<p>Before jumping into the topic of this blog, let&#8217;s define the context. To keep your Linux system up-to-date, you traditionally have your unattended-upgrades package on your Ubuntu servers installed, triggered every week or so. This piece of software will download all required package updates from the core and security repositories by default and apply them. The thing is, some of them would require a reboot of your server. Unfortunately, the server was acting as a Kubernetes node, and as a consequence, the pretty hard reboot, from a Kubernetes standpoint, messed up your workload. This story, you may be familiar with.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-an-animal-called-kured\">An animal called Kured<\/h2>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"292\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/kured-300x292.png\" alt=\"\" class=\"wp-image-31636\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/kured-300x292.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/kured-768x747.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/kured.png 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p>In the world of DevOps, where continuous development and deployment are essential, ensuring the smooth operation of a Kubernetes cluster is crucial. One key aspect is managing Kubernetes node reboots efficiently and safely. This is where Kured (KUbernetes REboot Daemon) steps in. Kured is a Kubernetes daemonset that automates the process of node reboots based on indications from the underlying operating system&#8217;s package management system. In this blog, we will explore how Kured significantly improves DevOps project downtime by simplifying the management of node reboots.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.cncf.io\/projects\/kured\/\">CNCF<\/a> sandbox project, <a href=\"https:\/\/kured.dev\/\">Kured<\/a> is a set of Kubernetes objects. And like any good tool, you can install Kured using <a href=\"https:\/\/helm.sh\/docs\/intro\/install\/\">Helm<\/a> for an easy installation (Yes, also through standard manifests file if you like to play).<\/p>\n\n\n\n<p>Our sandbox environment is composed of two AWS EC2 instances, running an RKE2-backed Kubernetes cluster. If you are not familiar with <a href=\"https:\/\/www.suse.com\/products\/rancher-kubernetes-engine\/\">RKE2<\/a>, this is a fully compliant Kubernetes distribution, with a specific focus on security. RKE stands for Rancher Kubernetes Engine and is a <a href=\"https:\/\/landscape.cncf.io\/?selected=rke-government&amp;item=platform--certified-kubernetes-distribution--rke-government\">CNCF certified Kubernetes distribution<\/a>. Interested into some RKE2 content? My colleague Kevin posted some time ago the <a href=\"https:\/\/www.dbi-services.com\/blog\/rancher-autoscaler-enable-rke2-node-autoscaling\/\">procedure<\/a> to setup nodes autoscaling in RKE2.  <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; first-line: 2; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ kubectl get nodes\nNAME              STATUS   ROLES                       AGE     VERSION\nk8s-node-master   Ready    control-plane,etcd,master   5h49m   v1.26.12+rke2r1\nk8s-node-worker   Ready    &lt;none&gt;                      5h27m   v1.26.12+rke2r1\n<\/pre><\/div>\n\n\n<p>Here, we are dealing with a quite simple cluster, with a control-plane node and, aside from that, a worker node. Adding Kured to your cluster is pretty straightforward, thanks to Helm.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ helm repo add kubereboot https:\/\/kubereboot.github.io\/charts\n\nubuntu@k8s-node-master:~$ helm search repo kubereboot\nNAME                    CHART VERSION   APP VERSION     DESCRIPTION           \nkubereboot\/kured        5.4.2           1.15.0          A Helm chart for kured\n<\/pre><\/div>\n\n\n<p>The Helm repository is added first; a <code>helm search<\/code> shows the latest available chart and app version. But before installing it, you can quickly have a look at some of them. There are dozens of fields you can customize, and a standard <code>helm show values kubereboot\/kured <\/code>should do the trick! I&#8217;m pasting here the URL <a href=\"https:\/\/github.com\/kubereboot\/charts\/blob\/main\/charts\/kured\/values.yaml\">values.yaml<\/a> file, from GitHub. But the output of the helm command should be similar, according to the version you&#8217;ve selected.<\/p>\n\n\n\n<p>Pay attention to the following:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td><strong>Key<\/strong><\/td><td><strong>Short description<\/strong><\/td><\/tr><tr><td>configuration.startTime and configuration.endTime<\/td><td>Indicates the time window for rebooting.<\/td><\/tr><tr><td>configuration.rebootDays<\/td><td>Reboot will be only performed in the selected days.<\/td><\/tr><tr><td>configuration.period<\/td><td>Defines how often Kured needs to check for reboot.<\/td><\/tr><tr><td>configuration.forceReboot<\/td><td>What Kured needs to do if drain times out?<\/td><\/tr><tr><td>configuration.drainGracePeriod<br>configuration.drainPodSelector<br>configuration.drainTimeout<\/td><td>Drain related parameters. By setting this, you defines a grace period (remember the <code>kubectl delete pods --force --grace-period=0<\/code>  \ud83d\ude00 ), the list of pods to drain, and a timeout after which the drain will be canceled.<\/td><\/tr><tr><td>configuration.blockingPodSelector<\/td><td>If certain pods are present on the node, the reboot will be canceled.<\/td><\/tr><tr><td>configuration.concurrency<\/td><td>Can be useful for very large clusters. By default 1, meaning only one node will be rebooted at a time.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>As said in the documentation, Kured is checking regularly for the presence of the file <code>\/var\/run\/reboot-required<\/code>. Created by the package manager, this file comes along with the file <code>\/var\/run\/reboot-required.pkgs<\/code>, which lists all the packages that requested the reboot. We can tune in the Helm chart values the name and location, but for Debian\/Ubuntu-like Linux distributions, no modifications should be necessary.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-let-s-start\">Let&#8217;s start!<\/h2>\n\n\n\n<p>I created my cluster some while ago and would require for sure some system upgrades. Let&#8217;s install Kured and see how it behaves.<\/p>\n\n\n\n<p>First, we need to get the value file and update it. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ helm show values kubereboot\/kured &gt; values.yaml\nubuntu@k8s-node-master:~$ ls -l\ntotal 8\n-rw-rw-r-- 1 ubuntu ubuntu 6412 Mar  4 09:56 values.yaml\n<\/pre><\/div>\n\n\n<p>I&#8217;m going to update the file to set the <code>configuration.period<\/code> key. For the purpose of my tests, I don&#8217;t want to wait for an hour \ud83d\ude09 so I will shorten it.<\/p>\n\n\n\n<p>Installing Kured is just a matter of <code>helm install<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ helm install kured kubereboot\/kured -n kured --create-namespace -f values.yaml \u00a0\nNAME: kured\nLAST DEPLOYED: Mon Mar \u00a04 10:03:56 2024\nNAMESPACE: kured\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\nNOTES:\nKured will check for \/var\/run\/reboot-required, and reboot nodes when needed.\n\nSee https:\/\/github.com\/kubereboot\/kured\/ for details.\n<\/pre><\/div>\n\n\n<p>Kured is installed, on the two nodes:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ kubectl get pods -n kured -o wide\nNAME          READY   STATUS    RESTARTS   AGE   IP           NODE              NOMINATED NODE   READINESS GATES\nkured-65l69   1\/1     Running   0          60s   10.42.1.7    k8s-node-worker   &lt;none&gt;           &lt;none&gt;\nkured-6z7bf   1\/1     Running   0          60s   10.42.0.21   k8s-node-master   &lt;none&gt;           &lt;none&gt;\n<\/pre><\/div>\n\n\n<p>Let&#8217;s have a look at the logs; they&#8217;re quite informative:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ kubectl logs -n kured kured-65l69\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Binding node-id command flag to environment variable: KURED_NODE_ID&quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Kubernetes Reboot Daemon: 1.15.0&quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Node ID: k8s-node-worker&quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Lock Annotation: kured\/kured:weave.works\/kured-node-lock&quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Lock TTL not set, lock will remain until being released&quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Lock release delay not set, lock will be released immediately after rebooting&quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;PreferNoSchedule taint: &quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Blocking Pod Selectors: &#x5B;]&quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Reboot schedule: SunMonTueWedThuFriSat between 00:00 and 23:59 UTC&quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Reboot check command: &#x5B;test -f \/sentinel\/reboot-required] every 1m0s&quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Concurrency: 1&quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Reboot method: command&quot;\ntime=&quot;2024-03-04T10:04:02Z&quot; level=info msg=&quot;Reboot signal: 39&quot;\ntime=&quot;2024-03-04T10:05:50Z&quot; level=info msg=&quot;Reboot not required&quot;\ntime=&quot;2024-03-04T10:06:50Z&quot; level=info msg=&quot;Reboot not required&quot;\ntime=&quot;2024-03-04T10:07:50Z&quot; level=info msg=&quot;Reboot not required&quot;\ntime=&quot;2024-03-04T10:08:50Z&quot; level=info msg=&quot;Reboot not required&quot;\ntime=&quot;2024-03-04T10:09:50Z&quot; level=info msg=&quot;Reboot not required&quot;\ntime=&quot;2024-03-04T10:10:50Z&quot; level=info msg=&quot;Reboot not required&quot;\n\n<\/pre><\/div>\n\n\n<p>Logs are coming from the pod scheduled on the worker. A quick look, and we can see that I&#8217;ve set the check every minute, the whole day, every day. It is definitely not a production-ready practice, but fine enough for our tests!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-can-we-introduce-some-workloads\">Can we introduce some workloads?<\/h2>\n\n\n\n<p>Without any form of inspiration, I&#8217;m triggering here the examples mentioned in the <a href=\"https:\/\/kubernetes.io\/docs\/tutorials\/hello-minikube\/\">Minikube tutorials<\/a>, from kubernetes.io. Deployment first, and then the Service, for this test as NodePort.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ kubectl create deployment hello-node --image=registry.k8s.io\/e2e-test-images\/agnhost:2.39 -- \/agnhost netexec --http-port=8080\ndeployment.apps\/hello-node created\nubuntu@k8s-node-master:~$ kubectl get deployments\nNAME         READY   UP-TO-DATE   AVAILABLE   AGE\nhello-node   1\/1     1            1           8s\nubuntu@k8s-node-master:~$ kubectl get pods -o wide\nNAME                          READY   STATUS    RESTARTS   AGE   IP          NODE              NOMINATED NODE   READINESS GATES\nhello-node-7b87cd5f68-lzlxk   1\/1     Running   0          16s   10.42.1.8   k8s-node-worker   &lt;none&gt;           &lt;none&gt;\nubuntu@k8s-node-master:~$ kubectl expose deployment hello-node --type=NodePort --port=8080\nservice\/hello-node exposed\nubuntu@k8s-node-master:~$ kubectl get svc\nNAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE\nhello-node   NodePort    10.43.187.123   &lt;none&gt;        8080:30608\/TCP   5s\nkubernetes   ClusterIP   10.43.0.1       &lt;none&gt;        443\/TCP          26d\n<\/pre><\/div>\n\n\n<p>Let&#8217;s validate our deployment, we are using nodePort, so I&#8217;m using the IP of my worker.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ curl 192.168.7.16:30608\nNOW: 2024-03-04 10:26:13.925835071 +0000 UTC m=+213.118628418\n<\/pre><\/div>\n\n\n<p>It worked (luckily)!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-kured-in-action\">Kured in action<\/h2>\n\n\n\n<p>Now it&#8217;s time for some system upgrades on the worker. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-worker:~$ lsb_release -a\nNo LSB modules are available.\nDistributor ID: Ubuntu\nDescription:    Ubuntu 22.04.4 LTS\nRelease:        22.04\nCodename:       jammy\n<\/pre><\/div>\n\n\n<p>We are running Ubuntu 22.04.4 LTS, so as usual, it&#8217;s a matter of <code>apt update<\/code> and <code>apt dist-upgrade<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-worker:~$ sudo apt update\nHit:1 http:\/\/eu-central-1.ec2.archive.ubuntu.com\/ubuntu jammy InRelease  \nGet:2 http:\/\/eu-central-1.ec2.archive.ubuntu.com\/ubuntu jammy-updates InRelease &#x5B;119 kB]  \nGet:3 http:\/\/eu-central-1.ec2.archive.ubuntu.com\/ubuntu jammy-backports InRelease &#x5B;109 kB]  \nGet:4 http:\/\/security.ubuntu.com\/ubuntu jammy-security InRelease &#x5B;110 kB]  \n...\nFetched 9330 kB in 2s (4796 kB\/s) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  \nReading package lists... Done  \nBuilding dependency tree... Done  \nReading state information... Done  \n79 packages can be upgraded. Run &#039;apt list --upgradable&#039; to see them.  \nubuntu@k8s-node-worker:~$ sudo apt dist-upgrade \u00a0  \nReading package lists... Done  \nBuilding dependency tree... Done  \nReading state information... Done  \nCalculating upgrade... Done  \nThe following NEW packages will be installed:  \n\u00a0linux-aws-6.5-headers-6.5.0-1014 linux-headers-6.5.0-1014-aws linux-image-6.5.0-1014-aws linux-modules-6.5.0-1014-aws  \n...\nProcessing triggers for dbus (1.12.20-2ubuntu4.1) ...\nProcessing triggers for linux-image-6.5.0-1014-aws (6.5.0-1014.14~22.04.1) ...\n\/etc\/kernel\/postinst.d\/initramfs-tools:\nupdate-initramfs: Generating \/boot\/initrd.img-6.5.0-1014-aws\n\/etc\/kernel\/postinst.d\/zz-update-grub:\nSourcing file `\/etc\/default\/grub&#039;\n<\/pre><\/div>\n\n\n<p>The output is truncated, but  the upgrade brought a new Linux kernel. That&#8217;s nice, because it will require some updates! Let&#8217;s look at the files mentioned earlier:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-worker:~$ cat \/var\/run\/reboot-required  \n*** System restart required ***  \nubuntu@k8s-node-worker:~$ cat \/var\/run\/reboot-required.pkgs \u00a0  \nlibc6  \nlinux-image-6.5.0-1014-aws  \nlinux-base\n<\/pre><\/div>\n\n\n<p>All good: the <code>\/var\/run\/reboot-required<\/code> will trigger the whole process from Kured. Let&#8217;s be fast; things are about to get busy. What we should expect: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kured will drain the node and terminate the pods,<\/li>\n\n\n\n<li>Pods will be rescheduled on available nodes,<\/li>\n\n\n\n<li>The node will be rebooted,<\/li>\n\n\n\n<li>Kured will be restarted on the rebooted node,<\/li>\n\n\n\n<li>and node will be uncordoned.<\/li>\n<\/ul>\n\n\n\n<p>And all of this is taking place as you are staring at your screen \ud83d\ude42<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [3,6]; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ kubectl get pods -o wide &amp;&amp; kubectl get nodes -o wide\nNAME                          READY   STATUS        RESTARTS   AGE   IP          NODE              NOMINATED NODE   READINESS GATES\nhello-node-7b87cd5f68-lzlxk   1\/1     Terminating   0          27m   10.42.1.8   k8s-node-worker   &lt;none&gt;           &lt;none&gt;\nNAME              STATUS                     ROLES                       AGE   VERSION           INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION   CONTAINER-RUNTIME\nk8s-node-master   Ready                      control-plane,etcd,master   26d   v1.26.12+rke2r1   192.168.4.194   &lt;none&gt;        Ubuntu 22.04.3 LTS   6.2.0-1017-aws   containerd:\/\/1.7.11-k3s2\nk8s-node-worker   Ready,SchedulingDisabled   &lt;none&gt;                      26d   v1.26.12+rke2r1   192.168.7.16    &lt;none&gt;        Ubuntu 22.04.4 LTS   6.2.0-1017-aws   containerd:\/\/1.7.11-k3s2\n<\/pre><\/div>\n\n\n<p>Kured took notice of the file and initiated the process. Drain is ongoing, the pod is terminating.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [6]; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ kubectl get pods -o wide &amp;&amp; kubectl get nodes -o wide  \nNAME \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0READY \u00a0\u00a0STATUS \u00a0\u00a0\u00a0RESTARTS \u00a0\u00a0AGE \u00a0\u00a0IP \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0NODE \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0NOMINATED NODE \u00a0\u00a0READINESS GATES  \nhello-node-7b87cd5f68-7l9jk \u00a0\u00a01\/1 \u00a0\u00a0\u00a0\u00a0Running \u00a0\u00a00 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a025s \u00a0\u00a010.42.0.22 \u00a0\u00a0k8s-node-master \u00a0\u00a0&lt;none&gt; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;none&gt;  \nNAME \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0STATUS \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ROLES \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AGE \u00a0\u00a0VERSION \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0INTERNAL-IP \u00a0\u00a0\u00a0\u00a0EXTERNAL-IP \u00a0\u00a0OS-IMAGE \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0KERNEL-VERSION \u00a0\u00a0CONTAINER-RUNTIME  \nk8s-node-master \u00a0\u00a0Ready \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0control-plane,etcd,master \u00a0\u00a026d \u00a0\u00a0v1.26.12+rke2r1 \u00a0\u00a0192.168.4.194 \u00a0\u00a0&lt;none&gt; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Ubuntu 22.04.3 LTS \u00a0\u00a06.2.0-1017-aws \u00a0\u00a0containerd:\/\/1.7.11-k3s2  \nk8s-node-worker \u00a0\u00a0NotReady,SchedulingDisabled \u00a0\u00a0&lt;none&gt; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a026d \u00a0\u00a0v1.26.12+rke2r1 \u00a0\u00a0192.168.7.16 \u00a0\u00a0\u00a0&lt;none&gt; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Ubuntu 22.04.4 LTS \u00a0\u00a06.2.0-1017-aws \u00a0\u00a0containerd:\/\/1.7.11-k3s2\n<\/pre><\/div>\n\n\n<p>Now, the node is marked as NotReady by the control-plane, the reboot is ongoing. The pod has also been rescheduled on the control-plane node. Yes, it&#8217;s uncommon for a vanilla Kubernetes but on RKE2, by default, control-plane nodes can handle user workloads! Wait a bit of time for the worker to reboot and do our checks again.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [6]; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ kubectl get pods -o wide &amp;&amp; kubectl get nodes -o wide  \nNAME \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0READY \u00a0\u00a0STATUS \u00a0\u00a0\u00a0RESTARTS \u00a0\u00a0AGE \u00a0\u00a0\u00a0\u00a0IP \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0NODE \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0NOMINATED NODE \u00a0\u00a0READINESS GATES  \nhello-node-7b87cd5f68-7l9jk \u00a0\u00a01\/1 \u00a0\u00a0\u00a0\u00a0Running \u00a0\u00a00 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a04m14s \u00a0\u00a010.42.0.22 \u00a0\u00a0k8s-node-master \u00a0\u00a0&lt;none&gt; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;none&gt;  \nNAME \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0STATUS \u00a0\u00a0ROLES \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AGE \u00a0\u00a0VERSION \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0INTERNAL-IP \u00a0\u00a0\u00a0\u00a0EXTERNAL-IP \u00a0\u00a0OS-IMAGE \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0KERNEL-VERSION \u00a0\u00a0CONTAINER-RUNTIME  \nk8s-node-master \u00a0\u00a0Ready \u00a0\u00a0\u00a0control-plane,etcd,master \u00a0\u00a026d \u00a0\u00a0v1.26.12+rke2r1 \u00a0\u00a0192.168.4.194 \u00a0\u00a0&lt;none&gt; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Ubuntu 22.04.3 LTS \u00a0\u00a06.2.0-1017-aws \u00a0\u00a0containerd:\/\/1.7.11-k3s2  \nk8s-node-worker \u00a0\u00a0Ready \u00a0\u00a0\u00a0&lt;none&gt; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a026d \u00a0\u00a0v1.26.12+rke2r1 \u00a0\u00a0192.168.7.16 \u00a0\u00a0\u00a0&lt;none&gt; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Ubuntu 22.04.4 LTS \u00a0\u00a06.5.0-1014-aws \u00a0\u00a0containerd:\/\/1.7.11-k3s2\n<\/pre><\/div>\n\n\n<p>Nice! The node is back and properly uncordoned. We can check the logs from the pod of Kured, running on the newly rebooted node.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [3,21]; title: ; notranslate\" title=\"\">\nubuntu@k8s-node-master:~$ kubectl get pods -n kured -o wide\nNAME \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0READY \u00a0\u00a0STATUS \u00a0\u00a0\u00a0RESTARTS \u00a0\u00a0\u00a0\u00a0\u00a0AGE \u00a0\u00a0IP \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0NODE \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0NOMINATED NODE \u00a0\u00a0READINESS GATES\nkured-65l69 \u00a0\u00a01\/1 \u00a0\u00a0\u00a0\u00a0Running \u00a0\u00a01 (93s ago) \u00a0\u00a049m \u00a0\u00a010.42.1.10 \u00a0\u00a0k8s-node-worker \u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\nkured-6z7bf \u00a0\u00a01\/1 \u00a0\u00a0\u00a0\u00a0Running \u00a0\u00a00 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a049m \u00a0\u00a010.42.0.21 \u00a0\u00a0k8s-node-master \u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\nubuntu@k8s-node-master:~$ kubectl logs -n kured kured-65l69\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Binding node-id command flag to environment variable: KURED_NODE_ID&quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Kubernetes Reboot Daemon: 1.15.0&quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Node ID: k8s-node-worker&quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Lock Annotation: kured\/kured:weave.works\/kured-node-lock&quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Lock TTL not set, lock will remain until being released&quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Lock release delay not set, lock will be released immediately after rebooting&quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;PreferNoSchedule taint: &quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Blocking Pod Selectors: &#x5B;]&quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Reboot schedule: SunMonTueWedThuFriSat between 00:00 and 23:59 UTC&quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Reboot check command: &#x5B;test -f \/sentinel\/reboot-required] every 1m0s&quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Concurrency: 1&quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Reboot method: command&quot;\ntime=&quot;2024-03-04T10:52:27Z&quot; level=info msg=&quot;Reboot signal: 39&quot;\ntime=&quot;2024-03-04T10:53:42Z&quot; level=info msg=&quot;Holding lock&quot;\ntime=&quot;2024-03-04T10:53:42Z&quot; level=info msg=&quot;Uncordoning node k8s-node-worker&quot;\ntime=&quot;2024-03-04T10:53:42Z&quot; level=info msg=&quot;Releasing lock&quot;\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-a-few-words-to-conclude\">A few words to conclude<\/h2>\n\n\n\n<p>Kured isn&#8217;t a new product; the very first version that was officially released on GitHub was in 2017. Through a very simple example, we already see the potential for this tool, which could easily be integrated into our platforms. We certainly need to explore its behavior in large scale environments, but Kured seems to be well suited for such use cases! And that means fewer headaches for patching our nodes. I wish I&#8217;d found this tool sooner. Stay connected for further discovery with this tool!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In your DevOps and containerization journey, let&#8217;s discover together how a cloud-native product named Kured can save you from the patching fears of your Kubernetes platform.<\/p>\n","protected":false},"author":109,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1320],"tags":[2989,38,2990,2667,2634,3255,73,2576,3144],"type_dbi":[],"class_list":["post-30692","post","type-post","status-publish","format-standard","hentry","category-devops","tag-cloud-native","tag-cluster","tag-cncf","tag-devops-2","tag-kubernetes-2","tag-kured","tag-linux","tag-patching-2","tag-rke2"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Kured: No more patching anxiety for Kubernetes clusters - dbi Blog<\/title>\n<meta name=\"description\" content=\"In your DevOps and containerization journey, let&#039;s learn how Kured, a cloud-native product, can overcome Kubernetes platform patching fears.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kured: No more patching anxiety for Kubernetes clusters\" \/>\n<meta property=\"og:description\" content=\"In your DevOps and containerization journey, let&#039;s learn how Kured, a cloud-native product, can overcome Kubernetes platform patching fears.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-04T15:13:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-04T15:13:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/kured-300x292.png\" \/>\n<meta name=\"author\" content=\"DevOps\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DevOps\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/\"},\"author\":{\"name\":\"DevOps\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/4cd1b5f8a3de93f05a16ab8d7d2b7735\"},\"headline\":\"Kured: No more patching anxiety for Kubernetes clusters\",\"datePublished\":\"2024-03-04T15:13:49+00:00\",\"dateModified\":\"2024-03-04T15:13:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/\"},\"wordCount\":1101,\"commentCount\":5,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/03\\\/kured-300x292.png\",\"keywords\":[\"cloud-native\",\"Cluster\",\"cncf\",\"devops\",\"kubernetes\",\"kured\",\"Linux\",\"patching\",\"rke2\"],\"articleSection\":[\"DevOps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/\",\"name\":\"Kured: No more patching anxiety for Kubernetes clusters - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/03\\\/kured-300x292.png\",\"datePublished\":\"2024-03-04T15:13:49+00:00\",\"dateModified\":\"2024-03-04T15:13:51+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/4cd1b5f8a3de93f05a16ab8d7d2b7735\"},\"description\":\"In your DevOps and containerization journey, let's learn how Kured, a cloud-native product, can overcome Kubernetes platform patching fears.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/03\\\/kured.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2024\\\/03\\\/kured.png\",\"width\":1024,\"height\":996},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/kured-no-more-patching-anxiety-for-kubernetes-clusters\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kured: No more patching anxiety for Kubernetes clusters\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/4cd1b5f8a3de93f05a16ab8d7d2b7735\",\"name\":\"DevOps\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g\",\"caption\":\"DevOps\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/devops\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kured: No more patching anxiety for Kubernetes clusters - dbi Blog","description":"In your DevOps and containerization journey, let's learn how Kured, a cloud-native product, can overcome Kubernetes platform patching fears.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/","og_locale":"en_US","og_type":"article","og_title":"Kured: No more patching anxiety for Kubernetes clusters","og_description":"In your DevOps and containerization journey, let's learn how Kured, a cloud-native product, can overcome Kubernetes platform patching fears.","og_url":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/","og_site_name":"dbi Blog","article_published_time":"2024-03-04T15:13:49+00:00","article_modified_time":"2024-03-04T15:13:51+00:00","og_image":[{"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/kured-300x292.png","type":"","width":"","height":""}],"author":"DevOps","twitter_card":"summary_large_image","twitter_misc":{"Written by":"DevOps","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/"},"author":{"name":"DevOps","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4cd1b5f8a3de93f05a16ab8d7d2b7735"},"headline":"Kured: No more patching anxiety for Kubernetes clusters","datePublished":"2024-03-04T15:13:49+00:00","dateModified":"2024-03-04T15:13:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/"},"wordCount":1101,"commentCount":5,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/kured-300x292.png","keywords":["cloud-native","Cluster","cncf","devops","kubernetes","kured","Linux","patching","rke2"],"articleSection":["DevOps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/","url":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/","name":"Kured: No more patching anxiety for Kubernetes clusters - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/kured-300x292.png","datePublished":"2024-03-04T15:13:49+00:00","dateModified":"2024-03-04T15:13:51+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4cd1b5f8a3de93f05a16ab8d7d2b7735"},"description":"In your DevOps and containerization journey, let's learn how Kured, a cloud-native product, can overcome Kubernetes platform patching fears.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/kured.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/kured.png","width":1024,"height":996},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/kured-no-more-patching-anxiety-for-kubernetes-clusters\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kured: No more patching anxiety for Kubernetes clusters"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4cd1b5f8a3de93f05a16ab8d7d2b7735","name":"DevOps","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g","caption":"DevOps"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/devops\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/30692","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/109"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=30692"}],"version-history":[{"count":22,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/30692\/revisions"}],"predecessor-version":[{"id":31643,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/30692\/revisions\/31643"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=30692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=30692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=30692"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=30692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}