Added the template for Project Harbor (Cattle only)

This commit is contained in:
Massimo Re Ferre 2017-06-23 13:48:13 +02:00
parent fd6e652191
commit f6bcbf9ffd
21 changed files with 1848 additions and 0 deletions

View File

@ -0,0 +1,14 @@
##Harbor 0.5.0 deployment: single-host (revision 0)
This version deploys `Harbor` 0.5.0 on a single host of a Cattle cluster.
The host is identified, by default, by the `harbor-host=true` label (can be changed at deployment time to point to another key).
Note that:
- the `IP/Hostname/FQDN` parameter needs to be set to the exact same name you will use to access the registry (e.g. IP or FQDN of the host)
- the host needs to have port `80` and port `443` free for use (the Harbor proxy container will bind to those ports)
- this catalog entry only supports `http` (`https` access is not supported)
- because only `http` is supported, the Docker Host pulling/pushing from/to Harbor needs to have the `--insecure-registry` flag properly configured
- if you want to re-provision Harbor on the same Docker host and you want to use different inputs (e.g. a different password) you need to remove the `/data` directory on the host. If you fail to do so the new Harbor instance will use the same parameters entered in the previous deployment (saved in the `/data` directory)
![](singlehost.png)

View File

@ -0,0 +1,168 @@
version: '2'
services:
harbor-setupwrapper:
image: mreferre/harbor-setupwrapper:0.5.0
container_name: harbor-setupwrapper
environment:
- HARBORHOSTNAME=${harborhostname}
- HARBOR_ADMIN_PASSWORD=${harbor_admin_password}
volumes:
- /etc/registry
- /etc/ui
- /etc/jobservice
- /etc/nginx
- /configdb
- /configui
- /configjobservice
command: ["/harbor/harbor-setupwrapper.sh"]
network_mode: "none"
labels:
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
io.rancher.container.hostname_override: container_name
io.rancher.container.start_once: 'true'
io.rancher.sidekicks: registry, ui, jobservice, mysql, proxy
log:
image: vmware/harbor-log:0.5.0
container_name: harbor-log
restart: always
volumes:
- /var/log/harbor:/var/log/docker/
ports:
- 1514:514
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
registry:
image: library/registry:2.5.0
container_name: registry
restart: always
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
- harbor-setupwrapper
volumes: #original directory mapping has been moved to named volumes
- /data/registry:/storage
volumes_from:
- harbor-setupwrapper
environment:
- GODEBUG=netdns=cgo
command:
["serve", "/etc/registry/config.yml"]
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "registry"
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
mysql:
image: vmware/harbor-db:0.5.0
container_name: harbor-db
restart: always
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
- harbor-setupwrapper
volumes: #original directory mapping has been moved to named volumes
- /data/database:/var/lib/mysql
volumes_from:
- harbor-setupwrapper
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "mysql"
entrypoint:
- /bin/sh
- -c
command:
- /configdb/entrypointdb.sh
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
ui:
image: vmware/harbor-ui:0.5.0
container_name: harbor-ui
restart: always
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
- harbor-setupwrapper
volumes: #original directory mapping has been moved to named volumes
- /data:/harbor_storage
volumes_from:
- harbor-setupwrapper
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "ui"
entrypoint:
- /bin/sh
- -c
command:
- /configui/entrypointui.sh
external_links:
- registry
- mysql
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
jobservice:
image: vmware/harbor-jobservice:0.5.0
container_name: harbor-jobservice
restart: always
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
- harbor-setupwrapper
volumes: #original directory mapping has been moved to named volumes
- /data/job_logs:/var/log/jobs
volumes_from:
- harbor-setupwrapper
depends_on:
- log
#external_links:
# - registry
# - ui
# - mysql
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "jobservice"
entrypoint:
- /bin/sh
- -c
command:
- /configjobservice/entrypointjobservice.sh
#external_links:
# - registry
# - ui
# - mysql
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
proxy:
image: nginx:1.11.5
container_name: nginx
restart: always
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
- harbor-setupwrapper
volumes_from:
- harbor-setupwrapper
ports:
- 80:80
- 443:443
depends_on:
- log
#external_links:
# - registry
# - ui
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}

View File

@ -0,0 +1,48 @@
version: '2'
.catalog:
name: Harbor
version: 0.5.0-singlehost-rev0
description: |
Enterprise Class Container Registry by VMware
minimum_rancher_version: v0.59.0
uuid: harbor-0
questions:
- variable: "harborhostname"
description: "Harbor IP, HOSTNAME or FQDN as used to acces it from the Docker CLI"
label: "IP/Hostname/FQDN:"
required: true
default: myregistry
type: "string"
- variable: "harbor_admin_password"
label: "Harbor password:"
description: |
Harbor admin password
default: Vmware123!
required: true
type: "string"
- variable: "harborhostlabel"
label: "Harbor will be deployed on the host with this label (default: harbor-host=true)"
description: |
Harbor host label
default: harbor-host=true
required: true
type: "string"
services:
registry:
scale: 1
start_on_create: false
proxy:
scale: 1
start_on_create: false
jobservice:
scale: 1
start_on_create: false
ui:
scale: 1
start_on_create: false
mysql:
scale: 1
start_on_create: false
harbor-setupwrapper:
scale: 1
start_on_create: true

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

View File

