From 12c0743f0efaba4d37a1c7101de61b788fd1e1f4 Mon Sep 17 00:00:00 2001 From: PoAn Yang Date: Tue, 16 Jul 2024 11:37:47 +0800 Subject: [PATCH] feat: add image garbage collections Signed-off-by: PoAn Yang --- docs/upgrade/troubleshooting.md | 15 +++++++++++++-- .../disk-space-not-enough-error-message.png | Bin 0 -> 50411 bytes .../version-v1.3/upgrade/troubleshooting.md | 15 +++++++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 static/img/v1.4/upgrade/disk-space-not-enough-error-message.png diff --git a/docs/upgrade/troubleshooting.md b/docs/upgrade/troubleshooting.md index e1e911e52fa..5142d94888c 100644 --- a/docs/upgrade/troubleshooting.md +++ b/docs/upgrade/troubleshooting.md @@ -15,9 +15,9 @@ Here are some tips to troubleshoot a failed upgrade: - Check [version-specific upgrade notes](./automatic.md#upgrade-support-matrix). You can click the version in the support matrix table to see if there are any known issues. - Dive into the upgrade [design proposal](https://github.com/harvester/harvester/blob/master/enhancements/20220413-zero-downtime-upgrade.md). The following section briefly describes phases within an upgrade and possible diagnostic methods. -## Diagnose the upgrade flow +## Diagnose the upgrade flow -A Harvester upgrade process contains several phases. +A Harvester upgrade process contains several phases. ![](/img/v1.2/upgrade/ts_upgrade_phases.png) ### Phase 1: Provision upgrade repository VM. @@ -200,3 +200,14 @@ deployment.apps/hvst-upgrade-xxxxx-upgradelog-downloader scaled ``` ::: + +### Cleanup unused images for enough disks to avoid image garbage collections + +The default value of `imageGCHighThresholdPercent` in [KubeletConfiguration](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration) is `85`. If kubelet detects disk usage is more than 85%, it tries to remove unused images. + +During Harvester upgrade, the system loads new images to each node. If disk usage is more than 85%, new images may be candidates for cleanup, because it's not used by any container. +In an airgapped environment, this may break the upgrade, because new images can't be found in the cluster. + +If you get error message like 'Node xxx will reach xx.xx% storage space after loading new images. It's higher than kubelet image garbage collection threshold 85%.', you can run `crictl rmi --prune` to cleanup unused images first, before new upgrade starts. + +![Disk space not enough error message](/img/v1.4/upgrade/disk-space-not-enough-error-message.png) diff --git a/static/img/v1.4/upgrade/disk-space-not-enough-error-message.png b/static/img/v1.4/upgrade/disk-space-not-enough-error-message.png new file mode 100644 index 0000000000000000000000000000000000000000..c46e4f1f755e921b2fe0390d9fd647f3c0598dd7 GIT binary patch literal 50411 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 KiBd5G|Nj9|`Dn)g literal 0 HcmV?d00001 diff --git a/versioned_docs/version-v1.3/upgrade/troubleshooting.md b/versioned_docs/version-v1.3/upgrade/troubleshooting.md index e1e911e52fa..5142d94888c 100644 --- a/versioned_docs/version-v1.3/upgrade/troubleshooting.md +++ b/versioned_docs/version-v1.3/upgrade/troubleshooting.md @@ -15,9 +15,9 @@ Here are some tips to troubleshoot a failed upgrade: - Check [version-specific upgrade notes](./automatic.md#upgrade-support-matrix). You can click the version in the support matrix table to see if there are any known issues. - Dive into the upgrade [design proposal](https://github.com/harvester/harvester/blob/master/enhancements/20220413-zero-downtime-upgrade.md). The following section briefly describes phases within an upgrade and possible diagnostic methods. -## Diagnose the upgrade flow +## Diagnose the upgrade flow -A Harvester upgrade process contains several phases. +A Harvester upgrade process contains several phases. ![](/img/v1.2/upgrade/ts_upgrade_phases.png) ### Phase 1: Provision upgrade repository VM. @@ -200,3 +200,14 @@ deployment.apps/hvst-upgrade-xxxxx-upgradelog-downloader scaled ``` ::: + +### Cleanup unused images for enough disks to avoid image garbage collections + +The default value of `imageGCHighThresholdPercent` in [KubeletConfiguration](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration) is `85`. If kubelet detects disk usage is more than 85%, it tries to remove unused images. + +During Harvester upgrade, the system loads new images to each node. If disk usage is more than 85%, new images may be candidates for cleanup, because it's not used by any container. +In an airgapped environment, this may break the upgrade, because new images can't be found in the cluster. + +If you get error message like 'Node xxx will reach xx.xx% storage space after loading new images. It's higher than kubelet image garbage collection threshold 85%.', you can run `crictl rmi --prune` to cleanup unused images first, before new upgrade starts. + +![Disk space not enough error message](/img/v1.4/upgrade/disk-space-not-enough-error-message.png)