<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Victor Estival</title>
    <description>The latest articles on DEV Community by Victor Estival (@vestival).</description>
    <link>https://dev.to/vestival</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F769302%2F29df9f4d-a5fd-439e-aa03-7d84408484d2.jpeg</url>
      <title>DEV Community: Victor Estival</title>
      <link>https://dev.to/vestival</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vestival"/>
    <language>en</language>
    <item>
      <title>Back up Rancher before you upgrade: three ways the backup step failed in my 2.15.2 lab</title>
      <dc:creator>Victor Estival</dc:creator>
      <pubDate>Thu, 05 Nov 2026 05:48:43 +0000</pubDate>
      <link>https://dev.to/vestival/back-up-rancher-before-you-upgrade-three-ways-the-backup-step-failed-in-my-2152-lab-5hih</link>
      <guid>https://dev.to/vestival/back-up-rancher-before-you-upgrade-three-ways-the-backup-step-failed-in-my-2152-lab-5hih</guid>
      <description>&lt;p&gt;Every Rancher upgrade guide starts with "take a backup first". I ran that step in a lab in late October on Rancher 2.15.2 (biased, I work at SUSE) and it failed three different ways before it worked. Writing them down because none of them fails loudly.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The ResourceSet name. The Backup example I copied uses resourceSetName: rancher-resource-set. On my install that returned: resourcesets.resources.cattle.io "rancher-resource-set" not found. The operator ships two, rancher-resource-set-basic and rancher-resource-set-full. Run kubectl get resourcesets before you write the CR.&lt;/li&gt;
&lt;li&gt;No storage, no backup. With no S3 details and no default storage location, the Backup sits in Retrying with "needs to specify S3 details, or configure storage location at the operator level". It doesn't go to Failed, so a quick look at the list can miss it.&lt;/li&gt;
&lt;li&gt;The PVC needs a StorageClass. Installing rancher-backup with persistence.enabled=true alone left the PVC Pending on a cluster with no default StorageClass. Setting persistence.storageClass explicitly (local-path in my case) fixed it.
With the right name and a volume, the backup reached Completed in under a minute.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Two more that are easy to skip:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you encrypt backups, the operator doesn't keep your EncryptionConfiguration. You need that same file to restore, so store it somewhere that isn't the cluster.&lt;/li&gt;
&lt;li&gt;Each Rancher chart declares a kubeVersion ceiling. helm show chart rancher-stable/rancher --version 2.13.3 | grep kubeVersion prints &amp;lt; 1.35.0-0. If the local cluster's Kubernetes moved ahead of Rancher, check this before the Helm upgrade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I didn't test: a restore, and a real minor-version jump (the lab already runs the latest release). If you've restored a Rancher backup for real, what surprised you?&lt;br&gt;
&lt;em&gt;First posted on &lt;a href="https://www.reddit.com/r/rancher/s/dOurPpuGMq" rel="noopener noreferrer"&gt;r/rancher&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>rancher</category>
      <category>devops</category>
      <category>backup</category>
    </item>
    <item>
      <title>Scaling prod by hand during an incident, when Fleet manages it: three ways it goes, measured</title>
      <dc:creator>Victor Estival</dc:creator>
      <pubDate>Wed, 14 Oct 2026 11:54:30 +0000</pubDate>
      <link>https://dev.to/vestival/scaling-prod-by-hand-during-an-incident-when-fleet-manages-it-three-ways-it-goes-measured-3chb</link>
      <guid>https://dev.to/vestival/scaling-prod-by-hand-during-an-incident-when-fleet-manages-it-three-ways-it-goes-measured-3chb</guid>
      <description>&lt;p&gt;Every GitOps setup meets the same moment: something is on fire, someone runs kubectl scale on prod, and the fix works. What happens next depends on two settings most people never look at.&lt;/p&gt;

&lt;p&gt;I ran all three cases in a lab on Rancher 2.15.1 with Fleet (biased, I work at SUSE): three EKS clusters, one app from Git.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Self-healing on (correctDrift)
&lt;/h2&gt;

&lt;p&gt;I scaled a Deployment from 3 to 1. Fleet put it back to 3 in under 7 seconds. The GitRepo flickered NotReady for about 3 seconds, so nobody watching the UI would ever see the drift. Great for drift, useless during an incident: your fix is gone before you can check whether it worked.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Self-healing on, cluster paused
&lt;/h2&gt;

&lt;p&gt;Continuous Delivery, Clusters, three-dot menu, Pause. I scaled to 5 and it held. But while the cluster was paused, the GitRepo read Ready, 2/2, no Modified state at all. The app looked healthy in the UI while one cluster ran something Git did not say. When I unpaused, the 5 went back to 3 within about 10 seconds. The fix lasted exactly as long as the pause.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Self-healing off
&lt;/h2&gt;

&lt;p&gt;The manual scale stays, and Fleet reports it precisely: the Ready condition names the resource and the value Git wants. That part is good.&lt;/p&gt;

&lt;p&gt;The surprise came with the next commit. I promoted a new chart version to prod and the upgrade failed. The manual scale had taken field ownership of spec.replicas (field manager "Mozilla", because it came from the browser, kubectl from a terminal), and server-side apply refused to hand it back. The UI showed WaitApplied. The actual conflict text was only in the failed Helm release on the cluster. Scaling back to the value in Git unblocked it, and the promotion landed about 40 seconds later.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd take from it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pause is a working break-glass. Use it, and keep in mind that while a cluster is paused, Continuous Delivery tells you nothing about it.&lt;/li&gt;
&lt;li&gt;Put the fix in Git before you unpause, or you lose it.&lt;/li&gt;
&lt;li&gt;With self-healing off, an emergency change that never makes it back to Git blocks your next deploy. If a promotion sits in WaitApplied after an incident, look for a field someone changed by hand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a lab finding, not official guidance. First posted on r/rancher: &lt;a href="https://www.reddit.com/r/rancher/comments/1x0no93/scaling_prod_by_hand_during_an_incident_when/" rel="noopener noreferrer"&gt;https://www.reddit.com/r/rancher/comments/1x0no93/scaling_prod_by_hand_during_an_incident_when/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>gitops</category>
    </item>
  </channel>
</rss>