@ -0,0 +1,18 @@
##Harbor 0.5.0 deployment: distributed (revision 0)
This version deploys `Harbor` 0.5.0 on a Cattle cluster.
All hosts have to have the `harbor-log=true` label (the log container needs to be deployed on all of them).
Also, `Traefik` needs to be enabled on one of the host and a proper DNS configuration needs to be in place.
Last but not least a storage service for named volumes needs to be available (this catalog entry has been tested with `rancher-nfs` which needs to be activated separately and prior to launch the distributed Harbor deployment).
Note that:
- the `IP/Hostname/FQDN` can be arbitrary set but the `(Traefik) domain` parameter needs to be a domain name that resolves to the host where `Traefik` is running
- this catalog entry only supports `http` (`https` access is not supported)
- because only `http` is supported, the Docker Host pulling/pushing from/to Harbor needs to have the `--insecure-registry` flag properly configured
- while the Rancher UI may show that stack upgrades are available, upgrades are not supported at this point
- sometimes the proxy front-end fails to configure properly (due to a race condition) and it shows the "welcome to NGINX" page. If it happens, try to re-deploy the restart the `proxy` container
![](distributed.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

View File

@ -0,0 +1,210 @@
version: '2'
volumes: #most volumes mappings require optimization (now all volumes map all containers)
etcjobservice:
#external: true
driver: ${volumedriver}
etcnginx:
#external: true
driver: ${volumedriver}
etcregistry:
#external: true
driver: ${volumedriver}
etcui:
#external: true
driver: ${volumedriver}
configjobservice:
#external: true
driver: ${volumedriver}
configdb:
#external: true
driver: ${volumedriver}
configui:
#external: true
driver: ${volumedriver}
data: #according to the eng team this is not even needed (but leaving it in for consistency)
#external: true
driver: ${volumedriver}
data-registry:
#external: true
driver: ${volumedriver}
data-database:
#external: true
driver: ${volumedriver}
data-job_logs:
#external: true
driver: ${volumedriver}
services:
harbor-setupwrapper:
image: mreferre/harbor-setupwrapper:0.5.0
container_name: harbor-setupwrapper
environment:
- HARBORHOSTNAME=${harborhostname}.${traefikdomain}
- HARBOR_ADMIN_PASSWORD=${harbor_admin_password}
volumes:
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
command: ["/harbor/harbor-setupwrapper.sh"]
network_mode: "none"
labels:
io.rancher.container.hostname_override: container_name
io.rancher.container.start_once: 'true'
log:
image: vmware/harbor-log:0.5.0
container_name: harbor-log
restart: always
volumes:
- /var/log/harbor/:/var/log/docker/
ports:
- 1514:514
labels:
io.rancher.scheduler.global: 'true'
io.rancher.scheduler.affinity:host_label: harbor-log=true
io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name}
io.rancher.container.hostname_override: container_name
registry:
image: library/registry:2.5.0
container_name: registry
restart: always
volumes:
- data-registry:/storage
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
environment:
- GODEBUG=netdns=cgo
command:
["serve", "/etc/registry/config.yml"]
depends_on:
- log
- harbor-setupwrapper
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "registry"
labels:
io.rancher.container.hostname_override: container_name
mysql:
image: vmware/harbor-db:0.5.0
container_name: harbor-db
restart: always
volumes:
- data-database:/var/lib/mysql
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
depends_on:
- log
- harbor-setupwrapper
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "mysql"
entrypoint:
- /bin/sh
- -c
command:
- /configdb/entrypointdb.sh
labels:
io.rancher.container.hostname_override: container_name
ui:
image: vmware/harbor-ui:0.5.0
container_name: harbor-ui
restart: always
volumes:
- data:/harbor_storage #according to the eng team this is not even needed (but leaving it in for consistency)
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
depends_on:
- log
- harbor-setupwrapper
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "ui"
entrypoint:
- /bin/sh
- -c
command:
- /configui/entrypointui.sh
labels:
io.rancher.container.hostname_override: container_name
jobservice:
image: vmware/harbor-jobservice:0.5.0
container_name: harbor-jobservice
restart: always
volumes:
- data-job_logs:/var/log/jobs
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
depends_on:
- log
- harbor-setupwrapper
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "jobservice"
entrypoint:
- /bin/sh
- -c
command:
- /configjobservice/entrypointjobservice.sh
labels:
io.rancher.container.hostname_override: container_name
proxy:
image: nginx:1.11.5
container_name: nginx
restart: always
volumes:
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
depends_on:
- log
- harbor-setupwrapper
external_links: #these entries seem to be required for the proxy service to start correctly
- registry
- ui
- mysql
- jobservice
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
labels:
io.rancher.container.hostname_override: container_name
traefik.alias: ${harborhostname}
traefik.port: 80
traefik.domain: ${traefikdomain}
traefik.enable: stack

View File

@ -0,0 +1,56 @@
version: '2'
.catalog:
name: Harbor
version: 0.5.0-distributed-rev0
description: |
Enterprise Class Container Registry by VMware
minimum_rancher_version: v0.59.0
uuid: harbor-0
questions:
- variable: "harborhostname"
description: "Harbor IP, HOSTNAME or FQDN as used to acces it from the Docker CLI"
label: "IP/Hostname/FQDN:"
required: true
default: myregistry
type: "string"
- variable: "harbor_admin_password"
label: "Harbor password:"
description: |
Harbor admin password
default: Vmware123!
required: true
type: "string"
- variable: "traefikdomain"
description: "Harbor domain name (if you are using Traefik you should call out the domain here and the harbor host name should just represent the hostname)"
label: "(Traefik) domain:"
required: true
default: mycompany.com
type: "string"
- variable: "volumedriver"
description: "Volume Driver being used (default: rancher-nfs)"
label: "Volume Driver:"
required: true
default: rancher-nfs
type: "string"
services:
registry:
scale: 1
proxy:
scale: 1
health_check:
healthy_threshold: 2
response_timeout: 2000
port: 80
unhealthy_threshold: 3
initializing_timeout: 60000
interval: 2000
strategy: recreate
request_line:
jobservice:
scale: 1
ui:
scale: 1
mysql:
scale: 1
harbor-setupwrapper:
scale: 1

View File

@ -0,0 +1,15 @@
##Harbor 1.1.1 deployment: single-host (revision 0)
This version deploys `Harbor` 1.1.1 on a single host of a Cattle cluster.
The host is identified, by default, by the `harbor-host=true` label (can be changed at deployment time to point to another key).
Note that:
- the `IP/Hostname/FQDN` parameter needs to be set to the exact same name you will use to access the registry (e.g. IP or FQDN of the host)
- the host needs to have port `80` and port `443` free for use (the Harbor proxy container will bind to those ports)
- this catalog entry only supports `http` (`https` access is not supported)
- because only `http` is supported, the Docker Host pulling/pushing from/to Harbor needs to have the `--insecure-registry` flag properly configured
- if you want to re-provision Harbor on the same Docker host and you want to use different inputs (e.g. a different password) you need to remove the `/data` directory on the host. If you fail to do so the new Harbor instance will use the same parameters entered in the previous deployment (saved in the `/data` directory)
- While the Rancher UI may show that stack upgrades are available, upgrades are not supported at this point
![](singlehost.png)

View File

