Skip to content

fix: update liveness probe to avoid clash - #9412

Closed
Tim Wright (timmy-wright) wants to merge 8 commits into
mainfrom
timmy/liveness-is-deadness
Closed

Tim Wright (timmy-wright) wants to merge 8 commits into
mainfrom
timmy/liveness-is-deadness

Conversation

@timmy-wright

@timmy-wright Tim Wright (timmy-wright) commented Sep 7, 2026 •

Copy link
Copy Markdown
Contributor

Mutable Windows variants of the CSI livenessprobe and node-driver-registrar images currently resolve to revisions with an incompatible Windows base-layer archive layout. This causes Windows VHD builds to fail while containerd processes the base layer.

What this PR does / why we need it:

  • Pins Windows livenessprobe:v2.19.0 to v2.19.0-5.
  • Pins Windows livenessprobe:v2.18.0 to v2.18.0-10.
  • Pins Windows csi-node-driver-registrar:v2.17.0 to v2.17.0-5.
  • Pins Windows csi-node-driver-registrar:v2.16.0 to v2.16.0-10.
  • Adds additionalTagsToApplyToContainer to Windows component versions so a pulled image can be cached under explicitly configured aliases.
  • Tags each pinned CSI image with its normal version in containerd's k8s.io namespace after the build-specific image is pulled.
  • Leaves Linux/multi-architecture image versions and all other Windows container images unchanged.

The build-specific revisions remain the only images pulled from the registry. The additional tags point to those already-cached images:

Image Pulled tag Additional cached tag
livenessprobe v2.18.0-10 v2.18.0
livenessprobe v2.19.0-5 v2.19.0
csi-node-driver-registrar v2.16.0-10 v2.16.0
csi-node-driver-registrar v2.17.0-5 v2.17.0

This allows pods referencing the normal tag to use the known-good image cached in the VHD instead of downloading the broken mutable revision when local image reuse is permitted. Alias creation uses the existing Windows image selection, SKU filtering, and retry behavior. Additional tags are opt-in and are only applied to the latestVersion entry that declares them.

The mutable tags currently resolve as follows:

Image Mutable tag Current revision Pinned revision
livenessprobe v2.18.0 v2.18.0-11 v2.18.0-10
livenessprobe v2.19.0 v2.19.0-6 v2.19.0-5
csi-node-driver-registrar v2.16.0 v2.16.0-11 v2.16.0-10
csi-node-driver-registrar v2.17.0 v2.17.0-6 v2.17.0-5

All affected revisions share the same malformed Windows root layers for each Windows version. Unlike the previous revisions, the affected root archives place the operating-system directories directly at the archive root:

Affected revisions:
  Windows/
  ProgramData/
  Users/
  License.txt

Pinned revisions:
  Files/
    Windows/
    ProgramData/
    Users/
  UtilityVM/

Containerd imports Windows layers through ociwclayer.ImportLayerFromTar. The importer preserves the tar entry names and, for a parentless layer, calls hcsshim::ProcessBaseLayer. Because the affected archives do not create the required Files/ directory, base-layer processing fails with ERROR_PATH_NOT_FOUND. The missing UtilityVM/ payload is another consequence of the repackaging, but it is not the cause of this extraction failure.

The failing Windows VHD build reproduced the livenessprobe failure on two containerd versions:

Windows build containerd Failing base-layer DiffID
Windows Server 2022 1.6.35-azure.1 sha256:66545f5a12285a70850304d489f0c3065552f68bcdc3199a7c74bab49d60f44c
Windows Server 2025 2.0.4-azure.1 sha256:b3a59411a9182db2a9656bce00537904c2f1b7d71cbc9782f5155263f1b6336c
failed to pull and unpack image:
failed to extract layer:
hcsshim::ProcessBaseLayer ... The system cannot find the path specified

Retries failed against new snapshot directories with the same base-layer DiffID, confirming this was not a transient download or snapshot failure. The Windows Server 2019 variants have the same incompatible archive structure and are also affected, although that platform was not exercised by the cited build.

The node-driver-registrar mutable tags use the exact same malformed root-layer digests as the affected livenessprobe revisions:

