RepositoryMirror - Manage Quay Container Registry repository mirror configurations
The RepositoryMirror custom resource relies on a Secret resource to provide the connection parameters to the Quay instance. This Secret resource must include the following data:
host
: URL for accessing the Quay API, such ashttps://quay.example.com:8443
for example.validateCerts
: Whether to allow insecure connections to the API. By default, insecure connections are refused.token
: OAuth access token for authenticating against the API. To create such a token see the Creating an OAuth Access Token documentation. You can also use the ApiToken custom resource to create this token.username
: The username to use for authenticating against the API. Iftoken
is set, thenusername
is ignored.password
: The password to use for authenticating against the API. Iftoken
is set, thenpassword
is ignored.
You can create the secret by using the kubectl create secret
command:
kubectl create secret generic quay-credentials --from-literal host=https://quay.example.com:8443 --from-literal validateCerts=false --from-literal token=vFYyU2D0fHYXvcA3Y5TYfMrIMyVIH9YmxoVLsmku
Or you can create the secret from a resource file:
---
apiVersion: v1
kind: Secret
metadata:
name: quay-credentials
stringData:
host: https://quay.example.com:8443
validateCerts: "false"
token: vFYyU2D0fHYXvcA3Y5TYfMrIMyVIH9YmxoVLsmku
You refer to this secret in your RepositoryMirror custom resource by using the connSecretRef
property.
See the usage example.
Warning
Do not delete the Secret resource if a Quay custom resource still references it. If you delete the Secret resource, then the Operator cannot connect to the Quay API anymore, and cannot synchronize the Quay custom resource with its corresponding object in Quay. In addition, deleting the Quay custom resource does not complete because the Operator cannot delete the corresponding object in Quay.
If you face this issue, then edit the custom resource (kubectl edit
), and set the .spec.preserveInQuayOnDeletion property to true
.
Alternatively, you can remove the .metadata.finalizers
section.
In both case, you must manually delete the corresponding object in Quay.
Usage Example
---
apiVersion: quay.herve4m.github.io/v1alpha1
kind: RepositoryMirror
metadata:
name: repositorymirror-sample
spec:
# Connection parameters in a Secret resource
connSecretRef:
name: quay-credentials
# By default, the operator looks for the secret in the same namespace as
# the repositorymirror resource, but you can specify a different namespace.
# namespace: mynamespace
# Whether to preserve the corresponding configuration in Quay when you
# delete the RepositoryMirror resource.
preserveInQuayOnDeletion: false
name: production/ubi9
isEnabled: true
externalReference: registry.access.redhat.com/ubi9-micro
verifyTls: true
httpProxy: http://proxy.example.com:3128
noProxy: registry.access.redhat.com
# externalRegistryUsername: jsmith
# externalRegistryPassword: Sup3r53cr3t
robotUsername: production+robotprod1
imageTags:
- "9.4"
- "9.3"
syncInterval: "172800"
syncStartDate: "2023-05-25T21:06:00Z"
Properties
connSecretRef
Reference to the secret resource that stores the connection parameters to the Quay Container Registry API.
The secret must include the host
, token
(or username
and password
), and optionally the validateCerts
keys.
Type: object (see the following properties)
Required: True
Default value: None
connSecretRef.name
Name of the secret resource.
Type: string
Required: True
Default value: None
connSecretRef.namespace
Namespace of the secret resource. By default, the secret resource is retrieved from the same namespace as the current RepositoryMirror resource.
Type: string
Required: False
Default value: None
externalReference
Path to the remote container repository to synchronize, such as quay.io/projectquay/quay for example. This parameter is required when creating the mirroring configuration.
Type: string
Required: False
Default value: None
externalRegistryPassword
Password to use for pulling the image from the remote registry.
Type: string
Required: False
Default value: None
externalRegistryUsername
Username to use for pulling the image from the remote registry.
Type: string
Required: False
Default value: None
forceSync
Triggers an immediate image synchronization.
Type: boolean
Required: False
Default value: None
httpProxy
HTTP proxy to use for accessing the remote container registry. See the curl
documentation for more details. By default, no proxy is used.
Type: string
Required: False
Default value: None
httpsProxy
HTTPS proxy to use for accessing the remote container registry. See the curl
documentation for more details. By default, no proxy is used.
Type: string
Required: False
Default value: None
imageTags
List of image tags to be synchronized from the remote repository.
Type: array
Required: False
Default value: None
isEnabled
Defines whether the mirror configuration is active or inactive. false
by default.
Type: boolean
Required: False
Default value: None
name
Name of the existing repository for which the mirror parameters are configured. The format for the name is namespace
/shortname
.The namespace can be an organization or your personal namespace. If you omit the namespace part in the name, then the resource looks for the repository in your personal namespace. You can manage mirrors for repositories in your personal namespace, but not in the personal namespace of other users. The token you use in quayToken
determines the user account you are using.
Type: string
Required: True
Default value: None
noProxy
Comma-separated list of hosts for which the proxy should not be used. Only relevant when you also specify a proxy configuration by setting the httpProxy
or httpsProxy
variables. See the curl
documentation for more details.
Type: string
Required: False
Default value: None
preserveInQuayOnDeletion
Whether to preserve the corresponding Quay object when you delete the RepositoryMirror resource. When set to false
(the default), the object is deleted from Quay.
Type: boolean
Required: False
Default value: False
robotUsername
Username of the robot account that is used for synchronization. This parameter is required when creating the mirroring configuration.
Type: string
Required: False
Default value: None
syncInterval
Synchronization interval for this repository mirror in seconds. The syncInterval
parameter accepts a time unit as a suffix; s
for seconds, m
for minutes, h
for hours, d
for days, and w
for weeks. For example, 8h
for eight hours. 86400 (one day) by default.
Type: string
Required: False
Default value: None
syncStartDate
The date and time at which the first synchronization should be initiated. The format for the syncStartDate
parameter is ISO 8601 UTC, such as 2021-12-02T21:06:00Z. If you do not provide the syncStartDate
parameter when you configure a new repository mirror, then the synchronization is immediately active, and a synchronization is initiated if the isEnabled
parameter is true
.
Type: string
Required: False
Default value: None
verifyTls
Defines whether TLS of the external registry should be verified. true
by default.
Type: boolean
Required: False
Default value: None
Listing the RepositoryMirror Resources
You can retrieve the list of the RepositoryMirror custom resources in a namespace by using the kubectl get
command:
kubectl get repositorymirrors.quay.herve4m.github.io -n <namespace>