@ -0,0 +1,207 @@
version: '2'
services:
harbor-setupwrapper:
image: mreferre/harbor-setupwrapper:1.1.1-1
container_name: harbor-setupwrapper
environment:
- HARBORHOSTNAME=${harborhostname}
- HARBOR_ADMIN_PASSWORD=${harbor_admin_password}
volumes:
- /data:/data
- /etc/registry
- /etc/ui
- /etc/jobservice
- /etc/nginx
- /configdb
- /configui
- /configjobservice
- /configadminserver
command: ["/harbor/harbor-setupwrapper.sh"]
network_mode: "none"
labels:
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
io.rancher.container.hostname_override: container_name
io.rancher.container.start_once: 'true'
io.rancher.sidekicks: registry, ui, jobservice, mysql, proxy, adminserver
log:
image: vmware/harbor-log:v1.1.1
container_name: harbor-log
restart: always
volumes:
- /var/log/harbor:/var/log/docker/:z
ports:
- 1514:514
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
registry:
image: vmware/registry:photon-2.6.0
container_name: registry
restart: always
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
- harbor-setupwrapper
volumes: #original directory mapping has been moved to named volumes
- /data/registry:/storage:z
volumes_from:
- harbor-setupwrapper
environment:
- GODEBUG=netdns=cgo
command:
["serve", "/etc/registry/config.yml"]
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "registry"
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
mysql:
image: vmware/harbor-db:v1.1.1
container_name: harbor-db
restart: always
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
- harbor-setupwrapper
volumes: #original directory mapping has been moved to named volumes
- /data/database:/var/lib/mysql:z
volumes_from:
- harbor-setupwrapper
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "mysql"
entrypoint:
- /bin/sh
- -c
command:
- /configdb/entrypointdb.sh
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
adminserver:
image: vmware/harbor-adminserver:v1.1.1
container_name: harbor-adminserver
restart: always
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
- harbor-setupwrapper
volumes: #original directory mapping has been moved to named volumes
- /data/config/:/etc/adminserver/config/:z
# - /data/secretkey:/etc/adminserver/key:z
# - /data/:/data/:z
volumes_from:
- harbor-setupwrapper
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "adminserver"
entrypoint:
- /bin/sh
- -c
command:
- /configadminserver/entrypointadminserver.sh
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
ui:
image: vmware/harbor-ui:v1.1.1
container_name: harbor-ui
restart: always
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
- harbor-setupwrapper
volumes: #original directory mapping has been moved to named volumes
# - /data/secretkey:/etc/ui/key:z
- /data/ca_download/:/etc/ui/ca/:z
volumes_from:
- harbor-setupwrapper
depends_on:
- log
- adminserver
- registry
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "ui"
entrypoint:
- /bin/sh
- -c
command:
- /configui/entrypointui.sh
external_links:
- registry
- mysql
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
jobservice:
image: vmware/harbor-jobservice:v1.1.1
container_name: harbor-jobservice
restart: always
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
- harbor-setupwrapper
volumes: #original directory mapping has been moved to named volumes
- /data/job_logs:/var/log/jobs:z
# - /data/secretkey:/etc/jobservice/key:z
volumes_from:
- harbor-setupwrapper
depends_on:
- log
- ui
- adminserver
#external_links:
# - registry
# - ui
# - mysql
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "jobservice"
entrypoint:
- /bin/sh
- -c
command:
- /configjobservice/entrypointjobservice.sh
#external_links:
# - registry
# - ui
# - mysql
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
proxy:
image: vmware/nginx:1.11.5-patched
container_name: nginx
restart: always
dns_search: #https://forums.rancher.com/t/cant-resolve-simple-container-names-within-sidekick-structure/3876
- harbor-setupwrapper
volumes_from:
- harbor-setupwrapper
ports:
- 80:80
- 443:443
- 4443:4443
depends_on:
- mysql
- registry
- ui
- log
#external_links:
# - registry
# - ui
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
labels:
io.rancher.container.hostname_override: container_name
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}

View File

@ -0,0 +1,51 @@
version: '2'
.catalog:
name: Harbor
version: 1.1.1-singlehost-rev0
description: |
Enterprise Class Container Registry [by VMware]
minimum_rancher_version: v0.59.0
uuid: harbor-2
questions:
- variable: "harborhostname"
description: "Harbor IP, HOSTNAME or FQDN as used to acces it from the Docker CLI"
label: "IP/Hostname/FQDN:"
required: true
default: myregistry
type: "string"
- variable: "harbor_admin_password"
label: "Harbor password:"
description: |
Harbor admin password
default: Vmware123!
required: true
type: "string"
- variable: "harborhostlabel"
label: "Harbor will be deployed on the host with this label (default: harbor-host=true)"
description: |
Harbor host label
default: harbor-host=true
required: true
type: "string"
services:
registry:
scale: 1
start_on_create: false
adminserver:
scale: 1
start_on_create: false
proxy:
scale: 1
start_on_create: false
jobservice:
scale: 1
start_on_create: false
ui:
scale: 1
start_on_create: false
mysql:
scale: 1
start_on_create: false
harbor-setupwrapper:
scale: 1
start_on_create: true

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

View File

@ -0,0 +1,18 @@
##Harbor 1.1.1 deployment: distributed (revision 0)
This version deploys `Harbor` 1.1.1 on a Cattle cluster.
All hosts have to have the `harbor-log=true` label (the log container needs to be deployed on all of them).
Also, `Traefik` needs to be enabled on one of the host and a proper DNS configuration needs to be in place.
Last but not least a storage service for named volumes needs to be available (this catalog entry has been tested with `rancher-nfs` which needs to be activated separately and prior to launch the distributed Harbor deployment).
Note that:
- the `IP/Hostname/FQDN` can be arbitrary set but the `(Traefik) domain` parameter needs to be a domain name that resolves to the host where `Traefik` is running
- this catalog entry only supports `http` (`https` access is not supported)
- because only `http` is supported, the Docker Host pulling/pushing from/to Harbor needs to have the `--insecure-registry` flag properly configured
- while the Rancher UI may show that stack upgrades are available, upgrades are not supported at this point
- sometimes the proxy front-end fails to configure properly (due to a race condition) and it shows the "welcome to NGINX" page. If it happens, try to re-deploy the restart the `proxy` container
![](distributed.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

View File

@ -0,0 +1,290 @@
version: '2'
volumes: #most volumes mappings require optimization (now all volumes map all containers)
etcjobservice:
#external: true
driver: ${volumedriver}
etcnginx:
#external: true
driver: ${volumedriver}
etcregistry:
#external: true
driver: ${volumedriver}
etcui:
#external: true
driver: ${volumedriver}
configjobservice:
#external: true
driver: ${volumedriver}
configdb:
#external: true
driver: ${volumedriver}
configui:
#external: true
driver: ${volumedriver}
configadminserver:
#external: true
driver: ${volumedriver}
data: #according to the eng team this is not even needed (but leaving it in for consistency)
#external: true
driver: ${volumedriver}
data-registry:
#external: true
driver: ${volumedriver}
data-database:
#external: true
driver: ${volumedriver}
data-job_logs:
#external: true
driver: ${volumedriver}
data-ca_download:
#external: true
driver: ${volumedriver}
data-config:
#external: true
driver: ${volumedriver}
services:
harbor-setupwrapper:
image: mreferre/harbor-setupwrapper:1.1.1-1
container_name: harbor-setupwrapper
environment:
- HARBORHOSTNAME=${harborhostname}.${traefikdomain}
- HARBOR_ADMIN_PASSWORD=${harbor_admin_password}
volumes:
- data:/data
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
command: ["/harbor/harbor-setupwrapper.sh"]
network_mode: "none"
labels:
io.rancher.container.hostname_override: container_name
io.rancher.container.start_once: 'true'
log:
image: vmware/harbor-log:v1.1.1
container_name: harbor-log
restart: always
volumes:
- /var/log/harbor/:/var/log/docker/:z
ports:
- 1514:514
labels:
io.rancher.scheduler.global: 'true'
io.rancher.scheduler.affinity:host_label: harbor-log=true
io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name}
io.rancher.container.hostname_override: container_name
registry:
image: vmware/registry:photon-2.6.0
container_name: registry
restart: always
volumes:
- data-registry:/storage
- data:/data
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
environment:
- GODEBUG=netdns=cgo
command:
["serve", "/etc/registry/config.yml"]
depends_on:
- log
- harbor-setupwrapper
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "registry"
labels:
io.rancher.container.hostname_override: container_name
mysql:
image: vmware/harbor-db:v1.1.1
container_name: harbor-db
restart: always
volumes:
- data-database:/var/lib/mysql
- data:/data:z
- data-job_logs:/var/log/jobs
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
depends_on:
- log
- harbor-setupwrapper
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "mysql"
entrypoint:
- /bin/sh
- -c
command:
- /configdb/entrypointdb.sh
labels:
io.rancher.container.hostname_override: container_name
adminserver:
image: vmware/harbor-adminserver:v1.1.1
container_name: harbor-adminserver
restart: always
volumes:
# - /data/secretkey:/etc/adminserver/key
- data-database:/var/lib/mysql
- data:/data/:z
- data-job_logs:/var/log/jobs
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
depends_on:
- log
- harbor-setupwrapper
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "adminserver"
entrypoint:
- /bin/sh
- -c
command:
- /configadminserver/entrypointadminserver.sh
labels:
io.rancher.container.hostname_override: container_name
ui:
image: vmware/harbor-ui:v1.1.1
container_name: harbor-ui
restart: always
volumes:
# - /data/secretkey:/etc/ui/key:z
# - data:/harbor_storage #according to the eng team this is not even needed (but leaving it in for consistency)
- data:/data/:z
- data-database:/var/lib/mysql
- data-job_logs:/var/log/jobs
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
depends_on:
- log
- harbor-setupwrapper
- adminserver
- registry
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "ui"
entrypoint:
- /bin/sh
- -c
command:
- /configui/entrypointui.sh
labels:
io.rancher.container.hostname_override: container_name
jobservice:
image: vmware/harbor-jobservice:v1.1.1
container_name: harbor-jobservice
restart: always
volumes:
# - /data/secretkey:/etc/jobservice/key:z
- data:/data/:z
- data-job_logs:/var/log/jobs
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
depends_on:
- log
- harbor-setupwrapper
- ui
- adminserver
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "jobservice"
entrypoint:
- /bin/sh
- -c
command:
- /configjobservice/entrypointjobservice.sh
labels:
io.rancher.container.hostname_override: container_name
proxy:
image: vmware/nginx:1.11.5-patched
container_name: nginx
restart: always
volumes:
- data-database:/var/lib/mysql
- data:/data/:z
- data-job_logs:/var/log/jobs
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
depends_on:
- mysql
- registry
- ui
- log
- harbor-setupwrapper
external_links: #these entries seem to be required for the proxy service to start correctly
- registry
- ui
- mysql
- jobservice
- adminserver
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
labels:
io.rancher.container.hostname_override: container_name
traefik.alias: ${harborhostname}
traefik.port: 80
traefik.domain: ${traefikdomain}
traefik.enable: stack

View File

@ -0,0 +1,58 @@
version: '2'
.catalog:
name: Harbor
version: 1.1.1-distributed-rev0
description: |
Enterprise Class Container Registry [by VMware]
minimum_rancher_version: v0.59.0
uuid: harbor-3
questions:
- variable: "harborhostname"
description: "Harbor IP, HOSTNAME or FQDN as used to acces it from the Docker CLI"
label: "IP/Hostname/FQDN:"
required: true
default: myregistry
type: "string"
- variable: "harbor_admin_password"
label: "Harbor password:"
description: |
Harbor admin password
default: Vmware123!
required: true
type: "string"
- variable: "traefikdomain"
description: "Harbor domain name (if you are using Traefik you should call out the domain here and the harbor host name should just represent the hostname)"
label: "(Traefik) domain:"
required: true
default: mycompany.com
type: "string"
- variable: "volumedriver"
description: "Volume Driver being used (default: rancher-nfs)"
label: "Volume Driver:"
required: true
default: rancher-nfs
type: "string"
services:
registry:
scale: 1
adminserver:
scale: 1
proxy:
scale: 1
health_check:
healthy_threshold: 2
response_timeout: 2000
port: 80
unhealthy_threshold: 3
initializing_timeout: 60000
interval: 2000
strategy: recreate
request_line:
jobservice:
scale: 1
ui:
scale: 1
mysql:
scale: 1
harbor-setupwrapper:
scale: 1

View File