Windows base Malformed compressed root digest
LTSC 2019 sha256:06aaa22f843ee9448c25ab50b08937c2754b1d50591e94f898df0fef9da96c2b
LTSC 2022 sha256:a20336801d45e01082ccf9e7a799da2901e008ffc51d7e170f685c8102ea2bfc
LTSC 2025 sha256:4ec983932fc2c7e85f176f52ab1926d588a4323a2c808e9cc1b61c9add15eaaf

The publishing regression was caused by the DALEC frontend applying build-time source filtering to Windows base images. Re-materializing a Windows base through llb.Scratch() loses the special Windows layer semantics and produces the flattened archive. The upstream fix is project-dalec/dalec#1228, with the v0.22 backport in project-dalec/dalec#1229 and release v0.22.1.

This PR is a tactical mitigation for Windows VHD builds until the affected CSI images are republished with the fixed DALEC frontend.

Which issue(s) this PR fixes:

None.

Copilot AI balanced review requested due to automatic review settings September 7, 2026 23:28
@github-actions github-actions Bot added the components This pull request updates cached components on Linux or Windows VHDs label Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026 •

Copy link
Copy Markdown
Contributor

Windows Unit Test Results

  3 files   14 suites   52s ⏱️
425 tests 425 ✅ 0 💤 0 ❌
428 runs  428 ✅ 0 💤 0 ❌

Results for commit 99d7a8d.

♻️ This comment has been updated with latest results.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Cross-platform VHD build checks are still running, and the Windows cache change requires domain-owner validation.

Pull request overview

Updates cached CSI livenessprobe images to replace the Windows-breaking v2.19.0 image.

Changes:

  • Advances the primary image to v2.20.0.
  • Replaces v2.18.0 with the MCR-specific v2.19.0-6 tag.
  • Applies both updates consistently across Linux multi-arch and Windows VHDs.
File summaries
File Description
parts/common/components.json Updates cached livenessprobe image versions for Linux and Windows VHD builds.
Review details
  • Files reviewed: 1/1 changed files
  • Comments generated: 0
  • Review effort level: Balanced

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@janenotjung-hue janenotjung-hue left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copilot AI review requested due to automatic review settings September 7, 2026 23:47

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Windows SIG review and successful completion of the active Linux and Windows VHD builds are needed before approval.

Review details
  • Files reviewed: 1/1 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

Copilot AI review requested due to automatic review settings September 8, 2026 00:23

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The resulting component lists do not include the stated v2.20.0 update or retain v2.19.0 in the intended previous-version slots.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details
  • Files reviewed: 1/1 changed files
  • Comments generated: 1
  • Review effort level: Balanced

Comment thread parts/common/components.json Outdated
Copilot AI review requested due to automatic review settings September 8, 2026 00:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The narrowly scoped pins address the documented Windows VHD extraction regression without affecting Linux images.

Review details
  • Files reviewed: 1/1 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

Copilot AI review requested due to automatic review settings September 8, 2026 02:27

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The active Renovate entries can re-propose the malformed image revisions that this mitigation avoids.

Review details

Suppressed comments (2)

Previously missed (1) — in code that hasn't changed since the last review.

