Skip to content

Commit b3e459e

Browse files
stevsmitSteven Smith
andauthored
Updates Quay operator docs for level 3 plus headings and reorganization (quay#1451)
Co-authored-by: Steven Smith <[email protected]>
1 parent 4e15daa commit b3e459e

24 files changed

+322
-486
lines changed

deploy_red_hat_quay_operator/master.adoc

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,49 @@ include::modules/attributes.adoc[]
44
= Deploying the {productname} Operator on {ocp}
55
:context: quay-operator
66

7-
{productname} is an enterprise-quality container registry. Use {productname} to build and store container images, then make them available to deploy across your enterprise.
8-
9-
The {productname} Operator provides a simple method to deploy and manage {productname} on an OpenShift cluster.
10-
11-
//differences
12-
include::modules/operator-differences.adoc[leveloffset=+2]
7+
This document guides you through the process of deploying and configuring {productname} in your environment using the {productname} Operator. The Operator simplifies the installation, configuration, and maintenance of your registry, ensuring you have a production-ready container image repository for your enterprise.
138

149
//concepts
1510
include::modules/operator-concepts.adoc[leveloffset=+1]
1611
include::modules/operator-components-intro.adoc[leveloffset=+2]
17-
include::modules/operator-components-managed.adoc[leveloffset=+2]
18-
include::modules/operator-components-unmanaged.adoc[leveloffset=+2]
19-
include::modules/operator-config-bundle-secret.adoc[leveloffset=+2]
12+
include::modules/understanding-quayregistry-cr.adoc[leveloffset=+3]
13+
include::modules/operator-components-managed.adoc[leveloffset=+4]
14+
include::modules/operator-components-unmanaged.adoc[leveloffset=+4]
15+
include::modules/operator-config-bundle-secret.adoc[leveloffset=+3]
16+
//prerequisites
2017
include::modules/operator-prereq.adoc[leveloffset=+2]
18+
include::modules/openshift-cluster.adoc[leveloffset=+3]
19+
include::modules/resource-requirements.adoc[leveloffset=+3]
20+
21+
include::modules/object-storage.adoc[leveloffset=+3]
22+
//managed storage
23+
include::modules/operator-managed-storage-overview.adoc[leveloffset=4]
24+
//unmanaged storage
25+
include::modules/operator-unmanaged-storage.adoc[leveloffset=+4]
26+
//storage class
27+
include::modules/storage-class.adoc[leveloffset=+3]
2128

2229
//installing the operator
2330
include::modules/operator-install.adoc[leveloffset=+1]
31+
// Deploying
32+
include::modules/deploying-quay-registry.adoc[leveloffset=+1]
33+
//registry deployment
34+
include::modules/registry-deploy-console.adoc[leveloffset=+2]
35+
//cli
36+
include::modules/operator-deploy-cli.adoc[leveloffset=+2]
37+
38+
//post installation configuration
39+
40+
41+
include::modules/first-user-api.adoc[leveloffset=+3]
42+
include::modules/operator-deploy-view-pods-cli.adoc[leveloffset=+3]
43+
include::modules/operator-deploy-hpa.adoc[leveloffset=+3]
2444

2545

2646
//preconfiguration
2747
include::modules/operator-preconfigure.adoc[leveloffset=+1]
2848
include::modules/config-preconfigure-automation.adoc[leveloffset=+2]
29-
include::modules/operator-preconfig-storage.adoc[leveloffset=+2]
30-
include::modules/operator-unmanaged-storage.adoc[leveloffset=+3]
31-
include::modules/operator-unmanaged-storage-noobaa.adoc[leveloffset=+3]
32-
include::modules/operator-managed-storage.adoc[leveloffset=3]
33-
include::modules/operator-standalone-object-gateway.adoc[leveloffset=4]
49+
3450

3551
//traffic ingress
3652
[id="configuring-traffic-ingress"]
@@ -59,13 +75,7 @@ include::modules/operator-unmanaged-route.adoc[leveloffset=+3]
5975
include::modules/operator-unmanaged-monitoring.adoc[leveloffset=+3]
6076
include::modules/operator-unmanaged-mirroring.adoc[leveloffset=+3]
6177

62-
//operator deployment
63-
include::modules/operator-deploy.adoc[leveloffset=+1]
64-
//cli
65-
include::modules/operator-deploy-cli.adoc[leveloffset=+2]
66-
include::modules/first-user-api.adoc[leveloffset=+3]
67-
include::modules/operator-deploy-view-pods-cli.adoc[leveloffset=+3]
68-
include::modules/operator-deploy-hpa.adoc[leveloffset=+3]
78+
6979

7080
//infrastructure
7181
include::modules/operator-deploy-infrastructure.adoc[leveloffset=+1]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
:_mod-docs-content-type: REFERENCE
2+
[id="deploying-quay-registry"]
3+
= Deploying the {productname} registry
4+
5+
To deploy the {productname} registry after installing the Operator, you must create an instance based on the `QuayRegistry` custom resource (CR), which can be done using the {ocp} web console or the `oc cli` (command-line interface). For the registry to deploy successfully, you must have, or configure, an object storage provider.
6+
7+
The following sections provide you with the information necessary to configure managed or unmanaged object storage, and then deploy the {productname} registry.
8+
9+
[NOTE]
10+
====
11+
The following procedures show you how to create a basic {productname} registry in all namespaces of the {ocp} deployment. Depending on your needs, advanced configuration might be necessary. For example, you might need to configure SSL/TLS for your deployment or disable certain components. Advanced configuration practices are covered in later chapters of this guide.
12+
====

modules/object-storage.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
:_mod-docs-content-type: REFERENCE
2+
[id="object-storage"]
3+
= Object Storage
4+
5+
{productname} requires object storage to store all container image layer blobs. You have two options for providing this storage: managed (automated by the Operator) or unmanaged (using an existing external service).

modules/openshift-cluster.adoc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
:_mod-docs-content-type: REFERENCE
2+
[id="openshift-cluster"]
3+
= {ocp} cluster
4+
5+
To deploy and manage the {productname} Operator, you must meet the following requirements:
6+
7+
* An {ocp} cluster running version 4.5 or later.
8+
9+
* An administrative account with sufficient permissions to perform cluster-scoped actions, including the ability to create namespaces.

modules/operator-components-intro.adoc

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,4 @@
22
[id="operator-components-intro"]
33
= {productname-ocp} configuration overview
44

5-
When deploying {productname} using the Operator on {ocp}, configuration is managed declaratively through the `QuayRegistry` custom resource (CR). This model allows cluster administrators to define the desired state of the {productname} deployment, including which components are enabled, storage backends, SSL/TLS configuration, and other core features.
6-
7-
After deploying {productname-ocp} with the Operator, administrators can further customize their registry by updating the `config.yaml` file and referencing it in a Kubernetes secret. This configuration bundle is linked to the `QuayRegistry` CR through the `configBundleSecret` field.
8-
9-
The Operator reconciles the state defined in the `QuayRegistry` CR and its associated configuration, automatically deploying or updating registry components as needed.
10-
11-
This guide covers the basic concepts behind the `QuayRegistry` CR and modifying your `config.yaml` file on {productname-ocp} deployments. More advanced topics, such as using unmanaged components within the `QuayRegistry` CR, can be found in link:https://docs.redhat.com/en/documentation/red_hat_quay/{producty}/html-single/deploying_the_red_hat_quay_operator_on_openshift_container_platform/index[Deploying {productname} Operator on {ocp}].
5+
When deploying {productname-ocp}, the registry configuration is managed declaratively through two primary mechanisms: the `QuayRegistry` custom resource (CR) and the `configBundleSecret` resource.

modules/operator-components-managed.adoc

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
By default, the Operator handles all required configuration and installation needed for {productname}'s managed components.
66
7-
If the opinionated deployment performed by the {productname} Operator is unsuitable for your environment, you can provide the {productname} Operator with `unmanaged` resources, or overrides, as described in link:https://docs.redhat.com/en/documentation/red_hat_quay/{producty}/html-single/deploying_the_red_hat_quay_operator_on_openshift_container_platform/index#operator-components-managed[Using unmanaged components].
8-
97
.QuayRegistry required fields
108
[cols="2a,1a,2a",options="header"]
119
|===

modules/operator-components-unmanaged.adoc

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,11 @@
22
[id="operator-components-unmanaged"]
33
= Using unmanaged components for dependencies
44

5-
If you have existing components such as PostgreSQL, Redis, or object storage that you want to use with {productname}, you first configure them within the {productname} configuration bundle, or the `config.yaml` file. Then, they must be referenced in your `QuayRegistry` bundle as a Kubernetes `Secret` while indicating which components are unmanaged.
6-
7-
//Might be used in a note, however I have removed due to the removal of the config editor on OCP deployments.
8-
9-
//The {productname} config editor can also be used to create or modify an existing config bundle and simplifies the process of updating the Kubernetes `Secret`, especially for multiple changes. When {productname}'s configuration is changed by the config editor and sent to the {productname} Operator, the deployment is updated to reflect the new configuration.
10-
5+
Although the {productname} Operator provides an opinionated deployment by automatically managing all required dependencies, this approach may not be suitable for every environment. If you need to integrate existing infrastructure or require specific configurations, you can leverage the Operator to use external, or _unmanaged_, resources instead. An unmanaged component is any core dependency—such as PostgreSQL, Redis, or object storage—that you deploy and maintain outside of the Operator's control.
116

127
[NOTE]
138
====
149
If you are using an unmanaged PostgreSQL database, and the version is PostgreSQL 10, it is highly recommended that you upgrade to PostgreSQL 13. PostgreSQL 10 had its final release on November 10, 2022 and is no longer supported. For more information, see the link:https://www.postgresql.org/support/versioning/[PostgreSQL Versioning Policy].
1510
====
1611

17-
See the following sections for configuring unmanaged components:
18-
19-
* xref:operator-unmanaged-postgres[Using an existing PostgreSQL database]
20-
* xref:operator-unmanaged-hpa[Using unmanaged Horizontal Pod Autoscalers]
21-
* xref:operator-unmanaged-storage[Using unmanaged storage]
22-
* xref:operator-unmanaged-storage-noobaa[Using an unmanaged NooBaa instance]
23-
* xref:operator-unmanaged-redis[Using an unmanaged Redis database]
24-
* xref:operator-unmanaged-route[Disabling the route component]
25-
* xref:operator-unmanaged-monitoring[Disabling the monitoring component]
26-
* xref:operator-unmanaged-mirroring[Disabling the mirroring component]
12+
For more information about unmanaged components, see. . .

modules/operator-concepts.adoc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22
[id="operator-concepts"]
33
= Introduction to the {productname} Operator
44

5-
Use the content in this chapter to execute the following:
5+
The {productname} Operator is designed to simplify the installation, deployment, and management of the {productname} container registry on {ocp}. By leveraging the Operator framework, you can treat Quay as a native {ocp} application, automating common tasks and managing its full lifecycle.
66

7-
* Install {productname-ocp} using the {productname} Operator
7+
This chapter provides a conceptual overview of the {productname} Operator's architecture and configuration model. It covers the following information:
88

9-
* Configure managed, or unmanaged, object storage
9+
* A configuration overview of {productname} when deployed on {ocp}.
1010
11-
* Configure unmanaged components, such as the database, Redis, routes, TLS, and so on
11+
* How the Operator manages Quay's components, or _managed components_.
1212
13-
* Deploy the {productname} registry on {ocp} using the {productname} Operator
13+
* When and why to use external, or _unmanaged_, components for dependencies like the database and object storage.
1414
15-
* Use advanced features supported by {productname}
15+
* The function and structure of the `configBundleSecret`, which handles Quay's configuration.
1616
17-
* Upgrade the {productname} registry by using the {productname} Operator
17+
* The prerequisites required before installation.

modules/operator-config-bundle-secret.adoc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ The `configBundleSecret` stores the `config.yaml` file. {productname} administra
2121
2222
If this field is omitted, the {productname} Operator automatically generates a configuration secret based on default values and managed component settings. If the field is provided, the contents of the `config.yaml` are used as the base configuration and are merged with values from managed components to form the final configuration, which is mounted into the `quay` application pods.
2323

24+
ifeval::["{context}" == "quay-configuration"]
25+
2426
How the `QuayRegistry` CR is configured determines which fields must be included in the `configBundleSecret`'s `config.yaml` file for {productname-ocp}. The following example shows you a default `config.yaml` file when all components are managed by the Operator. Note that this example looks different depending on whether components are managed or unmanaged (`managed: false`).
2527
2628
.Example YAML with all components managed by the Operator
@@ -69,4 +71,5 @@ DISTRIBUTED_STORAGE_CONFIG:
6971
# ...
7072
----
7173
72-
Similarly, if you are managing the `horizontalpodautoscaler` component, you must create an accompanying link:https://docs.redhat.com/en/documentation/red_hat_quay/{producty}/html-single/deploying_the_red_hat_quay_operator_on_openshift_container_platform/index#operator-disabling-hpa[`HorizontalPodAutoscaler` custom resource].
74+
Similarly, if you are managing the `horizontalpodautoscaler` component, you must create an accompanying link:https://docs.redhat.com/en/documentation/red_hat_quay/{producty}/html-single/deploying_the_red_hat_quay_operator_on_openshift_container_platform/index#operator-disabling-hpa[`HorizontalPodAutoscaler` custom resource].
75+
endif::[]

modules/operator-deploy-cli.adoc

Lines changed: 68 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
:_mod-docs-content-type: PROCEDURE
22
[id="operator-deploy-cli"]
3-
= Deploying {productname} from the command line
3+
= Deploying a basic {productname} registry by using the CLI
44

5-
Use the following procedure to deploy {productname} from using the command-line interface (CLI).
5+
Use the `oc` command-line interface (CLI) to create and deploy a basic {productname} registry instance.
66

77
.Prerequisites
88

@@ -17,65 +17,101 @@ Use the following procedure to deploy {productname} from using the command-line
1717
$ oc new-project quay-enterprise
1818
----
1919

20-
. Optional. If you want to pre-configure any aspects of your {productname} deployment, create a `Secret` for the config bundle:
21-
+
22-
[source,terminal]
23-
----
24-
$ oc create secret generic quay-enterprise-config-bundle --from-file=config-bundle.tar.gz=/path/to/config-bundle.tar.gz
25-
----
20+
. Create the `QuayRegistry` custom resource (CR).
2621

27-
. Create a `QuayRegistry` custom resource in a file called `quayregistry.yaml`
22+
.. If the `objectstorage` component is set to `managed: true`, complete the following steps:
2823

29-
.. For a minimal deployment, using all the defaults:
24+
... Create the `QuayRegistry` CR by entering the following command:
3025
+
31-
.quayregistry.yaml:
32-
[source,yaml]
26+
[source,terminal]
3327
----
28+
$ cat <<EOF | oc create -n quay-enterprise -f -
3429
apiVersion: quay.redhat.com/v1
3530
kind: QuayRegistry
3631
metadata:
3732
name: example-registry
3833
namespace: quay-enterprise
34+
EOF
3935
----
4036

41-
.. Optional. If you want to have some components unmanaged, add this information in the `spec` field. A minimal deployment might look like the following example:
42-
+
43-
.Example quayregistry.yaml with unmanaged components
37+
.. If the `objectstorage` component is set to `managed: false`, complete the following steps:
38+
39+
... Create the a minimal `config.yaml` file for {productname} by entering the following command. You must include the information required for your backend storage provider. For example:
4440
+
4541
[source,yaml]
4642
----
43+
$ cat <<EOF > config.yaml
44+
ALLOW_PULLS_WITHOUT_STRICT_LOGGING: false
45+
AUTHENTICATION_TYPE: Database
46+
DEFAULT_TAG_EXPIRATION: 2w
47+
DISTRIBUTED_STORAGE_CONFIG:
48+
<storage_provider>:
49+
- <storage_provider_name>
50+
- access_key: <access_key>
51+
bucket_name: <bucket_name>
52+
secret_key: <secret_key>
53+
storage_path: /datastorage/registry
54+
ENTERPRISE_LOGO_URL: /static/img/RH_Logo_Quay_Black_UX-horizontal.svg
55+
FEATURE_BUILD_SUPPORT: false
56+
FEATURE_DIRECT_LOGIN: true
57+
FEATURE_MAILING: false
58+
REGISTRY_TITLE: Red Hat Quay
59+
REGISTRY_TITLE_SHORT: Red Hat Quay
60+
SETUP_COMPLETE: true
61+
TAG_EXPIRATION_OPTIONS:
62+
- 2w
63+
TEAM_RESYNC_STALE_TIME: 60m
64+
TESTING: false
65+
EOF
66+
----
67+
68+
.. Create a secret for the configuration by entering the following command:
69+
+
70+
[source,terminal]
71+
----
72+
$ oc create secret generic <quay_config_bundle_name> \
73+
--from-file=config.yaml=</path/to/config.yaml> \
74+
-n quay-enterprise \
75+
--dry-run=client -o yaml | oc apply -f -
76+
----
77+
78+
.. Create the `QuayRegistry` CR by entering the following command:
79+
+
80+
[source,terminal]
81+
----
82+
$ cat <<EOF | oc create -n quay-enterprise -f -
4783
apiVersion: quay.redhat.com/v1
4884
kind: QuayRegistry
4985
metadata:
5086
name: example-registry
5187
namespace: quay-enterprise
5288
spec:
89+
configBundleSecret: <quay_config_bundle_name>
5390
components:
5491
- kind: clair
55-
managed: false
56-
- kind: horizontalpodautoscaler
57-
managed: false
92+
managed: true
93+
- kind: objectstorage
94+
managed: false <1>
5895
- kind: mirror
59-
managed: false
96+
managed: true
6097
- kind: monitoring
61-
managed: false
98+
managed: true
99+
EOF
62100
----
101+
<1> Must be set to false when providing your own storage backend.
63102

64-
.. Optional. If you have created a config bundle, for example, `init-config-bundle-secret`, reference it in the `quayregistry.yaml` file:
65-
+
66-
.Example quayregistry.yaml with a config bundle
103+
. Check the status of your registry by entering the following command:
67104
+
68-
[source,yaml]
105+
[source,terminal]
69106
----
70-
apiVersion: quay.redhat.com/v1
71-
kind: QuayRegistry
72-
metadata:
73-
name: example-registry
74-
namespace: quay-enterprise
75-
spec:
76-
configBundleSecret: init-config-bundle-secret
107+
$ $ oc describe quayregistry <registry_name> -n quay-enterprise
77108
----
78109

110+
.Additional resources
111+
112+
* For more information about how to track the progress of your {productname} deployment, see link:https://access.redhat.com/documentation/en-us/red_hat_quay/{producty}/html-single/deploying_the_red_hat_quay_operator_on_openshift_container_platform/index#operator-monitor-deploy-cli[Monitoring and debugging the deployment process].
113+
114+
////
79115
.. Optional. If you have a proxy configured, you can add the information using overrides for {productname}, Clair, and mirroring:
80116
+
81117
.Example quayregistry.yaml with proxy configured
@@ -129,21 +165,4 @@ spec:
129165
- name: HTTPS_PROXY
130166
value: quayproxy.qe.devcluster.openshift.com:3128
131167
----
132-
133-
. Create the `QuayRegistry` in the specified namespace by entering the following command:
134-
+
135-
[source,terminal]
136-
----
137-
$ oc create -n quay-enterprise -f quayregistry.yaml
138-
----
139-
140-
. Enter the following command to see when the `status.registryEndpoint` is populated:
141-
+
142-
[source,terminal]
143-
----
144-
$ oc get quayregistry -n quay-enterprise example-registry -o jsonpath="{.status.registryEndpoint}" -w
145-
----
146-
147-
.Additional resources
148-
149-
* For more information about how to track the progress of your {productname} deployment, see link:https://access.redhat.com/documentation/en-us/red_hat_quay/{producty}/html-single/deploying_the_red_hat_quay_operator_on_openshift_container_platform/index#operator-monitor-deploy-cli[Monitoring and debugging the deployment process].
168+
////

0 commit comments

Comments
 (0)