From 04e78f53ee908f954e17f2f703a64715b56393fc Mon Sep 17 00:00:00 2001 From: lengrongfu <1275177125@qq.com> Date: Wed, 7 Jun 2023 11:41:05 +0800 Subject: [PATCH] add system quota Signed-off-by: lengrongfu <1275177125@qq.com> --- .../images/system-quota/data-flow.drawio | 262 ++++++++++++++++++ proposals/images/system-quota/data-flow.png | Bin 0 -> 88582 bytes proposals/new/system-quota.md | 89 ++++++ 3 files changed, 351 insertions(+) create mode 100644 proposals/images/system-quota/data-flow.drawio create mode 100644 proposals/images/system-quota/data-flow.png create mode 100644 proposals/new/system-quota.md diff --git a/proposals/images/system-quota/data-flow.drawio b/proposals/images/system-quota/data-flow.drawio new file mode 100644 index 00000000..1c11a777 --- /dev/null +++ b/proposals/images/system-quota/data-flow.drawio @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/proposals/images/system-quota/data-flow.png b/proposals/images/system-quota/data-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..eecb98b1a872e61adad12414819c0479fa26788b GIT binary patch literal 88582 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 literal 0 HcmV?d00001 diff --git a/proposals/new/system-quota.md b/proposals/new/system-quota.md new file mode 100644 index 00000000..b4f00c0e --- /dev/null +++ b/proposals/new/system-quota.md @@ -0,0 +1,89 @@ +# System Quota + +Author: Leng RongFu + +## Abstract + +Harbor enforces quotas on resource usage of system , setting a hard limit on storage your system can use and can not push artificial when user storage more than system write storage limit. + + +## Background + +Currently, users can set project storage quota, but every project quota is independent,maybe this project storage quota sum while more then system storage, so we need set system storage quota, in the set project storage quota is to check current project storage quota whether more then system storage quota. + +Currently, user can always push artifact to system, until not available system storage, at this time system can not write and read, and when the host has no available storage, the system cannot execute image GC, system recovery is more difficult. + +## User Stories + +### Story 1 +As a system administrator, I can set the default limit on system storage. + +### Story 2 +As a system administrator, I can set the system can write storage ratio. + +## Premise +1, The shared blob in project won't be be double-counted. +2, The shared blob cross project will be be double-counted. + +## Proposal + +We propose the following solutions: + +- System quota +1. In the config management system settings page, administration can set system storage quota. +2. In the quota management page when administration update project quota, get system storage quota, if values is -1. skip validate. +3. else validate whether sum of all quotas more than the system quota. + +- System write ratio +1. In the config management system settings page, administration can set system write storage ratio. +2. Check whether the usage ratio is greater than the configured write ratio during image upload. +3. The usage ratio is calculated as: (usage of all project quotas) / (system storage quota). +4. If the usage ratio more than the the write ratio, set the system to read-only. +5. When delete image or helm chart, If the usage ratio less than the write ratio, remove the system to read-only. +6. When GC, If the usage ratio less than the write ratio, remove the system to read-only.. + + +### APIs for system storage quota + + 1. Get quotas + + ``` + GET /api/v2.0/configurations + { + "hard_storage": { + "editable": true, + "value": "1G"# when user not setting, system default value is -1. + }, + "write_ratio": { + "editable": true, + "value": "95%", # when user not setting, system default value is 100%. + } + } + ``` + + 2. Update quota + + ``` + PUT /api/v2.0/configurations + { + "hard_storage":"1G", + "write_ratio":"95%", + "read_only": "true", # when user use storage ratio more then system set storage ratio, set read_only value to true. when less then set read_only value to false. + } + ``` + + +### Configurations Manager + +Update `AllConfigs(ctx context.Context) (map[string]interface{}, error)` and `UpdateUserConfigs(ctx context.Context, conf map[string]interface{}) error` method. + +### Project Manager +1. Update project quota + - Get system hard storage limit. + - List all quota info, calculate the sum of the current project quota. + - Check whether the system storage quota is exceeded. + +### Data Flow in Docker registry + +#The date flow to push a image into Harbor, check storage usage ratio: +![data-flow](../images/system-quota/data-flow.png)