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.
- Kubernetes is a powerful platform with an abundance of existing and future features. Always prefer to leverage something Kubernetes does better than try to implement it again.
- Favor declarative application management to improve everyone's sanity and understanding of the state.
- Make things simple by default, but always allow diving deeper to discover the details of what is going on.
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.yamlOr run the steps one by one.
Create the CatalogSource:
$ kubectl create -n openshift-marketplace -f ./bundle/quay-operator.catalogsource.yamlWait a few seconds for the package to become available:
$ kubectl get packagemanifest --all-namespaces | grep quayCreate the OperatorGroup:
$ kubectl create -n <your-namespace> -f ./bundle/quay-operator.operatorgroup.yamlCreate the Subscription to install the Operator:
$ kubectl create -n <your-namespace> -f ./bundle/quay-operator.subscription.yamlWhen 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.yamlWait 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 3d18hCreate QuayRegistry instance:
$ kubectl create -n <your-namespace> -f ./config/samples/managed.quayregistry.yaml- Mailing list: [email protected]
- IRC: #quay on freenode.net
- Bug tracking: https://issues.redhat.com/projects/PROJQUAY/summary
- Security issues: [email protected]
Pull requests and bug reports are always welcome!
KUBECONFIGenvironment variable set in shell to valid k8s clustergokubectlkubebuilderdocker
Create the QuayRegistry CRD:
$ kubectl create -f ./bundle/upstream/manifests/*.crd.yamlRun the controller:
$ make runTests:
$ make testBuilding custom CatalogSource:
- Build and push the Quay Operator container:
$ docker build -t <some-registry>/<namespace>/quay-operator:dev .
$ docker push <some-registry>/<namespace>/quay-operator:dev-
Replace the
imagefield inbundle/upstream/manifests/quay-operator.clusterserviceversion.yamlwith 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- Build and push an Operator index image using
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.imagefield inbundle/quay-operator.catalogsource.yamlwith the image above. -
Create the custom
CatalogSource:
$ kubectl create -n openshift-marketplace -f ./bundle/quay-operator.catalogsource.yaml