ฉันเรียกใช้รีจิสทรีส่วนตัวของนักเทียบท่า v2.7.0 เป็น kubernetes pod พร้อมบริการและวอลุ่มถาวร ขอบคุณบทช่วยสอน Varun Kumar Gซึ่งเป็นวิธีเดียวที่ประสบความสำเร็จในการตั้งค่าของฉัน เพื่อให้ kubernetes ดึงจากรีจิสทรีนักเทียบท่าส่วนตัวใน my 3 โหนด - ในองค์กร - คลัสเตอร์พร้อม Ubuntu 20.04 lts kvms.
ปัญหาคือการลบรูปภาพออกจากรีจิสทรี kubernetes pod docker v2.7.0 (ต้องใช้เวอร์ชันก่อนหน้าเนื่องจาก v2.7.1 ล่าสุดไม่ทำงานกับ htpasswd). นอกจากนี้ฉันได้อ่านกระทู้ที่คล้ายกันมากมายเช่น นี้, นี้ และ นี้.
ด้วยการรัน docker Registry v2.7.1 เป็นคอนเทนเนอร์นักเทียบท่า, ฉันไม่มีปัญหาในการลบรูปภาพ ,
แต่ด้วยการรัน docker Registry v2.7.0 เป็นพ็อด kubernetesขั้นตอนการลบตามปกติ ทำให้ดันภาพที่ลบไปไม่ได้อีก, สม่ำเสมอ หลังจากลบ blobs สำเร็จและลบโฟลเดอร์รูปภาพด้วยตนเอง ภายใต้ /var/lib/registry/docker/registry/v2/repositories/
.
ด้านล่างนี้คือ yaml พ็อดรีจิสตรี
api เวอร์ชัน: v1
ชนิด: ฝัก
ข้อมูลเมตา:
ชื่อ: dockreg-pod
ป้ายกำกับ:
แอพ: mregistry
ข้อมูลจำเพาะ:
ตู้คอนเทนเนอร์:
- ชื่อ: รีจิสทรี
ภาพ: รีจิสทรี:2.7.0
imagePullPolicy: ถ้าไม่ใช่ปัจจุบัน
ปริมาณการติดตั้ง:
- ชื่อ: repo-vol
mountPath: "/var/lib/registry"
- ชื่อ: certs-vol
mountPath: "/ ใบรับรอง"
อ่านอย่างเดียว: จริง
- ชื่อ: auth-vol
mountPath: "/ รับรองความถูกต้อง"
อ่านอย่างเดียว: จริง
สภาพแวดล้อม:
- ชื่อ: REGISTRY_AUTH
ค่า: "htpasswd"
- ชื่อ: REGISTRY_AUTH_HTPASSWD_REALM
ค่า: "ขอบเขตรีจิสทรี"
- ชื่อ: REGISTRY_AUTH_HTPASSWD_PATH
ค่า: "/auth/htpasswd"
- ชื่อ: REGISTRY_HTTP_TLS_CERTIFICATE
ค่า: "/certs/tls.crt"
- ชื่อ: REGISTRY_HTTP_TLS_KEY
ค่า: "/certs/tls.key"
- ชื่อ: REGISTRY_STORAGE_DELETE_ENABLED
ค่า: "จริง"
ปริมาณ:
- ชื่อ: repo-vol
ถาวรVolumeClaim:
ชื่อการอ้างสิทธิ์: repo-pvc
- ชื่อ: certs-vol
ความลับ:
ชื่อลับ: certs-secret
- ชื่อ: auth-vol
ความลับ:
ชื่อลับ: รับรองความถูกต้อง
นโยบายรีสตาร์ท: เสมอ
ชื่อโหนด: ฤดูใบไม้ผลิ
และต่อไปนี้คือ yaml ปริมาณถาวร
api เวอร์ชัน: v1
ชนิด: PersistentVolume
ข้อมูลเมตา:
ชื่อ: repo-pv
ป้ายกำกับ:
ประเภท: prstore
ข้อมูลจำเพาะ:
ความจุ:
ความจุ: 7Gi
VolumeMode: ระบบไฟล์
โหมดการเข้าถึง:
- ReadWriteOnce
PersistentVolumeReclaimPolicy: เก็บรักษา
storageClassName: ที่เก็บข้อมูลในเครื่อง
ท้องถิ่น:
fsประเภท: ext4
เส้นทาง: /root/repo
ความเกี่ยวข้องของโหนด:
ที่จำเป็น:
nodeSelectorเงื่อนไข:
- การจับคู่นิพจน์:
- รหัส: kubernetes.io/hostname
ผู้ดำเนินการ: ใน
ค่า:
- ฤดูใบไม้ผลิ
---
api เวอร์ชัน: v1
ชนิด: PersistentVolumeClaim
ข้อมูลเมตา:
ชื่อ: repo-pvc
ป้ายกำกับ:
ประเภท: prstore
ข้อมูลจำเพาะ:
ตัวเลือก:
ป้ายกำกับการแข่งขัน:
ประเภท: prstore
VolumeMode: ระบบไฟล์
storageClassName: ที่เก็บข้อมูลในเครื่อง
โหมดการเข้าถึง:
- ReadWriteOnce
ทรัพยากร:
คำขอ:
ความจุ: 7Gi
สมมติว่าฉันกำลังส่งอิมเมจบนรีจิสตรีพ็อดใหม่ล่าสุดโดยล้างพื้นที่เก็บข้อมูลถาวรออกด้วย
root@sea:scripts# นักเทียบท่ากด docreg:5000/mubu4:v4
การพุชอ้างถึงที่เก็บ [dockreg:5000/mubu4]
9f54eef41275: ผลัก
v4: ไดเจสต์: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17fขนาด: 529
ดูเหมือนว่าการลบรูปภาพจะทำงานตามที่ตั้งใจไว้จนกว่าฉันจะพยายามกดรูปภาพที่ถูกลบอีกครั้ง ซึ่งจุดนั้นฉันเริ่มรู้สึกหวาดกลัว มีเลเยอร์อยู่แล้ว
ข้อผิดพลาด.
ตามที่คุณอาจเห็นข้างต้น ฉันได้รวมไว้ในสภาพแวดล้อมของพ็อดรีจิสทรีดังต่อไปนี้
- ชื่อ: REGISTRY_STORAGE_DELETE_ENABLED
ค่า: "จริง"
มิฉะนั้นฉันจะได้รับ ไม่รองรับ
ข้อผิดพลาดจาก ขด -X ลบ
โทรแม้หลังจากเพิ่ม
ลบ:
เปิดใช้งาน: จริง
ใน /etc/docker/registry/config.yml
ภายในฝัก
รุ่น: 0.1
บันทึก:
เขตข้อมูล:
บริการ: รีจิสทรี
พื้นที่จัดเก็บ:
แคช:
blobdescriptor: inmemory
ระบบไฟล์:
ไดเรกทอรีราก: /var/lib/registry
ลบ:
เปิดใช้งาน: จริง
http:
เพิ่ม: :5000
ส่วนหัว:
X-Content-Type-Options: [nosniff]
สุขภาพ:
ไดร์เวอร์สตอเรจ:
เปิดใช้งาน: จริง
ช่วงเวลา: 10 วินาที
เกณฑ์: 3
ดูเหมือนว่าจะไม่สร้างความแตกต่างในกรณีการใช้งานของฉัน
ดังต่อไปนี้ ขั้นตอนการลบ.
ขด -u อเล็กซานเดอร์:โซเฟียนอส \
> -vsk -H "ยอมรับ: \
> แอปพลิเคชัน/vnd.docker.distribution.manifest.v2+json" \
> -X ลบ \
> https://dockreg:5000/v2/mubu4/manifests/sha256:\
>7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
พิมพ์ด้านบนเหนือสิ่งอื่น ๆ ต่อไปนี้
> ลบ /v2/mubu4/manifests/sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f HTTP/2
> โฮสต์: Dockreg:5000
> การอนุญาต: พื้นฐาน YWxleGFuZGVyOnNvZmlhbm9z
> user-agent: curl/7.68.0
> ยอมรับ: application/vnd.docker.distribution.manifest.v2+json
>
* เปลี่ยนสถานะการเชื่อมต่อ (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 202
< docker-distribution-api-version: รีจิสตรี/2.0
< x-content-type-options: nosniff
< ความยาวเนื้อหา: 0
< date: เสาร์ 30 ต.ค. 2564 13:25:53 GMT
<
* การเชื่อมต่อ #0 ไปยังโฮสต์ Dockreg ยังคงอยู่
ซึ่งดูเหมือนว่าจะเป็นไปตามลำดับ
ด้านล่างนี้เป็นการลบ blobs จากภายในพ็อดรีจิสตรี
root@sea:scripts# kubectl exec -it docreg-pod -- sh
/ # bin/registry เก็บขยะ /etc/docker/registry/config.yml
มูบู4
0 blobs ทำเครื่องหมาย 3 blobs และ 0 รายการที่มีสิทธิ์สำหรับการลบ
Blob ที่มีสิทธิ์ลบ: sha256:7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54
ข้อมูล [0000] การลบ Blob:/Docker/Registry/v2/blobs/sha256/7b/7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a5443
Blob ที่มีสิทธิ์ลบ: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
ข้อมูล [0000] การลบ Blob:/Docker/Registry/v2/blobs/sha256/7b/7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cd39681169589c17f
Blob ที่มีสิทธิ์ลบ: sha256:ecb35fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085
ข้อมูล [0000] การลบ Blob:/Docker/Registry/v2/blobs/sha256/ec/ecb35fc8715f5ab1d9053ecb2f2d9ebec4a59c0a0615d98de53bc29f72850555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555550
สุดท้าย การลบอิมเมจที่เก็บด้วยตนเอง
/ # rm -rf /var/lib/registry/docker/registry/v2/repositories/mubu4
ในที่เก็บข้อมูลถาวรของฉัน รีจิสทรีตอนนี้มีลักษณะดังนี้
root@spring:repo# ต้นไม้
.
âââ นักเทียบท่า
âââ รีจิสทรี
âââ v2
âââ หยด
â âââ sha256
â âââ 7b
â âââ เป็นต้น
âââ ที่เก็บ
8 ไดเร็กทอรี 0 ไฟล์
แต่เมื่อฉันพยายามกดลบรูปภาพอีกครั้ง ฉันได้รับ
root@sea:scripts# นักเทียบท่ากด docreg:5000/mubu4:v4
การพุชอ้างถึงที่เก็บ [dockreg:5000/mubu4]
9f54eef41275: มีเลเยอร์อยู่แล้ว
v4: ไดเจสต์: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17fขนาด: 529
และในทะเบียนบ้านของฉัน โฟลเดอร์อิมเมจ mubu4 ที่ฉันลบไปก่อนหน้านี้ได้ถูกสร้างขึ้นใหม่อย่างลึกลับผ่านคำสั่ง push ด้านบน.
root@spring:repo# ต้นไม้
.
âââ นักเทียบท่า
âââ รีจิสทรี
âââ v2
âââ หยด
â âââ sha256
â âââ 7b
â âââ เป็นต้น
âââ ที่เก็บ
âââ mubu4
âââ _ประจักษ์
âââ การแก้ไข
â âââ sha256
â  âââ
â  âââ ลิงค์
แท็ก âââ
âââ v4
âââ ปัจจุบัน
â  âââ ลิงค์
âââ ดัชนี
âââ sha256
âââ 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
âââ ลิงก์
19 ไดเร็กทอรี 3 ไฟล์
ฉันยังพยายามล้างที่เก็บข้อมูลถาวรด้วย
root@spring:repo# rm -rf *
ไม่มีประโยชน์ ลองกดรูปที่ลบไปแล้วก็ยังออกมาเหมือนเดิม มีเลเยอร์อยู่แล้ว
ข้อผิดพลาด และทรีรีจิสตรีกำลังถูกสร้างขึ้นใหม่โดยอัตโนมัติอีกครั้ง โดยดูเหมือนกับที่ทำในเอาต์พุตทรีด้านบน
คำถามคือ ฉันจะพยายามทำอะไรได้อีกเพื่อให้งานนี้สำเร็จ และ/หรืออีกทางหนึ่ง
จากการทดสอบข้างต้นนั้น ภายในพ็อด kubernetes รีจิสทรีนักเทียบท่ามีไฟล์อื่น ๆ ที่เก็บการกำหนดค่าซึ่งรูปภาพที่ถูกลบจะไม่ถูกลบและไฟล์เหล่านี้เปิดใช้งานการสร้างภาพที่ถูกลบใหม่ผ่านการโทรแบบพุชของนักเทียบท่า ควรดูที่ไหนนอกจากต้นไม้
/var/lib/registry/docker/registry/v2/
ฉันจึงสามารถลบการอ้างอิงถึงรูปภาพที่ถูกลบทั้งหมดได้หรือไม่