<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ohcnwiki.tellmey.fyi/index.php?action=history&amp;feed=atom&amp;title=TELEICU%2FDisaster_recovery_playbook</id>
	<title>TELEICU/Disaster recovery playbook - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://ohcnwiki.tellmey.fyi/index.php?action=history&amp;feed=atom&amp;title=TELEICU%2FDisaster_recovery_playbook"/>
	<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=TELEICU/Disaster_recovery_playbook&amp;action=history"/>
	<updated>2026-07-06T07:15:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.4</generator>
	<entry>
		<id>https://ohcnwiki.tellmey.fyi/index.php?title=TELEICU/Disaster_recovery_playbook&amp;diff=302&amp;oldid=prev</id>
		<title>Admin: Automated edit (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=TELEICU/Disaster_recovery_playbook&amp;diff=302&amp;oldid=prev"/>
		<updated>2026-07-06T03:10:57Z</updated>

		<summary type="html">&lt;p&gt;Automated edit (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:40, 6 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 78:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 78:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Key advantage of NixOS: every node has the previous generation in its Nix store. Rollback does not depend on network access.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Key advantage of NixOS: every node has the previous generation in its Nix store. Rollback does not depend on network access.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Navbox TELEICU}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Related}}&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Related}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:1.41:old-269:rev-302:wikidiff2=table:1.14.2:bc2a06be --&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ohcnwiki.tellmey.fyi/index.php?title=TELEICU/Disaster_recovery_playbook&amp;diff=269&amp;oldid=prev</id>
		<title>Admin: Create TELEICU disaster recovery playbook (via create-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=TELEICU/Disaster_recovery_playbook&amp;diff=269&amp;oldid=prev"/>
		<updated>2026-07-06T02:56:22Z</updated>

		<summary type="html">&lt;p&gt;Create TELEICU disaster recovery playbook (via create-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Doc header&lt;br /&gt;
|type=playbook&lt;br /&gt;
|domain=teleicu&lt;br /&gt;
|title=Disaster recovery playbook&lt;br /&gt;
|order=25&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Full recovery procedure for a major disaster affecting a region or the entire fleet.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
&lt;br /&gt;
This playbook covers:&lt;br /&gt;
&lt;br /&gt;
* Regional disaster (e.g., natural disaster taking out all sites in one state)&lt;br /&gt;
* Control plane failure (all 3 CP VMs lost)&lt;br /&gt;
* Fleet-wide configuration corruption&lt;br /&gt;
&lt;br /&gt;
== Scenario 1: Regional outage ==&lt;br /&gt;
&lt;br /&gt;
All sites in one state are offline simultaneously.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
* VictoriaMetrics shows all nodes in the state as offline&lt;br /&gt;
* Incident management system triggers P1 for the region&lt;br /&gt;
* Hub admin for that state is contacted&lt;br /&gt;
&lt;br /&gt;
=== Response ===&lt;br /&gt;
&lt;br /&gt;
# Confirm scope — is it just that state or wider?&lt;br /&gt;
# Contact regional ISP/power authority for status&lt;br /&gt;
# For each site: follow [[TELEICU/Spoke unreachable runbook|Spoke unreachable runbook]]&lt;br /&gt;
# After recovery, verify all nodes rejoin the cluster&lt;br /&gt;
# Update TeleicuSites with current status&lt;br /&gt;
&lt;br /&gt;
== Scenario 2: Full control plane loss ==&lt;br /&gt;
&lt;br /&gt;
All 3 CP VMs are destroyed.&lt;br /&gt;
&lt;br /&gt;
=== Impact ===&lt;br /&gt;
&lt;br /&gt;
* K3s API server is down — no new deployments or pod scheduling&lt;br /&gt;
* Existing agent nodes continue running existing workloads&lt;br /&gt;
* No metrics or monitoring updates&lt;br /&gt;
&lt;br /&gt;
=== Recovery ===&lt;br /&gt;
&lt;br /&gt;
# Provision new CP VMs in cloud (same or different region)&lt;br /&gt;
# Restore etcd from the latest backup ([[TELEICU/Backup &amp;amp; restore|Backup &amp;amp; restore]])&lt;br /&gt;
# Start K3s server on restored etcd&lt;br /&gt;
# Agents re-register as they come online (Tailscale mesh brings them back)&lt;br /&gt;
# Verify full cluster health&lt;br /&gt;
# Restore monitoring stack (VictoriaMetrics + Grafana from backup)&lt;br /&gt;
&lt;br /&gt;
=== Prevention ===&lt;br /&gt;
&lt;br /&gt;
* etcd backups to S3 in a separate geography&lt;br /&gt;
* CP VMs in different availability zones if possible&lt;br /&gt;
* Document CP provisioning in Infrastructure as Code (Terraform/OpenTofu)&lt;br /&gt;
&lt;br /&gt;
== Scenario 3: Fleet-wide config corruption ==&lt;br /&gt;
&lt;br /&gt;
A bad configuration is applied across all nodes.&lt;br /&gt;
&lt;br /&gt;
=== Ansible path ===&lt;br /&gt;
&lt;br /&gt;
# Halt ansible-pull to prevent further convergence (disable cron/timer)&lt;br /&gt;
# Revert the offending commit in the git repo&lt;br /&gt;
# Carefully push the revert (may need per-wave rollout if the corruption is severe)&lt;br /&gt;
# For nodes that are broken: follow [[TELEICU/Node recovery runbook|Node recovery runbook]]&lt;br /&gt;
&lt;br /&gt;
=== NixOS path ===&lt;br /&gt;
&lt;br /&gt;
# Each node can be rolled back individually: &amp;lt;code&amp;gt;nixos-rebuild switch --rollback&amp;lt;/code&amp;gt;&lt;br /&gt;
# Or at boot: select a previous generation&lt;br /&gt;
# Fix the flake and push a corrected generation&lt;br /&gt;
# comin will apply the fix on next poll&lt;br /&gt;
&lt;br /&gt;
Key advantage of NixOS: every node has the previous generation in its Nix store. Rollback does not depend on network access.&lt;br /&gt;
&lt;br /&gt;
{{Related}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>