From 5e1a6795a8ae56d1c5436a4acc68638c063cae9b 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 | 235 ++++++++++++++++++ proposals/images/system-quota/data-flow.png | Bin 0 -> 80957 bytes proposals/new/system-quota.md | 88 +++++++ 3 files changed, 323 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..28d039f2 --- /dev/null +++ b/proposals/images/system-quota/data-flow.drawio @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..d4ff1ef98817ea30a626ce2f4635524f5866b883 GIT binary patch literal 80957 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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..c773f737 --- /dev/null +++ b/proposals/new/system-quota.md @@ -0,0 +1,88 @@ +# 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%", + } + ``` + + +### 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)