Aller au contenu principal

RegistryRepository

Disponible

Fonctionnalité déployée et prise en charge. Les champs et commandes décrits ici sont stables au sein de la version v1alpha1.

apiVersionregistry.stackngo.io/v1alpha1
kindRegistryRepository
Appliqué parsng apply
Commandes liéessng 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​

web.yml
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é​

web.yml
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.name qui n'est pas un composant OCI : minuscules et chiffres, séparateurs ., _ ou - entre deux caractères alphanumériques (^[a-z0-9]+([._-][a-z0-9]+)*$) ;
  • description de plus de 512 caractères ;
  • keepLastCount hors de 0 à 100 000, keepDays hors de 0 à 3650, plus de 16 keepTagsRegex ;
  • deletionPolicy autre que Block ou Delete.

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é.

ChampDescriptionDéfautValidation
apiVersion stringregistry.stackngo.io/v1alpha1
kind stringRegistryRepository
metadata ObjectMetaSeul 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é.

ChampDescriptionDéfautValidation
description stringDescription libre du dépôt (512 caractères au plus).MaxLength: 512
Optional: {}
public booleanPublic autorise le téléchargement (pull) sans authentification. Pousser et supprimer exigent toujours une session.Optional: {}
retention RetentionSpecRetention définit les tags conservés. Absent : tous les tags sont conservés.Optional: {}
deletionPolicy DeletionPolicyDeletionPolicy : 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.
BlockEnum: [Block Delete]
Optional: {}

RegistryRepositoryStatus​

RegistryRepositoryStatus est l'état du dépôt constaté par la plateforme.

ChampDescriptionDéfautValidation
observedGeneration integerObservedGeneration est la dernière version du manifeste prise en compte.
conditions Condition arrayConditions : Ready (ressource prête), Synced (registre à jour), Deleting (suppression en cours).
repository stringRepository 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.

ChampDescriptionDéfautValidation
keepLastCount integerKeepLastCount conserve les N tags poussés le plus récemment (0 à 100000).Maximum: 100000
Minimum: 0
Optional: {}
keepDays integerKeepDays conserve les tags poussés depuis moins de N jours (0 à 3650).Maximum: 3650
Minimum: 0
Optional: {}
keepTagsRegex string arrayKeepTagsRegex : expressions régulières ; les tags qui y correspondent ne sont jamais supprimés.MaxItems: 16
Optional: {}
deleteUntagged booleanDeleteUntagged 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]
ValeurDescription
BlockDeletionPolicyBlock : la suppression reste en attente tant que le dépôt contient des tags.
DeleteDeletionPolicyDelete : toutes les images du dépôt sont supprimées avec lui.

Statut et conditions​

status.repository donne le chemin complet <tenant>/<nom>.

ConditionTrue quandFalse quand
Readyle dépôt est déclaré et sa spec est valide (raison Reconciled)la spec est invalide (raison InvalidSpec)
Syncedposée à True avec Ready—
Deletingla suppression est en cours mais ne peut pas aboutir (DeletionBlocked, RegistryUnavailable)— (absente hors suppression)
reasonConditionExplicationAction
ReconciledReady, SyncedDépôt déclaré, rétention appliquée—
InvalidSpecReadyUne keepTagsRegex ne compile pas, ou le nom du tenant n'est pas un composant OCI valideCorriger l'expression et réappliquer ; pour le nom du tenant, contacter le support
DeletionBlockedDeletingdeletionPolicy: Block et des tags restent (le message en donne le nombre) ; ou, avec Delete, un tag a été poussé pendant la purgeSupprimer les tags restants, ou passer deletionPolicy: Delete avant la suppression ; nouvel essai chaque minute
RegistryUnavailableDeletingLe registre n'a pas répondu pendant la suppressionRien : 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.

deletionPolicyTags présentsEffet
Block (défaut)ouile dépôt reste, Deleting=True / DeletionBlocked, nouvel essai chaque minute
Blocknonle 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ômeCauseCorrection
sng apply refuse : metadata.name must be a valid OCI repository componentMajuscule, /, séparateur en tête ou en fin de nomChoisir un nom comme shop-api ou tools.v2
docker push refusé (unauthorized) juste après la déclarationLe manifeste n'est pas encore appliqué par la plateformeRéessayer après quelques instants
docker push refusé alors que le dépôt existePas de registry:push sur repository/<nom>, ou dépôt en cours de suppressionVérifier les policies ; un dépôt en suppression n'accepte plus de push
Des tags anciens restent malgré la rétentionLe nettoyage n'est pas encore passé, regex invalide (InvalidSpec), ou seuls des keepTagsRegex sont donnésAttendre le passage suivant ; corriger la regex ; ajouter keepLastCount ou keepDays
Le dépôt ne disparaît pas après sng registry deletedeletionPolicy: Block et des tags restentSupprimer les tags (sng registry delete web:TAG) ou redéclarer avec --deletion-policy Delete puis supprimer
Pull anonyme refusépublic absent ou falsepublic: true (sng registry create NAME --public)
invalid repository "web/cache"Sous-chemins non pris en chargeUn dépôt par nom : web-cache

Voir aussi​