Skip to content

feat(upgrade): add v1.9 upgrade known issue - #1120

Open
starbops wants to merge 1 commit into
harvester:mainfrom
starbops:doc-11543
Open

feat(upgrade): add v1.9 upgrade known issue#1120
starbops wants to merge 1 commit into
harvester:mainfrom
starbops:doc-11543

Conversation

@starbops

@starbops starbops commented Sep 2, 2026

Copy link
Copy Markdown
Member

Problem:

There are currently no upgrade documents available for v1.9.

In addition, we have identified a known issue where an upgrade from v1.8.2 to v1.9.0 may get stuck in a state where some nodes have been fully upgraded, with their node upgrade state marked as Succeeded, while the remaining nodes stay at Image preloaded and make no further progress.

Solution:

Create a new upgrade documentation page for clusters upgrading from v1.8.x to v1.9.x.

Add a section describing how to identify the upgrade issue and the available workaround.

Related Issue(s):

harvester/harvester#11543

Test plan:

Additional documentation or context

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Name Link
🔨 Latest commit adad882
😎 Deploy Preview https://6a97a8c62145baa47fd18cd4--harvester-preview.netlify.app

@starbops
starbops marked this pull request as ready for review September 2, 2026 07:30
@starbops
starbops requested review from a team and jillian-maroket as code owners September 2, 2026 07:30
@starbops
starbops requested a review from martindekov September 2, 2026 07:30

@jillian-maroket jillian-maroket 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.

Review done


### 1. Upgrade Is Stuck in "Images preloaded"

In rare cases, an upgrade from v1.8.x to v1.9.0 may remain in the **Images preloaded** state after the operating system is upgraded on a node. The upgrade controller marks the node `Succeeded` before removing the `harvesterhci.io/pendingOSImage` annotation.

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.

Suggested change
In rare cases, an upgrade from v1.8.x to v1.9.0 may remain in the **Images preloaded** state after the operating system is upgraded on a node. The upgrade controller marks the node `Succeeded` before removing the `harvesterhci.io/pendingOSImage` annotation.
In rare cases, an upgrade from v1.8.x to v1.9.0 may remain in the `Images preloaded` state after a node reboots into the new operating system. This occurs when the upgrade controller changes the node's upgrade state to `Succeeded` before removing the `harvesterhci.io/pendingOSImage` annotation.

Comment on lines +29 to +37
Check the latest Upgrade CR:

```bash
kubectl -n harvester-system get upgrades.harvesterhci.io \
-l harvesterhci.io/latestUpgrade=true \
-o yaml
```

When the upgrade has stopped progressing, this issue is present if the output shows an upgraded node with `state: Succeeded` while the remaining nodes are still in the `Images preloaded` state.

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.

Suggested change
Check the latest Upgrade CR:
```bash
kubectl -n harvester-system get upgrades.harvesterhci.io \
-l harvesterhci.io/latestUpgrade=true \
-o yaml
```
When the upgrade has stopped progressing, this issue is present if the output shows an upgraded node with `state: Succeeded` while the remaining nodes are still in the `Images preloaded` state.
1. Check the latest `Upgrade` CR:
```bash
kubectl -n harvester-system get upgrades.harvesterhci.io \
-l harvesterhci.io/latestUpgrade=true \
-o yaml
```
When the upgrade stops progressing, check if the output shows an upgraded node with `state: Succeeded` while the remaining nodes are stuck in the `Images preloaded` state.

Comment on lines +39 to +46
Check the upgraded node's current and pending operating system images:

```bash
kubectl get node <node-name> \
-o custom-columns='NAME:.metadata.name,CURRENT-OS-IMAGE:.status.nodeInfo.osImage,PENDING-OS-IMAGE:.metadata.annotations.harvesterhci\.io/pendingOSImage'
```

Use the workaround only when the status pattern described above is present, `PENDING-OS-IMAGE` is not empty, and it matches `CURRENT-OS-IMAGE`.

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.

Suggested change
Check the upgraded node's current and pending operating system images:
```bash
kubectl get node <node-name> \
-o custom-columns='NAME:.metadata.name,CURRENT-OS-IMAGE:.status.nodeInfo.osImage,PENDING-OS-IMAGE:.metadata.annotations.harvesterhci\.io/pendingOSImage'
```
Use the workaround only when the status pattern described above is present, `PENDING-OS-IMAGE` is not empty, and it matches `CURRENT-OS-IMAGE`.
1. Check the upgraded node's current and pending operating system images:
```bash
kubectl get node <node-name> \
-o custom-columns='NAME:.metadata.name,CURRENT-OS-IMAGE:.status.nodeInfo.osImage,PENDING-OS-IMAGE:.metadata.annotations.harvesterhci\.io/pendingOSImage'
```
Check if the value of `PENDING-OS-IMAGE` matches `CURRENT-OS-IMAGE`.

Comment on lines +50 to +58
Change the affected node's state in the Upgrade CR back to `Waiting Reboot`:

```bash
kubectl -n harvester-system patch upgrades.harvesterhci.io <upgrade-name> \
--type=json \
-p '[{"op":"replace","path":"/status/nodeStatuses/<node-name>/state","value":"Waiting Reboot"}]'
```

Replace `<upgrade-name>` and `<node-name>` with the names of the Upgrade CR and affected node. The upgrade resumes after the upgrade controller reconciles the node.

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.

Suggested change
Change the affected node's state in the Upgrade CR back to `Waiting Reboot`:
```bash
kubectl -n harvester-system patch upgrades.harvesterhci.io <upgrade-name> \
--type=json \
-p '[{"op":"replace","path":"/status/nodeStatuses/<node-name>/state","value":"Waiting Reboot"}]'
```
Replace `<upgrade-name>` and `<node-name>` with the names of the Upgrade CR and affected node. The upgrade resumes after the upgrade controller reconciles the node.
Apply this workaround only if all conditions described in the previous section are met.
1. Change the affected node's state in the Upgrade CR back to `Waiting Reboot`:
Replace `<upgrade-name>` with the name of the `Upgrade` CR, and `<node-name>` with the name of the affected node.
```bash
kubectl -n harvester-system patch upgrades.harvesterhci.io <upgrade-name> \
--type=json \
-p '[{"op":"replace","path":"/status/nodeStatuses/<node-name>/state","value":"Waiting Reboot"}]'
```
1. Verify that the upgrade resumes once the upgrade controller reconciles the node state.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants