RegistryRepository
Fonctionnalité déployée et prise en charge. Les champs et commandes décrits ici sont stables au sein de la version v1alpha1.
apiVersion | registry.stackngo.io/v1alpha1 |
kind | RegistryRepository |
| Appliqué par | sng apply |
| Commandes liées | sng registry create NAME (génère et applique ce manifeste), sng registry delete NAME, sng kind list RegistryRepository, sng template gen RegistryRepository |
À quoi ça sert
Un RegistryRepository déclare le dépôt <cluster>.registry.dev.stackngo.fr/<tenant>/<nom> (par exemple
ovh-gra-0.registry.dev.stackngo.fr/<tenant>/<nom>) sur le registre de son cluster ; il n'est pas répliqué. Tant qu'il
n'existe pas, le registre refuse tout accès à ce chemin, quels que soient vos droits : un
dépôt est un acte volontaire, versionné avec le reste du tenant. Le manifeste fixe aussi la
visibilité (pull anonyme ou non), la rétention des tags et ce qu'il advient des images
quand on supprime la déclaration. Les droits d'accès, eux, viennent des policies du tenant
(registry:pull, registry:push, registry:delete sur repository/<nom>).
Exemple minimal
apiVersion: registry.stackngo.io/v1alpha1
kind: RegistryRepository
metadata:
name: web
spec: {}
sng apply web.yml
Équivalent sans manifeste : sng registry create web. Sans retention, tous les tags sont gardés.
Exemple complet commenté
apiVersion: registry.stackngo.io/v1alpha1
kind: RegistryRepository
metadata:
name: web # composant OCI : ovh-gra-0.registry.dev.stackngo.fr/<tenant>/web
spec:
description: Images de l'application web # libre, 512 caractères au plus
public: false # true : pull anonyme ; push et delete exigent toujours une session
retention:
keepLastCount: 20 # garde les 20 derniers tags poussés (hors keepTagsRegex)
keepDays: 90 # garde les tags poussés depuis moins de 90 jours
keepTagsRegex: # garde pour toujours ces tags (regex Go, 16 au plus)
- '^v\d+\.\d+\.\d+$'
deleteUntagged: true # efface les images sans tag (défaut)
deletionPolicy: Block # Block (défaut) : refuse la suppression tant qu'il reste des tags ; Delete : purge
Équivalent : sng registry create web --description "Images de l'application web" --keep-last 20 --keep-days 90 --keep-tag '^v\d+\.\d+\.\d+$'.
Champs
Règles de validation croisées
Le schéma refuse, dès sng apply :
- un
metadata.namequi n'est pas un composant OCI : minuscules et chiffres, séparateurs.,_ou-entre deux caractères alphanumériques (^[a-z0-9]+([._-][a-z0-9]+)*$) ; descriptionde plus de 512 caractères ;keepLastCounthors de 0 à 100 000,keepDayshors de 0 à 3650, plus de 16keepTagsRegex;deletionPolicyautre queBlockouDelete.
La plateforme vérifie en plus, après l'enregistrement, que chaque keepTagsRegex est une
expression régulière Go valide ; sinon le dépôt passe Ready=False avec la raison InvalidSpec, et sa rétention
n'est pas appliquée (tout est gardé). sng registry create fait ce contrôle avant l'envoi.
Une rétention qui ne donne que keepTagsRegex (sans keepLastCount ni keepDays) garde
tous les tags.
RegistryRepository
RegistryRepository déclare le dépôt d'images <tenant>/<nom> dans le registre de la plateforme. Les chemins imbriqués (<tenant>/<nom>/<suite>) ne sont pas pris en charge. Le registre refuse tout accès à un dépôt qui n'est pas déclaré.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
apiVersion string | registry.stackngo.io/v1alpha1 | ||
kind string | RegistryRepository | ||
metadata ObjectMeta | Seul metadata.name est à renseigner (nom de la ressource dans votre tenant). | ||
spec RegistryRepositorySpec | |||
status RegistryRepositoryStatus |
RegistryRepositorySpec
RegistryRepositorySpec décrit le dépôt d'images souhaité.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
description string | Description libre du dépôt (512 caractères au plus). | MaxLength: 512 Optional: {} | |
public boolean | Public autorise le téléchargement (pull) sans authentification. Pousser et supprimer exigent toujours une session. | Optional: {} | |
retention RetentionSpec | Retention définit les tags conservés. Absent : tous les tags sont conservés. | Optional: {} | |
deletionPolicy DeletionPolicy | DeletionPolicy : Block (défaut) refuse de supprimer un dépôt qui contient encore des tags ; Delete supprime le dépôt et toutes ses images. | Block | Enum: [Block Delete] Optional: {} |
RegistryRepositoryStatus
RegistryRepositoryStatus est l'état du dépôt constaté par la plateforme.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
observedGeneration integer | ObservedGeneration est la dernière version du manifeste prise en compte. | ||
conditions Condition array | Conditions : Ready (ressource prête), Synced (registre à jour), Deleting (suppression en cours). | ||
repository string | Repository est le chemin complet du dépôt dans le registre : <tenant>/<nom>. |
RetentionSpec
RetentionSpec décrit les tags conservés. Un tag est conservé s'il correspond à KeepTagsRegex, s'il fait partie des KeepLastCount derniers poussés, ou s'il a été poussé depuis moins de KeepDays jours. Les autres tags sont supprimés automatiquement.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
keepLastCount integer | KeepLastCount conserve les N tags poussés le plus récemment (0 à 100000). | Maximum: 100000 Minimum: 0 Optional: {} | |
keepDays integer | KeepDays conserve les tags poussés depuis moins de N jours (0 à 3650). | Maximum: 3650 Minimum: 0 Optional: {} | |
keepTagsRegex string array | KeepTagsRegex : expressions régulières ; les tags qui y correspondent ne sont jamais supprimés. | MaxItems: 16 Optional: {} | |
deleteUntagged boolean | DeleteUntagged supprime les images sans tag (défaut : true). | Optional: {} |
DeletionPolicy
Type sous-jacent : string
DeletionPolicy indique ce que deviennent les images quand vous supprimez le dépôt.
Règles de validation :
Enum: [Block Delete]
| Valeur | Description |
|---|---|
Block | DeletionPolicyBlock : la suppression reste en attente tant que le dépôt contient des tags. |
Delete | DeletionPolicyDelete : toutes les images du dépôt sont supprimées avec lui. |
Statut et conditions
status.repository donne le chemin complet <tenant>/<nom>.
| Condition | True quand | False quand |
|---|---|---|
Ready | le dépôt est déclaré et sa spec est valide (raison Reconciled) | la spec est invalide (raison InvalidSpec) |
Synced | posée à True avec Ready | — |
Deleting | la suppression est en cours mais ne peut pas aboutir (DeletionBlocked, RegistryUnavailable) | — (absente hors suppression) |
reason | Condition | Explication | Action |
|---|---|---|---|
Reconciled | Ready, Synced | Dépôt déclaré, rétention appliquée | — |
InvalidSpec | Ready | Une keepTagsRegex ne compile pas, ou le nom du tenant n'est pas un composant OCI valide | Corriger l'expression et réappliquer ; pour le nom du tenant, contacter le support |
DeletionBlocked | Deleting | deletionPolicy: Block et des tags restent (le message en donne le nombre) ; ou, avec Delete, un tag a été poussé pendant la purge | Supprimer les tags restants, ou passer deletionPolicy: Delete avant la suppression ; nouvel essai chaque minute |
RegistryUnavailable | Deleting | Le registre n'a pas répondu pendant la suppression | Rien : nouvel essai chaque minute |
sng kind get RegistryRepository web affiche le manifeste enregistré, puis ces conditions en
commentaires (# status:) ; --json donne le status complet.
Ce qui se passe à l'application
Création. Dès que le manifeste est appliqué, le dépôt est accessible selon vos policies. Il reste vide tant qu'aucune image n'est poussée.
Mise à jour. Un nouveau sng apply (ou sng registry create avec d'autres flags)
remplace la rétention, la visibilité et la politique de suppression. La nouvelle rétention
s'applique au prochain nettoyage du registre (toutes les 24 heures) ; elle ne restaure pas
des tags déjà effacés.
Ce qui se passe quand vous supprimez
sng registry delete web ou sng kind delete RegistryRepository web. Dès le début de la suppression,
le dépôt n'accepte plus de push et sa rétention cesse de s'appliquer ; le pull reste
possible tant que le dépôt existe.
deletionPolicy | Tags présents | Effet |
|---|---|---|
Block (défaut) | oui | le dépôt reste, Deleting=True / DeletionBlocked, nouvel essai chaque minute |
Block | non | le dépôt disparaît |
Delete | — | toutes les images taguées sont effacées, puis le dépôt disparaît |
Redéclarer ensuite un dépôt du même nom le rend de nouveau accessible ; il est vide, puisque
ses images ont été purgées (Delete) ou effacées à la main (Block).
Erreurs fréquentes
| Symptôme | Cause | Correction |
|---|---|---|
sng apply refuse : metadata.name must be a valid OCI repository component | Majuscule, /, séparateur en tête ou en fin de nom | Choisir un nom comme shop-api ou tools.v2 |
docker push refusé (unauthorized) juste après la déclaration | Le manifeste n'est pas encore appliqué par la plateforme | Réessayer après quelques instants |
docker push refusé alors que le dépôt existe | Pas de registry:push sur repository/<nom>, ou dépôt en cours de suppression | Vérifier les policies ; un dépôt en suppression n'accepte plus de push |
| Des tags anciens restent malgré la rétention | Le nettoyage n'est pas encore passé, regex invalide (InvalidSpec), ou seuls des keepTagsRegex sont donnés | Attendre le passage suivant ; corriger la regex ; ajouter keepLastCount ou keepDays |
Le dépôt ne disparaît pas après sng registry delete | deletionPolicy: Block et des tags restent | Supprimer les tags (sng registry delete web:TAG) ou redéclarer avec --deletion-policy Delete puis supprimer |
| Pull anonyme refusé | public absent ou false | public: true (sng registry create NAME --public) |
invalid repository "web/cache" | Sous-chemins non pris en charge | Un dépôt par nom : web-cache |
Voir aussi
- Guides : Vue d'ensemble, Dépôts et rétention, Pousser et tirer des images
- CLI :
sng registry,sng kind - Autres kinds :
RegistryAccessKey,App(imagePullSecrets) - Sécurité : Vos images sont privées