You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 1b217d3
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: _TODO.md
+4-31Lines changed: 4 additions & 31 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -181,13 +181,7 @@ Need a tooltip component for consistency. List to add tooltips to:
181
181
182
182
## Downloads / Gated Content
183
183
184
-
- We need a gating system, where the user gets a token to be able to download a PDF and the token is checked before downloading. If a reader has already given their email address - newsletter signup, contact form, download registration, then the download CTA on short form articles should go directly to the HTML version of the deep dive, and it should have a PDF download button.
185
-
186
-
- Make `/deep-dive/` SSR loaded so we can check if they've given their e-mail address.
187
-
188
-
- If they haven't and they get to the path from sharing a link or something, we should use the `index.astro` file in that directory to explain that they've accessed gated content, and ask for their e-mail address. Then redirect to the content they want when they give it.
189
-
190
-
- If they've given their email link, the content switcher button to switch should be enabled.
184
+
- We need a gating system, where the user gets a token to be able to download a PDF and the token is checked before downloading. If a reader has already given their email address - newsletter signup, contact form, download registration, then the download CTA on short form articles should show the PDF download button instead of trying to collect email addresses again.
191
185
192
186
- We had this copyright statement for articles, it should be in the front matter of PDFs:
193
187
@@ -197,8 +191,6 @@ The text, diagrams, and images in this work are licensed under CC BY-NC 4.0
197
191
All code samples in this article are licensed under the MIT License. Feel free to use, modify, and distribute them in any project.
198
192
```
199
193
200
-
- When someone's already given their email address, the Download CTA should just have a download button - not require them to sign up again
201
-
202
194
## Search
203
195
204
196
- How do we handle the keywords in the long form / pdf files from a search perspective? Can we return the result in the search results if the short form content is not returned in the search results, and highlight it somehow in the search results to show that it is gated content? And clicking on its link takes the user to the Download page for that item?
- "### Geographic/Currency Mismatches" in deep-dive/cdn-edge-caching-cache-keys-vary-headers has a table -> callout -> table back to back
260
-
261
243
- Need an article on OpenStack
262
244
263
245
- Add a Social Share on some compelling text in each article
264
246
265
247
- Home page reorganization: move the "What I Deliver" box from the Hero into the Backstage image. Move the Backstage image / video to the hero.
266
248
267
-
- Determine if any of the python code blocks should have `#!/bin/python` added
268
-
269
-
- Need a Q & A format to use in `blameless-postmortem-incident-analysis-systemic-causes`. Might be one of the list formats.
270
-
271
249
- We need to check for short form and deep article articles where the deep-dive index.pdf has a non-featured tag like "argo-cd" only in the pdf.mdx. In those cases, we should make sure the callout for the deep dive includes the name of that non-featured (technology) tag
272
250
273
251
- deep-dive/kubernetes-pod-resource-requests-limits-qos-classes is showing the Download hero image
*[etcd]: Distributed key-value store used by Kubernetes
16
+
*[K8s]: Kubernetes
18
17
19
-
I watched a company avoid Kubernetes upgrades for 18 months. When they finally __had__ to upgrade for security compliance, they faced a five-version jump. Deprecated APIs were everywhere. Custom controllers broke. Workloads failed in ways nobody expected. What should have been four routine 2-hour maintenance windows became a three-week crisis involving weekend war rooms and executive escalations.
18
+
I watched a company avoid Kubernetes upgrades for 18 months. When they finally _had_ to upgrade for security compliance, they faced a five-version jump. Deprecated APIs were everywhere. Custom controllers broke. Workloads failed in ways nobody expected. What should have been four routine 2-hour maintenance windows became a three-week crisis involving weekend war rooms and executive escalations.
20
19
21
-
The lesson is counterintuitive but consistent: frequent, incremental upgrades are __less__ risky than infrequent large jumps. Kubernetes releases new versions roughly every four months, so each version you skip accumulates deprecated APIs, changed behaviors, and incompatible add-ons. A cluster three or more versions behind isn't technical debt - it's an emergency waiting to happen. The goal of this playbook is to make upgrades boring: predictable procedures that happen quarterly without drama.
20
+
The lesson is counterintuitive but consistent: frequent, incremental upgrades are _less_ risky than infrequent large jumps. Kubernetes releases new versions roughly every four months, so each version you skip accumulates deprecated APIs, changed behaviors, and incompatible add-ons. <Highlighter>A cluster three or more versions behind isn't technical debt - it's an emergency waiting to happen.</Highlighter> The goal of this playbook is to make upgrades boring: predictable procedures that happen quarterly without drama.
22
21
23
22
## The Pre-Upgrade Checklist
24
23
25
24
Most upgrade failures trace back to skipped preparation. Before touching the cluster, work through four categories of readiness checks.
26
25
27
26
<List
28
-
variant="check-icons-list"
27
+
variant="zebra-list"
29
28
items={[
30
29
{
31
30
lead: "Timing and planning",
32
-
text: "comes first. Review the release notes for your target version - not just the highlights, but the deprecations and breaking changes. Kubernetes only supports upgrading one minor version at a time (1.28 to 1.29 is fine, 1.28 to 1.30 isn't), so verify your upgrade path. Schedule a maintenance window with buffer time.",
31
+
text: "Comes first. Review the release notes for your target version - not just the highlights, but the deprecations and breaking changes. Kubernetes only supports upgrading one minor version at a time (1.28 to 1.29 is fine, 1.28 to 1.30 isn't), so verify your upgrade path. Schedule a maintenance window with buffer time.",
33
32
},
34
33
{
35
34
lead: "Cluster health",
36
-
text: "establishes your baseline. All nodes should show Ready status. There shouldn't be unexpected pending pods. Control plane components and etcd should be healthy. Resource utilization should be below 70% - upgrades temporarily reduce capacity as nodes drain and restart.",
35
+
text: "Establishes your baseline. All nodes should show Ready status. There shouldn't be unexpected pending pods. Control plane components and etcd should be healthy. Resource utilization should be below 70% - upgrades temporarily reduce capacity as nodes drain and restart.",
37
36
},
38
37
{
39
38
lead: "Backup and recovery",
40
-
text: "is your safety net. Take an etcd snapshot before starting. Document current cluster state. Most importantly, document and test your rollback procedure in a non-production environment before you need it.",
39
+
text: "These are your safety net. Take an etcd snapshot before starting. Document current cluster state. Most importantly, document and test your rollback procedure in a non-production environment before you need it.",
41
40
},
42
41
{
43
42
lead: "Compatibility verification",
44
-
text: "catches the issues that break workloads. Check that your add-ons - CNI plugin, CSI drivers, ingress controller, cert-manager, monitoring stack - are compatible with the target version. Validate workload manifests for deprecated APIs.",
43
+
text: "Catches the issues that break workloads. Check that your add-ons - CNI plugin, CSI drivers, ingress controller, cert-manager, monitoring stack - are compatible with the target version. Validate workload manifests for deprecated APIs.",
45
44
},
46
45
]}
47
46
/>
48
47
49
48
<Table
50
-
variant="vertical-column-delineation-table"
49
+
variant="grid-and-accent-header-table"
50
+
fullWidth={false}
51
51
content={{
52
52
figure: "Pre-upgrade checklist summary.",
53
53
thead: {
@@ -110,7 +110,10 @@ Kubernetes components have strict version compatibility requirements. The API se
110
110
This is by design. Kubernetes explicitly allows version skew during upgrades. If you're upgrading from 1.28 to 1.29, you'll temporarily have 1.29 API servers serving requests alongside 1.28 kubelets - and that's fine.
111
111
112
112
<List
113
-
variant="check-icons-list"
113
+
variant="timeline-list"
114
+
classes={{
115
+
wrapper: "sm:ml-6 sm:mr-12 mb-6",
116
+
}}
114
117
items={[
115
118
{
116
119
lead: "Phase 1: Preparation (30 minutes).",
@@ -136,7 +139,8 @@ This is by design. Kubernetes explicitly allows version skew during upgrades. If
136
139
/>
137
140
138
141
<Table
139
-
variant="vertical-column-delineation-table"
142
+
variant="criteria-highlight-table"
143
+
fullWidth={false}
140
144
content={{
141
145
figure: "Upgrade phases with risk assessment.",
142
146
thead: {
@@ -207,19 +211,22 @@ __Control plane rollback__ is the nuclear option. For self-managed clusters, rol
207
211
Managed Kubernetes rollback options are limited:
208
212
209
213
<List
210
-
variant="check-icons-list"
214
+
variant="side-by-side-list"
215
+
classes={{
216
+
wrapper: "sm:mr-18 mb-6",
217
+
}}
211
218
items={[
212
219
{
213
220
lead: "EKS",
214
-
text: "doesn't support control plane downgrades - your options are restoring from Terraform state or creating a new cluster",
221
+
text: "Doesn't support control plane downgrades - your options are restoring from Terraform state or creating a new cluster",
215
222
},
216
223
{
217
224
lead: "GKE",
218
-
text: "supports rollback within the maintenance window",
225
+
text: "Supports rollback within the maintenance window",
219
226
},
220
227
{
221
228
lead: "AKS",
222
-
text: "doesn't support downgrades either",
229
+
text: "Doesn't support downgrades either",
223
230
},
224
231
]}
225
232
/>
@@ -229,7 +236,8 @@ If you're on managed Kubernetes, test what "rollback" actually means for your pr
229
236
__Worker node rollback__ is much simpler. If a node is misbehaving after upgrade, you can downgrade its kubelet without affecting the rest of the cluster: cordon, drain, downgrade, uncordon. Some teams use a blue-green node pool strategy - creating new nodes at the target version, then draining old nodes. With this approach, rollback is trivial: uncordon the old pool and delete the new one.
0 commit comments