Opinionated deployment of Quay container registry on Kubernetes.
The original version of the quay-operator is available on the v1 branch. The next generation operator, known as TNG or v2, is developed on master branch.
This Operator can be installed on any Kubernetes cluster running the Operator Lifecycle Manager. Simply create the provided CatalogSource
to make the package available on the cluster, then create the Subscription
to install it.
You can find the latest operator release on operatorhub.io.
The fastest way to get started is by deploying the operator in an OCP/OKD cluster
using the setup scripts provided in the hack
directory:
./hack/storage.sh # install noobaa via ODF operator
./hack/deploy.sh
oc create -n <your-namespace> -f ./config/samples/managed.quayregistry.yaml
Or run the steps one by one.
Create the CatalogSource
:
$ kubectl create -n openshift-marketplace -f ./bundle/quay-operator.catalogsource.yaml
Wait a few seconds for the package to become available:
$ kubectl get packagemanifest --all-namespaces | grep quay
Create the OperatorGroup
:
$ kubectl create -n <your-namespace> -f ./bundle/quay-operator.operatorgroup.yaml
Create the Subscription
to install the Operator:
$ kubectl create -n <your-namespace> -f ./bundle/quay-operator.subscription.yaml
When using a downstream build or container image overrides which are hosted in private repositories, you can provide pull secrets by adding them to the default ServiceAccount
in the namespace.
Install RHOCS Operator using OperatorHub:
Create NooBaa
object in openshift-storage
namespace:
$ kubectl create -n openshift-storage -f ./kustomize/components/objectstorage/quay-datastore.noobaa.yaml
Wait a few minutes for Noobaa to be phase: Ready
:
$ kubectl get -n openshift-storage noobaas noobaa -w
NAME MGMT-ENDPOINTS S3-ENDPOINTS IMAGE PHASE AGE
noobaa [https://10.0.32.3:30318] [https://10.0.32.3:31958] registry.redhat.io/ocs4/mcg-core-rhel8@sha256:56624aa7dd4ca178c1887343c7445a9425a841600b1309f6deace37ce6b8678d Ready 3d18h
Create QuayRegistry
instance:
$ kubectl create -n <your-namespace> -f ./config/samples/managed.quayregistry.yaml
Pull requests and bug reports are always welcome!
KUBECONFIG
environment variable set in shell to valid k8s clustergo
kubectl
kubebuilder
docker
Create the QuayRegistry
CRD:
$ kubectl create -f ./bundle/upstream/manifests/*.crd.yaml
Run the controller:
$ make run
Tests:
$ make test
Building custom CatalogSource
:
$ docker build -t <some-registry>/<namespace>/quay-operator:dev .
$ docker push <some-registry>/<namespace>/quay-operator:dev
Replace the image
field in bundle/upstream/manifests/quay-operator.clusterserviceversion.yaml
with the image above.
Build and push an Operator bundle:
$ docker build -t <some-registry>/<namespace>/quay-operator-bundle:dev -f ./bundle/Dockerfile ./bundle
$ docker push <some-registry>/<namespace>/quay-operator-bundle:dev
opm
:$ cd bundle/upstream
$ opm index add --bundles <some-registry>/<namespace>/quay-operator-bundle:dev --tag <some-registry>/<namespace>/quay-operator-index:dev
$ docker push <some-registry>/<namespace>/quay-operator-index:dev
Replace the spec.image
field in bundle/quay-operator.catalogsource.yaml
with the image above.
Create the custom CatalogSource
:
$ kubectl create -n openshift-marketplace -f ./bundle/quay-operator.catalogsource.yaml