parts/common/components.json:634

  • 🟡 Medium Risk — 📦 Package Update: These are safety pins, but their registry renovateTags remain active. The custom manager in .github/renovate.json:742-755 will parse these entries, and the oss/v2/** versioning rule at lines 39-44 treats the numeric suffix as an updateable revision, so Renovate can immediately propose the known-bad -6/-11 tags. Disable Renovate for these Windows-only pins until fixed images are published and validated.

This issue also appears on line 654 of the same file.

parts/common/components.json:658

  • 🟡 Medium Risk — 📦 Package Update: These pins are still managed by Renovate. With the repository's suffix-aware oss/v2/** rule, Renovate can propose v2.17.0-6 and v2.16.0-11, which this PR identifies as malformed, reintroducing the Windows VHD build failure if that update is accepted. Use the repository's <DO_NOT_UPDATE> marker until validated republished revisions are available.
          "latestVersion": "v2.17.0-5"
        },
        {
          "renovateTag": "registry=https://mcr.microsoft.com, name=oss/v2/kubernetes-csi/csi-node-driver-registrar",
          "latestVersion": "v2.16.0-10"
  • Files reviewed: 1/1 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Automatic suffix stripping creates unintended aliases for unrelated cached Windows images.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details
  • Files reviewed: 5/5 changed files
  • Comments generated: 1
  • Review effort level: Balanced

Comment thread vhdbuilder/packer/windows/components_json_helpers.ps1 Outdated
Copilot AI review requested due to automatic review settings September 8, 2026 05:41

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Renovate remains enabled for all four tactical pins and can restore the known-malformed revisions.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Suppressed comments (3)

parts/common/components.json:635

  • 🟡 Medium Risk — 📦 Package Update: This pin remains Renovate-managed, so the custom container-image manager can advance v2.18.0-10 to the known-bad v2.18.0-11 and reintroduce the VHD build failure. Mark this entry as not updatable for the mitigation window, and restore its registry metadata after a corrected image is republished.
          "latestVersion": "v2.18.0-10",

parts/common/components.json:656

  • 🟡 Medium Risk — 📦 Package Update: The active Renovate metadata allows this safe registrar pin to be advanced to the known-malformed v2.17.0-6 revision. That would undo the mitigation and make Windows VHD builds fail again; disable Renovate for this entry until the fixed republish is available.
          "latestVersion": "v2.17.0-5",

parts/common/components.json:661

  • 🟡 Medium Risk — 📦 Package Update: Keeping this entry under Renovate permits the next registrar revision (v2.16.0-11), which the PR identifies as carrying the same malformed Windows base layers. Disable automated updates for the tactical pin and re-enable them only after the corrected image is published.
          "latestVersion": "v2.16.0-10",
  • Files reviewed: 6/6 changed files
  • Comments generated: 1
  • Review effort level: Balanced

Comment thread parts/common/components.json
Copilot AI review requested due to automatic review settings September 8, 2026 21:36
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Changes cached containers or packages on windows VHDs

Please get a Windows SIG member to approve.

The following dif file shows any additions or deletions from what will be cached on windows VHDs organised by VHD type.

  • Additions are new things cached.
  • Deletions are things no longer cached.
diff --git a/vhd_files/2022-containerd-gen2.txt b/vhd_files/2022-containerd-gen2.txt
index 4e05767..93a9759 100644
--- a/vhd_files/2022-containerd-gen2.txt
+++ b/vhd_files/2022-containerd-gen2.txt
@@ -122,0 +123 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.16.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.16.0-10
@@ -123,0 +125 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.17.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.17.0-5
@@ -124,0 +127 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.18.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.18.0-10
@@ -125,0 +129 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.19.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.19.0-5
diff --git a/vhd_files/2022-containerd.txt b/vhd_files/2022-containerd.txt
index a8c76d7..360d4fc 100644
--- a/vhd_files/2022-containerd.txt
+++ b/vhd_files/2022-containerd.txt
@@ -122,0 +123 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.16.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.16.0-10
@@ -123,0 +125 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.17.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.17.0-5
@@ -124,0 +127 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.18.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.18.0-10
@@ -125,0 +129 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.19.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.19.0-5
diff --git a/vhd_files/2025-gen2-tl.txt b/vhd_files/2025-gen2-tl.txt
index e49ede0..ded7b62 100644
--- a/vhd_files/2025-gen2-tl.txt
+++ b/vhd_files/2025-gen2-tl.txt
@@ -53,0 +54 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.16.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.16.0-10
@@ -54,0 +56 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.17.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.17.0-5
@@ -55,0 +58 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.18.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.18.0-10
@@ -56,0 +60 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.19.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.19.0-5
diff --git a/vhd_files/2025-gen2.txt b/vhd_files/2025-gen2.txt
index eec1d89..4a097fe 100644
--- a/vhd_files/2025-gen2.txt
+++ b/vhd_files/2025-gen2.txt
@@ -53,0 +54 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.16.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.16.0-10
@@ -54,0 +56 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.17.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.17.0-5
@@ -55,0 +58 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.18.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.18.0-10
@@ -56,0 +60 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.19.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.19.0-5
diff --git a/vhd_files/2025.txt b/vhd_files/2025.txt
index 5997647..d01c375 100644
--- a/vhd_files/2025.txt
+++ b/vhd_files/2025.txt
@@ -53,0 +54 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.16.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.16.0-10
@@ -54,0 +56 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.17.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/csi-node-driver-registrar:v2.17.0-5
@@ -55,0 +58 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.18.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.18.0-10
@@ -56,0 +60 @@ mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.19.0
+mcr.microsoft.com/oss/v2/kubernetes-csi/livenessprobe:v2.19.0-5

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The four tactical pins must opt out of Renovate to prevent automated updates from invalidating their fixed aliases.

Review details

Suppressed comments (4)

Previously missed (1) — in code that hasn't changed since the last review.

parts/common/components.json:636

  • 🔴 High Risk — 📦 Package Update: This known-good revision is still monitored by Renovate, so a later automated update can change the source while leaving the v2.18.0 alias unchanged, defeating the mitigation. Mark the pinned entry <DO_NOT_UPDATE> per parts/linux/cloud-init/artifacts/README-COMPONENTS.md:171-172.

This issue also appears in the following locations of the same file:

  • line 656
  • line 661

parts/common/components.json:631

  • 🔴 High Risk — 📦 Package Update: This is intended to be a known-good pin, but its recognized registry renovateTag leaves it eligible for automated replacement while the alias remains v2.19.0. That can silently point the normal tag at a different build revision and reintroduce the malformed-layer failure. Use <DO_NOT_UPDATE> as prescribed for pinned versions in parts/linux/cloud-init/artifacts/README-COMPONENTS.md:171-172.
          "latestVersion": "v2.19.0-5",
          "additionalTagsToApplyToContainer": ["v2.19.0"]

parts/common/components.json:657

  • 🔴 High Risk — 📦 Package Update: Keeping the recognized registry renovateTag makes this tactical pin eligible for automated replacement even though the alias remains v2.17.0. A future update could therefore cache an unverified revision under the normal tag; use <DO_NOT_UPDATE> as documented in parts/linux/cloud-init/artifacts/README-COMPONENTS.md:171-172.
          "latestVersion": "v2.17.0-5",
          "additionalTagsToApplyToContainer": ["v2.17.0"]

parts/common/components.json:662

  • 🔴 High Risk — 📦 Package Update: This pinned registrar revision remains Renovate-managed, allowing automation to replace its source independently of the fixed v2.16.0 alias and undo the known-good mapping. Set renovateTag to <DO_NOT_UPDATE> per parts/linux/cloud-init/artifacts/README-COMPONENTS.md:171-172.
          "latestVersion": "v2.16.0-10",
          "additionalTagsToApplyToContainer": ["v2.16.0"]
  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@aks-node-assistant

Copy link
Copy Markdown
Contributor

AgentBaker Linux gate detective

Run: https://msazure.visualstudio.com/CloudNativeCompute/_build/results?buildId=180205822
Failed job/stage/task: RunAgentBakerE2E / Test_AzureLinuxV3_CSE_CachedPerformance Task_ensureContainerd

TL;DR: AzureLinuxV3 CSE cached performance failed narrowly because AKS.CSE.ensureContainerd took 2.972s against the 2s threshold; CSE itself exited successfully.

Likely cause / signature: $signature - threshold-only CSE timing breach, most consistent with runtime startup/package latency or a tight threshold rather than a broad provisioning failure.

Confidence: Medium

Recommended owner/action: Node Lifecycle/CSE owner should inspect ensureContainerd timing variance and either reduce latency or adjust the threshold/flake handling.

Strongest alternative: A PR-caused Windows image regression is less likely because the changed commits are Windows-focused while the failure is isolated to AzureLinux CSE timing.

Evidence: timeline failed RunAgentBakerE2E; failed test result; CSE timing report shows ensureContainerd 2.972s > 2s with ExitCode 0 and VM logs extracted.

Wiki signature: cse-ensurecontainerd-duration-threshold

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

components This pull request updates cached components on Linux or Windows VHDs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants