ATTENTIONS: THE
main
BRANCH MAY BE IN AN UNSTABLE OR EVEN BROKEN STATE DURING DEVELOPMENT.
Harbor is a CNCF hosted open source trusted cloud-native registry project that stores, signs, and scans content. Harbor is composed on numerous stateful and stateless components and dependencies that may be deployed, updated, healed, backuped or scaled respecting some constraints.
The Harbor Operator provides an easy and solid solution to deploy and manage a full Harbor service stack including both the harbor service components and its relevant dependent services such as database, cache and storage services to the target Kubernetes clusters in a scalable and high-available way. The Harbor Operator defines a set of Harbor-related custom resources on top of Kubernetes Custom Resources. The Kubernetes API can then be used in a declarative way to manage Harbor deployment stack and ensure its scalability and high-availability operation, thanks to the Kubernetes control loop. The project harbor-operator aims to cover both Day1
and Day2
operations of an enterprise-grade Harbor deployment.
Harbor deployment stack is controlled by a custom Harbor resource HarborCluster
. HarborCluster owns the custom resource Harbor
that represents the Harbor own service stack, and the custom resources of the related dependent services (PostgreSQL, Redis and MinIO) that are required when deploying the full Harbor deployment stack.
HarborCluster
CR)
Core
, Registry
, Registry Controller
, Job Service
and Portal
are provisioned.Notary
, Trivy
, ChartMuseum
and Metrics Exporter
can be selected to enable.ncp
recommend
) or labeled ConfigMap (deprecated
)For a quick first try follow the instructions of this tutorial.
Versions of the underlying components are listed below:
Components | Harbor | MinIO operator | PostgreSQL operator | Redis operator |
---|---|---|---|---|
Versions | 2.5.x [1] |
4.4.28 | 1.7.0 | 1.1.1 |
NOTES:
[1] .x
means all the patch releases of Harbor can be naturally supported in one operator version.
Harbor operator supports two extra Kubernetes versions besides the current latest version (n-2
pattern):
Versions | 1.21 | 1.22 | 1.23 | 1.24 |
---|---|---|---|---|
Compatibility | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
Harbor operator relies on cert manager to manage kinds of certificates used by Harbor cluster components. Table shown below lists the compatibilities of cert manager versions:
Versions | 1.6[.3] | 1.7[.3] | 1.8[.2] | 1.9[.1] |
---|---|---|---|---|
Compatibility | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
Harbor operator exposes the frontend service with ingress (CRD version: v1beta1
). Table shown below lists the ingress controller types supported.
Ingress Controller | Compatibility | Description |
---|---|---|
default | :heavy_check_mark: | Default ingress controller like NGINX |
gce | :heavy_check_mark: | Google Cloud Engine ingress controller |
ncp | :heavy_check_mark: | NSX-T Container plugin ingress controller |
contour | :heavy_check_mark: | Ingress controller that works by deploying the Envoy proxy |
NOTES:
:heavy_check_mark: : supported :heavy_multiplication_x: : not supported :o: : not verified (probably supported)
Harbor operator project is developed and maintained by the Harbor operator workgroup. If you're willing to join the group and do contributions to operator project, welcome to contact us. Follow the Development guide to start on the project.
Special thanks to the contributors who did significant contributions (see feature area).
The operator was initially developed by OVHcloud and donated to the Harbor community as one of its governing projects in March 2020, becoming the basis of the official Harbor Operator.
OVHcloud uses the operator at scale to operate part of its private registry service. But the operator was designed in an agnostic way and it's continuing to evolve into a more pervasive architecture to bring values to any companies in search of deploying and managing one or multiple Harbor.
See LICENSE for licensing details.