Puncte:0

Registrul privat Docker ca pod kubernetes - imaginile șterse au fost recreate automat

drapel es

Rulez un registru privat docker v2.7.0 ca a pod kubernetes cu un serviciu și un volum persistent, datorită tutorialului Varun Kumar G, care a fost singura metodă de succes din configurația mea, pentru ca kubernetes să extragă din registrul meu privat de docker de pe 3 noduri--on-premises--cluster cu ubuntu 20.04 lts kvms.

Problema este cu ștergerea imaginilor din registrul kubernetes pod docker v2.7.0 (a trebuit să folosească versiunea anterioară deoarece ultima v2.7.1 nu funcționează cu htpasswd). În plus, am citit o mulțime de fire similare, cum ar fi acest, acest și acest.

Cu docker registry v2.7.1 rulați ca un container docker, nu am avut probleme la ștergerea imaginilor,

dar cu docker registry v2.7.0 rulează ca o păstăi kubernetes, pașii obișnuiți de ștergere rezultat fiind imposibilitatea de a împinge din nou imaginea ștearsă, chiar după ștergerea cu succes a blob-urilor și ștergerea manuală a folderelor de imagini sub /var/lib/registry/docker/registry/v2/repositories/.

Mai jos este podul de registry yaml

apiVersion: v1
fel: Pod
metadate:
  nume: dockreg-pod
  etichete:
    aplicație: mregistry
specificație:
  containere:
  - nume: registru
    imagine: registry:2.7.0
    imagePullPolicy: IfNotPresent
    volumMonturi:
    - nume: repo-vol
      mountPath: „/var/lib/registry”
    - denumire: certs-vol
      mountPath: „/certs”
      readOnly: adevărat
    - nume: auth-vol
      mountPath: „/auth”
      readOnly: adevărat
    env:
    - nume: REGISTRY_AUTH
      valoare: "htpasswd"
    - nume: REGISTRY_AUTH_HTPASSWD_REALM
      valoare: „Regiunea registrului”
    - nume: REGISTRY_AUTH_HTPASSWD_PATH
      valoare: "/auth/htpasswd"
    - nume: REGISTRY_HTTP_TLS_CERTIFICATE
      valoare: „/certs/tls.crt”
    - nume: REGISTRY_HTTP_TLS_KEY
      valoare: „/certs/tls.key”
    - nume: REGISTRY_STORAGE_DELETE_ENABLED
      valoare: „adevărat”
  volume:
  - nume: repo-vol
    persistentVolumeClaim:
      claimName: repo-pvc
  - denumire: certs-vol
    secret:
      secretName: certs-secret
  - nume: auth-vol
    secret:
      secretName: auth-secret
  restartPolicy: Întotdeauna
  nodeName: primăvară

iar urmeaza volumul persistent yaml

apiVersion: v1
fel: PersistentVolume
metadate:
  nume: repo-pv
  etichete:
    tip: prstore
specificație:
  capacitate:
    stocare: 7Gi
  volumMod: Sistem de fișiere
  Moduri de acces:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Păstrați
  storageClassName: stocare locală
  local:
    fsType: ext4
    cale: /root/repo
  nodeAffinity:
    necesar:
      nodeSelectorTerms:
      - matchExpressions:
        - cheie: kubernetes.io/hostname
          operator: In
          valori:
          - primăvară
---
apiVersion: v1
fel: PersistentVolumeClaim
metadate:
  nume: repo-pvc
  etichete:
    tip: prstore
specificație:
  selector:
    matchLabels: 
      tip: prstore
  volumMod: Sistem de fișiere
  storageClassName: stocare locală
  Moduri de acces:
  - ReadWriteOnce
  resurse:
    cereri:
      stocare: 7Gi

Să presupunem că introduc o imagine pe un pod de registru nou-nouț, după ce am șters stocarea persistentă în prealabil.

root@sea:scripts# docker push dockreg:5000/mubu4:v4
Pusarea se referă la depozit [dockreg:5000/mubu4]
9f54eef41275: Impins 
v4: digest: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f dimensiune: 529

Ștergerea imaginilor pare să funcționeze conform intenției până când încerc să împing din nou imaginea ștearsă, moment în care primesc temutul Stratul există deja eroare.

După cum ați văzut mai sus, am inclus în mediul pod de registry următoarele,

- nume: REGISTRY_STORAGE_DELETE_ENABLED
      valoare: „adevărat”

altfel aş primi un nesuportat eroare de la curl -X DELETE sunați, chiar și după adăugare

șterge:
    activat: adevărat

în /etc/docker/registry/config.yml în interiorul păstăii,

versiunea: 0.1
Buturuga:
  câmpuri:
    serviciu: registru
depozitare:
  cache:
    blobdescriptor: inmemorie
  Sistemul de fișiere:
    directorul rădăcină: /var/lib/registry
  șterge:
    activat: adevărat
http:
  adresa: :5000
  anteturi:
    Opțiuni pentru tipul de conținut X: [nosniff]
sănătate:
  driver de stocare:
    activat: adevărat
    interval: 10s
    prag: 3

asta pare să nu facă nicio diferență în cazul meu de utilizare.

Următoarele sunt pașii de ștergere.

curl -u alexander:sofianos \
> -vsk -H "Accept: \
> application/vnd.docker.distribution.manifest.v2+json" \
> -X DELETE \
> https://dockreg:5000/v2/mubu4/manifests/sha256:\
> 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f

Cele de mai sus imprimă, printre altele, următoarele

> ȘTERGE /v2/mubu4/manifests/sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f HTTP/2
> Gazdă: dockreg:5000
> autorizare: Basic YWxleGFuZGVyOnNvZmlhbm9z
> user-agent: curl/7.68.0
> accept: application/vnd.docker.distribution.manifest.v2+json
> 
* Starea conexiunii a fost schimbată (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 202 
< docker-distribution-api-version: registry/2.0
< x-content-type-options: nosniff
< lungimea conținutului: 0
< data: sâmbătă, 30 oct 2021 13:25:53 GMT
< 
* Conexiunea #0 la dockreg gazdă a rămas intactă

care pare să fie în ordine.

Mai jos, ștergerea blob-urilor din podul de registry

root@sea:scripts# kubectl exec -it dockreg-pod -- sh
/ # bin/registry garbage-collect /etc/docker/registry/config.yml
mubu4

0 blob-uri marcate, 3 blob-uri și 0 manifeste eligibile pentru ștergere
blob eligibil pentru ștergere: sha256:7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54
Info [0000] Ștergere blob:/docker/registry/v2/blobs/sha256/7b/7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54 Go.Vers
blob eligibil pentru ștergere: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
Info [0000] Ștergere blob:/docker/registry/v2/blobs/sha256/7b/7bd0d9a9821815dccb5c53c18cea04591ec6333e2e529c5cd39681169589c17f GO.VERTY = GO
blob eligibil pentru ștergere: sha256:ecb35fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085
INFO[0000] Se șterge blob: /docker/registry/v2/blobs/sha256/ec/ecb35fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085 service=118fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085 service=118fc8715f5ab1d90547474747474747085

În cele din urmă, ștergerea manuală a imaginii depozitului

/ # rm -rf /var/lib/registry/docker/registry/v2/repositories/mubu4

Pe stocarea mea persistentă, registrul arată acum așa

root@spring:repo# arbore
.
âââ docker
    âââ registru
        âââ v2
            âââ blobs
            â  âââ sha256
            â  âââ 7b
            â  âââ ec
            âââ depozite

8 directoare, 0 fișiere

Dar când încerc să împing din nou imaginea ștearsă, obțin

root@sea:scripts# docker push dockreg:5000/mubu4:v4
Pusarea se referă la depozit [dockreg:5000/mubu4]
9f54eef41275: Stratul există deja 
v4: digest: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f dimensiune: 529

și în registrul meu, folderul de imagini mubu4 pe care l-am șters anterior a fost recreat în mod misterios prin comanda push de mai sus.

root@spring:repo# arbore
.
âââ docker
    âââ registru
        âââ v2
            âââ blobs
            â  âââ sha256
            â  âââ 7b
            â  âââ ec
            âââ depozite
                âââ mubu4
                    âââ _se manifestă
                        âââ revizuiri
                        â  âââ sha256
                        â  âââ 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
                        â  âââ link
                        âââ etichete
                            âââ v4
                                âââ curent
                                â  âââ link
                                âââ index
                                    âââ sha256
                                        âââ 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
                                            âââ link

19 directoare, 3 fișiere

De asemenea, am încercat să șterg stocarea persistentă cu

root@spring:repo# rm -rf *

fără niciun rezultat. Încercarea de a împinge imaginea ștearsă după aceea, scoate în continuare exact același lucru Stratul există deja eroare, iar arborele de registry este din nou recreat automat, arătând exact așa cum arată în ieșirea arborelui de mai sus.

Întrebarea este ce altceva pot încerca să funcționeze și/sau alternativ,

din testarea de mai sus rezultă că în pod-ul kubernetes registry docker, există și alte fișiere care dețin configurație în care imaginile șterse par să nu fie șterse, iar aceste fișiere activează recrearea imaginii șterse printr-un apel push docker. Unde ar trebui să mă uit în afară de copac

/var/lib/registry/docker/registry/v2/

ca să pot șterge toate referințele la imaginile șterse?

Puncte:1
drapel es

Se pare că există o problemă de stocare în cache cel puțin cu versiunea de registry 2.7.0 care este descrisă Aici și Aici.

Se recomandă în firele de mai sus să dezactivați complet memoria cache sau să reporniți containerul de fiecare dată.

Deoarece folosesc registrul docker ca pod kubernetes, se modifică fișierul de configurare implicit al registrului, de exemplu. /etc/docker/registry/config.yml nu au nici un efect, deoarece registry kubernetes pod yaml are prioritate, ceea ce înseamnă că configurația trebuie să fie setată în pod yaml ca variabile de mediu sub formă de REGISTRY_variable unde liniuța de subliniere reprezintă nivelurile de indentare, așa cum se explică în docs.

Deci soluția este să adaugi

- nume: REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR
  valoare: ""

la mediul container din pod yaml pentru a dezactiva complet memoria cache, altfel dacă registry este rulat ca un container docker, putem folosi următoarele în config.yml:

depozitare:
  cache:
    blobdescriptor: ""

Alternativa este să reporniți podul de fiecare dată când ștergem o imagine cu:

kubectl exec <nume_pod> -c <nume_container> -- reporniți

sau dacă este un container docker

reporniți docker <container_registru>

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.