@ -0,0 +1,44 @@
### Harbor 1.1.1 deployment (revision 1) ###
This catalog item version deploys `Harbor` 1.1.1 on a Cattle cluster and leverages [Harbor setup wrapper](https://hub.docker.com/r/mreferre/harbor-setupwrapper/tags/) version 1.1.1-1.
This catalog item version supports both a basic (i.e. standalone) as well as advanced (i.e. distributed) deployment model for Harbor.
The basic model has less pre-requisites but it's less powerful. The advanced model has more pre-requisites but it's more powerful.
#### Governing the deployment model ####
You govern the deployment model being used by setting the `harbor-host` label:
- if you set the label on one host, you opt in for the basic model.
- if you set the label on two or more hosts, you opt in for the advanced model.
#### Storage pre-requisites ####
If you opt in for the basic model there is no storage prerequisite and you can use the `local` volume driver. All volumes will be created locally and transparently on the host with the `harbor-host` label.
If you opt in for the advanced model you have to configure a volume driver that supports sharing among containers (this catalog entry has been tested with `rancher-nfs` which needs to be activated separately and prior to launch the advanced deployment model).
You can use a volume driver that supports sharing among containers when deploying with the basic model but it is not required.
#### Network pre-requisites ####
The network pre-requisites as described in this section apply to both the basic and advanced deployment models.
> **Note:** the Harbor name you choose at deployment time must be the exact same end-point (IP, FQDN, etc) that you are going to use with your Docker client to `login` into Harbor, `pull` and `push` images from and to Harbor. This has ramification on how you configure access to the Harbor service.
In this implementation, access to Harbor is fullfilled by a Rancher load balancer that forwards the host port 80 to port 80 of the Harbor proxy container. The Rancher load balancer is deployed on all hosts that have the `harbor-lb-host` label.
The simplest way to configure the deployment is to set the `harbor-lb-host` label on a single host and use the IP address (or FQDN) of that host in the Harbor `IP/Hostname/FQDN` field. This IP (or FQDN) is what you will use to consume Harbor.
A more sophisticated way to configure the deployment is to set the `harbor-lb-host` label on multiple hosts and have an external component (e.g. DNS with RR, or external LB) that can send requests to multiple hosts. In this case the Harbor `IP/Hostname/FQDN` field will need to be filled with the FQDN as provided by the DNS or by the external LB (virtual IP). This DNS name (or virtual IP) is what you will use to consume Harbor.
In general, the only real prerequisite is that the `IP/Hostname/FQDN` field at deployment time maps exactly what the user will be using as an endpoint when interacting with the Harbor service. You should have a certain degree of flexibility to configure your deployment as long as you fullfill this requirement.
#### Additional considerations and known issues ####
- this catalog entry only supports `http` (`https` access is not supported)
- because only `http` is supported, the Docker Host pulling/pushing from/to Harbor needs to have the `--insecure-registry` flag properly configured
- the host(s) with the `harbor-lb-host` label need to have port `80` free for use (different port forwarding configurations hasn't been tested)
- while the Rancher UI may show that stack upgrades are available, upgrades are not supported at this point
- sometimes the proxy front-end fails to configure properly (due to a race condition) and it shows the "welcome to NGINX" page. If it happens, try to re-deploy the restart the `proxy` container
- every Harbor deployment will create a certain number of volumes. Note that these volumes may not always be properly deleted on the NFS share or on the local Docker host due to bug and/or limitations in the driver(s). It is suggested to keep an eye on volumes sprawl.

View File

@ -0,0 +1,299 @@
version: '2'
volumes: #most volumes mappings require optimization (now all volumes map all containers)
etcjobservice:
#external: true
driver: ${volumedriver}
etcnginx:
#external: true
driver: ${volumedriver}
etcregistry:
#external: true
driver: ${volumedriver}
etcui:
#external: true
driver: ${volumedriver}
configjobservice:
#external: true
driver: ${volumedriver}
configdb:
#external: true
driver: ${volumedriver}
configui:
#external: true
driver: ${volumedriver}
configadminserver:
#external: true
driver: ${volumedriver}
data: #according to the eng team this is not even needed (but leaving it in for consistency)
#external: true
driver: ${volumedriver}
data-registry:
#external: true
driver: ${volumedriver}
data-database:
#external: true
driver: ${volumedriver}
data-job_logs:
#external: true
driver: ${volumedriver}
data-ca_download:
#external: true
driver: ${volumedriver}
data-config:
#external: true
driver: ${volumedriver}
services:
harbor-setupwrapper:
image: mreferre/harbor-setupwrapper:1.1.1-1
container_name: harbor-setupwrapper
environment:
- HARBORHOSTNAME=${harborhostname}.${traefikdomain}
- HARBOR_ADMIN_PASSWORD=${harbor_admin_password}
volumes:
- data:/data
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
command: ["/harbor/harbor-setupwrapper.sh"]
network_mode: "none"
labels:
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
io.rancher.container.hostname_override: container_name
io.rancher.container.start_once: 'true'
log:
image: vmware/harbor-log:v1.1.1
container_name: harbor-log
restart: always
volumes:
- /var/log/harbor/:/var/log/docker/:z
ports:
- 1514:514
labels:
io.rancher.scheduler.global: 'true'
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name}
io.rancher.container.hostname_override: container_name
registry:
image: vmware/registry:photon-2.6.0
container_name: registry
restart: always
volumes:
- data-registry:/storage
- data:/data
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
environment:
- GODEBUG=netdns=cgo
command:
["serve", "/etc/registry/config.yml"]
depends_on:
- log
- harbor-setupwrapper
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "registry"
labels:
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
io.rancher.container.hostname_override: container_name
mysql:
image: vmware/harbor-db:v1.1.1
container_name: harbor-db
restart: always
volumes:
- data-database:/var/lib/mysql
- data:/data:z
- data-job_logs:/var/log/jobs
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
depends_on:
- log
- harbor-setupwrapper
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "mysql"
entrypoint:
- /bin/sh
- -c
command:
- /configdb/entrypointdb.sh
labels:
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
io.rancher.container.hostname_override: container_name
adminserver:
image: vmware/harbor-adminserver:v1.1.1
container_name: harbor-adminserver
restart: always
volumes:
# - /data/secretkey:/etc/adminserver/key
- data-database:/var/lib/mysql
- data:/data/:z
- data-job_logs:/var/log/jobs
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
depends_on:
- log
- harbor-setupwrapper
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "adminserver"
entrypoint:
- /bin/sh
- -c
command:
- /configadminserver/entrypointadminserver.sh
labels:
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
io.rancher.container.hostname_override: container_name
ui:
image: vmware/harbor-ui:v1.1.1
container_name: harbor-ui
restart: always
volumes:
- data:/data/:z
- data-database:/var/lib/mysql
- data-job_logs:/var/log/jobs
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
depends_on:
- log
- harbor-setupwrapper
- adminserver
- registry
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "ui"
entrypoint:
- /bin/sh
- -c
command:
- /configui/entrypointui.sh
labels:
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
io.rancher.container.hostname_override: container_name
jobservice:
image: vmware/harbor-jobservice:v1.1.1
container_name: harbor-jobservice
restart: always
volumes:
# - /data/secretkey:/etc/jobservice/key:z
- data:/data/:z
- data-job_logs:/var/log/jobs
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
depends_on:
- log
- harbor-setupwrapper
- ui
- adminserver
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "jobservice"
entrypoint:
- /bin/sh
- -c
command:
- /configjobservice/entrypointjobservice.sh
labels:
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
io.rancher.container.hostname_override: container_name
proxy:
image: vmware/nginx:1.11.5-patched
container_name: nginx
restart: always
volumes:
- data-database:/var/lib/mysql
- data:/data/:z
- data-job_logs:/var/log/jobs
- data-ca_download:/etc/ui/ca/
- data-config:/etc/adminserver/config/
- etcui:/etc/ui
- etcjobservice:/etc/jobservice
- etcregistry:/etc/registry
- etcnginx:/etc/nginx
- configdb:/configdb
- configui:/configui
- configjobservice:/configjobservice
- configadminserver:/configadminserver
depends_on:
- mysql
- registry
- ui
- log
- harbor-setupwrapper
external_links: #these entries seem to be required for the proxy service to start correctly
- registry
- ui
- mysql
- jobservice
- adminserver
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
labels:
io.rancher.scheduler.affinity:host_label: ${harborhostlabel}
io.rancher.container.hostname_override: container_name
harbor-lb:
image: rancher/lb-service-haproxy
ports:
- 80
labels:
io.rancher.scheduler.global: 'true'
io.rancher.scheduler.affinity:host_label: ${harborlbhostlabel}
io.rancher.container.hostname_override: container_name

View File

@ -0,0 +1,75 @@
version: '2'
.catalog:
name: Harbor
version: 1.1.1-1-rev1
description: |
Enterprise Class Container Registry [by VMware]
minimum_rancher_version: v0.59.0
uuid: harbor-4
questions:
- variable: "harborhostname"
description: "Harbor IP, HOSTNAME or FQDN as used to acces it from the Docker CLI"
label: "IP/Hostname/FQDN:"
required: true
default: myregistry
type: "string"
- variable: "harbor_admin_password"
label: "Harbor password:"
description: |
Harbor admin password
default: Vmware123!
required: true
type: "string"
- variable: "harborhostlabel"
label: "Harbor will be deployed on the host(s) with this label (default: harbor-host=true)"
description: |
The various Harbor containers will be deployed on host(s) with this label
Set the label on one host if you want Harbor to be deployed on a single host (rancher-nfs volume driver is required for multiple hosts)
default: harbor-host=true
required: true
type: "string"
- variable: "harborlbhostlabel"
label: "Rancher load balancer will be deployed on the host(s) with this label (default: harbor-lb-host=true)"
description: |
The Rancher load balancer will be deployed on host(s) with this label
Make sure you understand the pre-requisite as outlined in the README document above
default: harbor-lb-host=true
required: true
type: "string"
- variable: "volumedriver"
description: "Volume Driver being used. Set rancher-nfs if you run in distributed mode"
label: "Volume Driver:"
required: true
default: local
type: "enum"
options:
- local
- rancher-nfs
services:
registry:
scale: 1
adminserver:
scale: 1
proxy:
scale: 1
harbor-lb:
scale: 1
lb_config:
port_rules:
- source_port: 80
target_port: 80
service: proxy
health_check:
port: 42
interval: 2000
unhealthy_threshold: 3
healthy_threshold: 2
response_timeout: 2000
jobservice:
scale: 1
ui:
scale: 1
mysql:
scale: 1
harbor-setupwrapper:
scale: 1

View File

@ -0,0 +1,270 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 637.5 225"
height="225"
width="637.5"
xml:space="preserve"
version="1.1"
id="svg2"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
id="clipPath34"
clipPathUnits="userSpaceOnUse"><path
id="path36"
d="M 1006.51,526.57 798.98,618.02 787.426,487.43 1015.64,414.922 1006.51,526.57 Z" /></clipPath><linearGradient
id="linearGradient38"
spreadMethod="pad"
gradientTransform="matrix(228.215,0,0,-228.215,787.427,516.47)"
gradientUnits="userSpaceOnUse"
y2="0"
x2="1"
y1="0"
x1="0"><stop
id="stop40"
offset="0"
style="stop-opacity:1;stop-color:#60b932" /><stop
id="stop42"
offset="0.28177946"
style="stop-opacity:1;stop-color:#60b932" /><stop
id="stop44"
offset="1"
style="stop-opacity:1;stop-color:#367c34" /></linearGradient><clipPath
id="clipPath52"
clipPathUnits="userSpaceOnUse"><path
id="path54"
d="m 839.609,1031.79 116.543,0 0,-99.427 -27.656,0 0,42.469 c 0,16.84 -13.773,30.618 -30.613,30.618 -16.84,0 -30.617,-13.778 -30.617,-30.618 l 0,-42.469 -27.657,0 0,99.427 z m -23.285,-217.767 172.906,-76.195 -11.921,145.813 22.629,0 0,48.722 -16.79,0 0,99.427 16.79,0 0,28.58 -93.254,91.25 0,6.42 c 0,4.84 -3.961,8.8 -8.801,8.8 -4.84,0 -8.801,-3.96 -8.801,-8.8 l 0,-6.42 -93.258,-91.25 0,-28.58 16.793,0 0,-99.427 -16.793,0 0,-48.722 26.66,0 -6.16,-69.618 z" /></clipPath><linearGradient
id="linearGradient56"
spreadMethod="pad"
gradientTransform="matrix(204.111,0,0,-204.111,795.826,952.335)"
gradientUnits="userSpaceOnUse"
y2="0"
x2="1"
y1="0"
x1="0"><stop
id="stop58"
offset="0"
style="stop-opacity:1;stop-color:#60b932" /><stop
id="stop60"
offset="0.28177946"
style="stop-opacity:1;stop-color:#60b932" /><stop
id="stop62"
offset="1"
style="stop-opacity:1;stop-color:#367c34" /></linearGradient><clipPath
id="clipPath70"
clipPathUnits="userSpaceOnUse"><path
id="path72"
d="m 806.199,699.59 193.121,-85.11 -2.898,35.442 -187.317,82.539 -2.906,-32.871 z" /></clipPath><linearGradient
id="linearGradient74"
spreadMethod="pad"
gradientTransform="matrix(193.121,0,0,-193.121,806.199,673.47)"
gradientUnits="userSpaceOnUse"
y2="0"
x2="1"
y1="0"
x1="0"><stop
id="stop76"
offset="0"
style="stop-opacity:1;stop-color:#60b932" /><stop
id="stop78"
offset="0.28177946"
style="stop-opacity:1;stop-color:#60b932" /><stop
id="stop80"
offset="1"
style="stop-opacity:1;stop-color:#367c34" /></linearGradient><clipPath
id="clipPath88"
clipPathUnits="userSpaceOnUse"><path
id="path90"
d="m 801.137,642.371 203.223,-89.562 -2.89,35.429 -197.423,87 -2.91,-32.867 z" /></clipPath><linearGradient
id="linearGradient92"
spreadMethod="pad"
gradientTransform="matrix(203.228,0,0,-203.228,801.136,614.03)"
gradientUnits="userSpaceOnUse"
y2="0"
x2="1"
y1="0"
x1="0"><stop
id="stop94"
offset="0"
style="stop-opacity:1;stop-color:#60b932" /><stop
id="stop96"
offset="0.28177946"
style="stop-opacity:1;stop-color:#60b932" /><stop
id="stop98"
offset="1"
style="stop-opacity:1;stop-color:#367c34" /></linearGradient><clipPath
id="clipPath106"
clipPathUnits="userSpaceOnUse"><path
id="path108"
d="m 814.172,789.68 -2.91,-32.879 183.015,-80.641 -2.898,35.43 -177.207,78.09 z" /></clipPath><linearGradient
id="linearGradient110"
spreadMethod="pad"
gradientTransform="matrix(183.014,0,0,-183.014,811.262,732.92)"
gradientUnits="userSpaceOnUse"
y2="0"
x2="1"
y1="0"
x1="0"><stop
id="stop112"
offset="0"
style="stop-opacity:1;stop-color:#60b932" /><stop
id="stop114"
offset="0.28177946"
style="stop-opacity:1;stop-color:#60b932" /><stop
id="stop116"
offset="1"
style="stop-opacity:1;stop-color:#367c34" /></linearGradient><clipPath
id="clipPath130"
clipPathUnits="userSpaceOnUse"><path
id="path132"
d="m 1425.85,1236.72 c -26.54,31.73 -56.72,60.31 -89.93,85.04 -4.76,3.54 -9.6,6.96 -14.47,10.34 l -68.19,-70.92 -248.9,-258.85 342.73,177.37 87.87,45.47 c -3.04,3.85 -5.97,7.79 -9.11,11.55 z" /></clipPath><linearGradient
id="linearGradient134"
spreadMethod="pad"
gradientTransform="matrix(398.333,295,295,-398.333,1007.12,1003.81)"
gradientUnits="userSpaceOnUse"
y2="0"
x2="1"
y1="0"
x1="0"><stop
id="stop136"
offset="0"
style="stop-opacity:1;stop-color:#4596d8" /><stop
id="stop138"
offset="0.2"
style="stop-opacity:1;stop-color:#4596d8" /><stop
id="stop140"
offset="1"
style="stop-opacity:1;stop-color:#ffffff" /></linearGradient><clipPath
id="clipPath148"
clipPathUnits="userSpaceOnUse"><path
id="path150"
d="m 1548.16,904.152 c -0.05,6.012 -0.41,11.946 -0.66,17.911 l -97.38,6.988 -445.76,31.992 437.31,-151.719 91.93,-31.894 c 0.27,1.09 0.58,2.16 0.84,3.261 8.94,38.36 13.82,78.262 13.82,119.309 0,1.391 -0.09,2.762 -0.1,4.152 z" /></clipPath><linearGradient
id="linearGradient152"
spreadMethod="pad"
gradientTransform="matrix(571.667,-116.667,-116.667,-571.667,1004,959.247)"
gradientUnits="userSpaceOnUse"
y2="0"
x2="1"
y1="0"
x1="0"><stop
id="stop154"
offset="0"
style="stop-opacity:1;stop-color:#4194d7" /><stop
id="stop156"
offset="0.2"
style="stop-opacity:1;stop-color:#4194d7" /><stop
id="stop158"
offset="1"
style="stop-opacity:1;stop-color:#ffffff" /></linearGradient><clipPath
id="clipPath166"
clipPathUnits="userSpaceOnUse"><path
id="path168"
d="m 1533.81,1022.04 c -9.54,39.96 -23.71,78.1 -41.81,113.96 l -93.52,-30.05 -387.37,-124.485 429.18,14.613 98.25,3.348 c -1.46,7.574 -2.95,15.144 -4.73,22.614 z" /></clipPath><linearGradient
id="linearGradient170"
spreadMethod="pad"
gradientTransform="matrix(526.667,95,95,-526.667,1012.79,977.078)"
gradientUnits="userSpaceOnUse"
y2="0"
x2="1"
y1="0"
x1="0"><stop
id="stop172"
offset="0"
style="stop-opacity:1;stop-color:#4194d7" /><stop
id="stop174"
offset="0.332637"
style="stop-opacity:1;stop-color:#4496d8" /><stop
id="stop176"
offset="1"
style="stop-opacity:1;stop-color:#ffffff" /></linearGradient></defs><g
transform="matrix(1.25,0,0,-1.25,0,225)"
id="g10"><g
transform="scale(0.1,0.1)"
id="g12"><path
id="path14"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 572.695,900 c 0,248.53 201.473,450 450.005,450 248.52,0 450,-201.47 450,-450 0,-248.531 -201.48,-450 -450,-450 -248.532,0 -450.005,201.469 -450.005,450" /><path
id="path16"
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 1776.93,1083.54 c 0,13.16 10.77,23.94 23.34,23.94 13.16,0 23.93,-10.78 23.93,-23.94 l 0,-165.177 241.78,0 0,165.177 c 0,13.16 10.77,23.94 23.93,23.94 12.57,0 23.34,-10.78 23.34,-23.94 l 0,-377.028 c 0,-13.172 -10.77,-23.942 -23.34,-23.942 -13.16,0 -23.93,10.77 -23.93,23.942 l 0,167.566 -241.78,0 0,-167.566 c 0,-13.172 -10.77,-23.942 -23.93,-23.942 -12.57,0 -23.34,10.77 -23.34,23.942 l 0,377.028" /><path
id="path18"
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 2483.73,839.371 -96.35,214.239 -96.35,-214.239 192.7,0 z M 2187.5,716.68 l 169.96,371.64 c 5.98,13.17 14.96,20.95 29.92,20.95 l 2.4,0 c 14.36,0 23.93,-7.78 29.32,-20.95 l 169.95,-371.031 c 1.8,-4.187 3,-8.379 3,-11.969 0,-12.57 -10.17,-22.75 -22.74,-22.75 -11.37,0 -19.15,7.782 -23.34,17.36 l -43.68,96.351 -229.81,0 -43.69,-97.551 c -4.19,-10.171 -11.96,-16.16 -22.75,-16.16 -11.96,0 -21.54,9.578 -21.54,21.551 0,3.59 0.61,7.777 3,12.559" /><path
id="path20"
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 2839.84,890.836 c 62.84,0 107.72,32.312 107.72,86.176 l 0,1.195 c 0,51.463 -39.49,82.593 -107.12,82.593 l -129.27,0 0,-169.964 128.67,0 z M 2663.9,1080.54 c 0,13.17 10.77,23.94 23.34,23.94 l 156.78,0 c 51.48,0 92.77,-15.56 119.1,-41.89 20.35,-20.35 32.32,-49.67 32.32,-82.586 l 0,-1.195 c 0,-68.825 -46.68,-108.922 -111.91,-121.489 l 104.13,-134.05 c 4.78,-5.391 7.78,-10.77 7.78,-17.36 0,-12.57 -11.97,-23.34 -23.95,-23.34 -9.57,0 -16.74,5.391 -22.13,12.571 l -117.9,153.203 -120.29,0 0,-141.832 c 0,-13.172 -10.77,-23.942 -23.93,-23.942 -12.57,0 -23.34,10.77 -23.34,23.942 l 0,374.028" /><path
id="path22"
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 3265.37,728.059 c 63.44,0 102.93,28.121 102.93,74.8 l 0,1.2 c 0,45.484 -38.3,71.816 -111.31,71.816 l -132.25,0 0,-147.816 140.63,0 z m -16.76,189.707 c 56.86,0 96.35,25.73 96.35,74.808 l 0,1.196 c 0,41.29 -32.91,68.22 -92.75,68.22 l -127.47,0 0,-144.224 123.87,0 z m -170.55,162.774 c 0,13.17 10.77,23.94 23.34,23.94 l 155,0 c 47.87,0 85.57,-13.76 109.51,-37.1 17.35,-17.95 26.93,-40.1 26.93,-67.03 l 0,-1.194 c 0,-54.461 -33.51,-82.59 -66.42,-96.949 49.66,-14.961 89.76,-43.687 89.76,-101.137 l 0,-1.199 c 0,-71.812 -60.45,-114.301 -152.01,-114.301 l -162.77,0 c -12.57,0 -23.34,10.77 -23.34,23.93 l 0,371.04" /><path
id="path24"
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 3851.28,893.828 0,1.195 c 0,95.153 -69.42,172.947 -165.18,172.947 -95.75,0 -163.97,-76.599 -163.97,-171.747 l 0,-1.2 c 0,-95.152 69.42,-172.953 165.17,-172.953 95.76,0 163.98,76.602 163.98,171.758 z m -378.22,0 0,1.195 c 0,115.497 86.77,216.637 214.24,216.637 127.48,0 213.05,-99.94 213.05,-215.437 l 0,-1.2 c 0,-115.503 -86.78,-216.644 -214.25,-216.644 -127.47,0 -213.04,99.949 -213.04,215.449" /><path
id="path26"
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 4157.73,890.836 c 62.84,0 107.72,32.312 107.72,86.176 l 0,1.195 c 0,51.463 -39.49,82.593 -107.12,82.593 l -129.27,0 0,-169.964 128.67,0 z m -175.94,189.704 c 0,13.17 10.77,23.94 23.34,23.94 l 156.78,0 c 51.48,0 92.77,-15.56 119.1,-41.89 20.35,-20.35 32.32,-49.67 32.32,-82.586 l 0,-1.195 c 0,-68.825 -46.68,-108.922 -111.91,-121.489 l 104.13,-134.05 c 4.78,-5.391 7.78,-10.77 7.78,-17.36 0,-12.57 -11.97,-23.34 -23.95,-23.34 -9.57,0 -16.74,5.391 -22.13,12.571 l -117.89,153.203 -120.3,0 0,-141.832 c 0,-13.172 -10.77,-23.942 -23.93,-23.942 -12.57,0 -23.34,10.77 -23.34,23.942 l 0,374.028" /><path
id="path28"
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 4453.96,1101.82 c 0,4.53 3.13,7.68 7.67,7.68 l 2.09,0 c 3.15,0 5.24,-1.4 6.98,-3.85 l 37.69,-58.62 38.39,58.62 c 1.75,2.45 3.84,3.85 6.63,3.85 l 2.09,0 c 3.85,0 7.33,-3.49 7.33,-7.68 l 0,-94.22 c 0,-4.19 -3.48,-7.682 -7.67,-7.682 -4.19,0 -7.34,3.492 -7.34,7.682 l 0,72.58 -32.45,-48.5 c -1.75,-2.8 -3.84,-4.54 -6.98,-4.54 -3.14,0 -5.24,1.74 -6.97,4.54 l -32.11,48.5 0,-72.58 c 0,-4.19 -3.49,-7.682 -7.68,-7.682 -4.19,0 -7.67,3.492 -7.67,7.682 l 0,94.22 z m -73.64,-7.33 -28.96,0 c -3.84,0 -7.34,3.49 -7.34,7.33 0,3.83 3.5,7.32 7.34,7.32 l 72.93,0 c 4.19,0 7.33,-3.49 7.33,-7.32 0,-3.84 -3.14,-7.33 -7.33,-7.33 l -28.62,0 0,-86.89 c 0,-4.19 -3.48,-7.682 -8.02,-7.682 -4.19,0 -7.33,3.492 -7.33,7.682 l 0,86.89" /><g
id="g30"><g
clip-path="url(#clipPath34)"
id="g32"><path
id="path46"
style="fill:url(#linearGradient38);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 1006.51,526.57 798.98,618.02 787.426,487.43 1015.64,414.922 1006.51,526.57" /></g></g><g
id="g48"><g
clip-path="url(#clipPath52)"
id="g50"><path
id="path64"
style="fill:url(#linearGradient56);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 839.609,1031.79 116.543,0 0,-99.427 -27.656,0 0,42.469 c 0,16.84 -13.773,30.618 -30.613,30.618 -16.84,0 -30.617,-13.778 -30.617,-30.618 l 0,-42.469 -27.657,0 0,99.427 z m -23.285,-217.767 172.906,-76.195 -11.921,145.813 22.629,0 0,48.722 -16.79,0 0,99.427 16.79,0 0,28.58 -93.254,91.25 0,6.42 c 0,4.84 -3.961,8.8 -8.801,8.8 -4.84,0 -8.801,-3.96 -8.801,-8.8 l 0,-6.42 -93.258,-91.25 0,-28.58 16.793,0 0,-99.427 -16.793,0 0,-48.722 26.66,0 -6.16,-69.618" /></g></g><g
id="g66"><g
clip-path="url(#clipPath70)"
id="g68"><path
id="path82"
style="fill:url(#linearGradient74);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 806.199,699.59 193.121,-85.11 -2.898,35.442 -187.317,82.539 -2.906,-32.871" /></g></g><g
id="g84"><g
clip-path="url(#clipPath88)"
id="g86"><path
id="path100"
style="fill:url(#linearGradient92);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 801.137,642.371 203.223,-89.562 -2.89,35.429 -197.423,87 -2.91,-32.867" /></g></g><g
id="g102"><g
clip-path="url(#clipPath106)"
id="g104"><path
id="path118"
style="fill:url(#linearGradient110);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 814.172,789.68 -2.91,-32.879 183.015,-80.641 -2.898,35.43 -177.207,78.09" /></g></g><path
id="path120"
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 1398.48,1105.95 1492,1136 c -0.34,0.66 -0.62,1.36 -0.96,2.01 -15.8,30.98 -34.7,60.09 -56.08,87.16 l -87.87,-45.47 c 19.17,-22.23 36.21,-46.32 50.56,-72.15 0.29,-0.52 0.54,-1.07 0.83,-1.6" /><path
id="path122"
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 1450.12,929.051 97.38,-6.988 c -1.1,26.328 -4.09,52.16 -8.96,77.363 l -98.25,-3.348 c 5.01,-21.762 8.29,-44.148 9.83,-67.027" /><path
id="path124"
style="fill:#696566;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 1022.7,471.289 c -236.395,0 -428.723,192.32 -428.723,428.711 0,236.39 192.328,428.71 428.723,428.71 84.83,0 163.93,-24.84 230.56,-67.53 l 68.19,70.92 c -84.89,58.88 -187.85,93.48 -298.75,93.48 -289.802,0 -525.571,-235.78 -525.571,-525.58 0,-289.801 235.769,-525.578 525.571,-525.578 247.58,0 455.51,172.168 510.9,403.008 l -91.93,31.894 C 1399.94,616.352 1227.98,471.289 1022.7,471.289" /><g
id="g126"><g
clip-path="url(#clipPath130)"
id="g128"><path
id="path142"
style="fill:url(#linearGradient134);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 1425.85,1236.72 c -26.54,31.73 -56.72,60.31 -89.93,85.04 -4.76,3.54 -9.6,6.96 -14.47,10.34 l -68.19,-70.92 -248.9,-258.85 342.73,177.37 87.87,45.47 c -3.04,3.85 -5.97,7.79 -9.11,11.55" /></g></g><g
id="g144"><g
clip-path="url(#clipPath148)"
id="g146"><path
id="path160"
style="fill:url(#linearGradient152);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 1548.16,904.152 c -0.05,6.012 -0.41,11.946 -0.66,17.911 l -97.38,6.988 -445.76,31.992 437.31,-151.719 91.93,-31.894 c 0.27,1.09 0.58,2.16 0.84,3.261 8.94,38.36 13.82,78.262 13.82,119.309 0,1.391 -0.09,2.762 -0.1,4.152" /></g></g><g
id="g162"><g
clip-path="url(#clipPath166)"
id="g164"><path
id="path178"
style="fill:url(#linearGradient170);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 1533.81,1022.04 c -9.54,39.96 -23.71,78.1 -41.81,113.96 l -93.52,-30.05 -387.37,-124.485 429.18,14.613 98.25,3.348 c -1.46,7.574 -2.95,15.144 -4.73,22.614" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -0,0 +1,7 @@
name: Project Harbor
description: |
(Experimental) Enterprise Class Container Registry [by VMware]
version: 1.1.1-1-rev1
category: Private Container Registry
projectURL: https://github.com/vmware/harbor
license: Apache License 2.0