Tôi chạy docker private registry v2.7.0 dưới dạng nhóm kubernetes với dịch vụ và khối lượng liên tục, nhờ hướng dẫn của Varun Kumar G, đây là phương pháp thành công duy nhất trong quá trình thiết lập của tôi, để kubernetes lấy từ sổ đăng ký docker riêng của tôi trên 3 nút--tại chỗ--cụm với ubuntu 20.04 lts kvms.
Sự cố xảy ra với việc xóa hình ảnh khỏi sổ đăng ký docker kubernetes pod v2.7.0 (phải sử dụng phiên bản trước vì v2.7.1 mới nhất không hoạt động với htpasswd). Hơn nữa tôi đã đọc rất nhiều chủ đề tương tự như cái này, cái này và cái này.
Với docker registry v2.7.1 chạy như một container docker, Tôi không gặp vấn đề gì khi xóa hình ảnh,
nhưng với docker registry v2.7.0 chạy như một nhóm kubernetes, các bước xóa thông thường kết quả là không thể đẩy lại hình ảnh đã xóa, thậm chí sau khi xóa thành công các đốm màu và xóa các thư mục hình ảnh theo cách thủ công Dưới /var/lib/registry/docker/registry/v2/repositories/
.
Dưới đây là nhóm đăng ký yaml
phiên bản api: v1
loại: Vỏ
metadata:
tên: dockreg-pod
nhãn:
ứng dụng: mregistry
thông số kỹ thuật:
hộp đựng:
- tên: sổ đăng ký
hình ảnh: sổ đăng ký: 2.7.0
imagePullPolicy: IfNotPresent
khối lượngMount:
- tên: repo-vol
mountPath: "/var/lib/registry"
- tên: certs-vol
mountPath: "/certs"
chỉ đọc: đúng
- tên: auth-vol
mountPath: "/ auth"
chỉ đọc: đúng
vi:
- tên: ĐĂNG KÝ_AUTH
giá trị: "htpasswd"
- tên: REGISTRY_AUTH_HTPASSWD_REALM
giá trị: "Vương quốc đăng ký"
- tên: REGISTRY_AUTH_HTPASSWD_PATH
giá trị: "/auth/htpasswd"
- tên: REGISTRY_HTTP_TLS_CERTIFICATE
giá trị: "/certs/tls.crt"
- tên: REGISTRY_HTTP_TLS_KEY
giá trị: "/certs/tls.key"
- tên: REGISTRY_STORAGE_DELETE_ENABLED
giá trị: "đúng"
khối lượng:
- tên: repo-vol
liên tụcVolumeClaim:
Tên xác nhận: repo-pvc
- tên: certs-vol
bí mật:
secretName: certs-bí mật
- tên: auth-vol
bí mật:
secretName: auth-bí mật
restartPolicy: Luôn luôn
tên nút: mùa xuân
và sau đây là khối lượng liên tục yaml
phiên bản api: v1
loại: PersistentVolume
metadata:
tên: repo-pv
nhãn:
loại: cửa hàng
thông số kỹ thuật:
dung tích:
lưu trữ: 7Gi
volumeMode: Hệ thống tập tin
chế độ truy cập:
- ReadWriteOnce
liên tụcVolumeReclaimPolicy: Giữ lại
storageClassName: lưu trữ cục bộ
địa phương:
fsType: ext4
đường dẫn: /root/repo
nút mối quan hệ:
cần thiết:
nútSelectorĐiều khoản:
- biểu thức khớp:
- khóa: kubernetes.io/hostname
toán tử: Trong
giá trị:
- mùa xuân
---
phiên bản api: v1
loại: PersistentVolumeClaim
metadata:
tên: repo-pvc
nhãn:
loại: cửa hàng
thông số kỹ thuật:
bộ chọn:
trận đấuNhãn:
loại: cửa hàng
volumeMode: Hệ thống tập tin
storageClassName: lưu trữ cục bộ
chế độ truy cập:
- ReadWriteOnce
tài nguyên:
yêu cầu:
lưu trữ: 7Gi
Giả sử tôi đang đẩy một hình ảnh lên một nhóm đăng ký hoàn toàn mới cũng đã xóa sạch bộ nhớ liên tục trước đó.
root@sea:scripts# docker đẩy dockreg:5000/mubu4:v4
Đẩy đề cập đến kho lưu trữ [dockreg:5000/mubu4]
9f54eef41275: Đã đẩy
v4: digest: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f kích thước: 529
Việc xóa hình ảnh dường như hoạt động như dự định cho đến khi tôi cố gắng đẩy lại hình ảnh đã xóa, lúc đó tôi cảm thấy sợ hãi Lớp đã tồn tại
lỗi.
Như bạn có thể đã thấy ở trên, tôi đã đưa vào môi trường nhóm đăng ký như sau,
- tên: REGISTRY_STORAGE_DELETE_ENABLED
giá trị: "đúng"
nếu không tôi sẽ nhận được một không được hỗ trợ
lỗi từ cuộn tròn -X XÓA
gọi, ngay cả sau khi thêm
xóa bỏ:
đã bật: đúng
bên trong /etc/docker/registry/config.yml
trong nhóm,
phiên bản: 0.1
nhật ký:
lĩnh vực:
dịch vụ: đăng ký
kho:
bộ đệm:
blobdescriptor: bộ nhớ
hệ thống tập tin:
thư mục gốc: /var/lib/registry
xóa bỏ:
đã bật: đúng
http:
địa chỉ: :5000
tiêu đề:
X-Content-Type-Options: [nosniff]
Sức khỏe:
trình điều khiển lưu trữ:
đã bật: đúng
khoảng thời gian: 10s
ngưỡng: 3
điều đó dường như không có sự khác biệt trong trường hợp sử dụng của tôi.
Sau đây là các bước xóa.
cuộn tròn -u alexander:sofianos \
> -vsk -H "Chấp nhận: \
> application/vnd.docker.distribution.manifest.v2+json" \
> -X XÓA \
> https://dockreg:5000/v2/mubu4/manifests/sha256:\
> 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
Các bản in trên trong số những thứ khác như sau
> XÓA /v2/mubu4/manifests/sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f HTTP/2
> Máy chủ: dockreg:5000
> ủy quyền: Basic YWxleGFuZGVyOnNvZmlhbm9z
> tác nhân người dùng: curl/7.68.0
> chấp nhận: application/vnd.docker.distribution.manifest.v2+json
>
* Trạng thái kết nối đã thay đổi (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 202
< docker-distribution-api-version: registry/2.0
< tùy chọn loại nội dung x: nosniff
< độ dài nội dung: 0
< ngày: Thứ bảy, ngày 30 tháng 10 năm 2021 13:25:53 GMT
<
* Kết nối #0 đến máy chủ dockreg còn nguyên vẹn
mà dường như là theo thứ tự.
Bên dưới, xóa các đốm màu từ bên trong nhóm đăng ký
root@sea:scripts# kubectl exec -it dockreg-pod -- sh
/ # bin/registry thu gom rác /etc/docker/registry/config.yml
mubu4
0 đốm màu được đánh dấu, 3 đốm màu và 0 tệp kê khai đủ điều kiện để xóa
blob đủ điều kiện để xóa: sha256:7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54
THÔNG TIN[0000] Đang xóa blob: /docker/registry/v2/blobs/sha256/7b/7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54 go.version=go1.11.2 instance.id=82a101ee-47f4-9d4b3c877a54 go.version=go1.11.2 instance.id=82a101ee-47f4-94f40f9fbc-service
blob đủ điều kiện để xóa: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
Thông tin [0000] Xóa BLOB:/docker/registry/v2/blobs/SHA256/7B/7BD0D9A9821815DCCB5C53C18CEA04591EC633E2E53
blob đủ điều kiện để xóa: sha256:ecb35fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085
THÔNG TIN[0000] Đang xóa blob: /docker/registry/v2/blobs/sha256/ec/ecb35fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085 go.version=go1.11.2 instance.id=82a101ee-47f4-9f-409dbc-service
Cuối cùng, xóa hình ảnh kho lưu trữ theo cách thủ công
/ # rm -rf /var/lib/registry/docker/registry/v2/repositories/mubu4
Trên bộ lưu trữ liên tục của tôi, sổ đăng ký hiện trông như thế này
root@spring:repo# cây
.
âââ docker
âââ đăng ký
âââ v2
âââ đốm màu
â âââ sha256
â âââ 7b
â âââ ec
âââ kho lưu trữ
8 thư mục, 0 tập tin
Nhưng khi tôi cố gắng đẩy lại hình ảnh đã xóa, tôi nhận được
root@sea:scripts# docker đẩy dockreg:5000/mubu4:v4
Đẩy đề cập đến kho lưu trữ [dockreg:5000/mubu4]
9f54eef41275: Lớp đã tồn tại
v4: digest: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f kích thước: 529
và trong sổ đăng ký của tôi, thư mục hình ảnh mubu4 mà tôi đã xóa trước đó, đã được tạo lại một cách bí ẩn thông qua lệnh đẩy ở trên.
root@spring:repo# cây
.
âââ docker
âââ đăng ký
âââ v2
âââ đốm màu
â âââ sha256
â âââ 7b
â âââ ec
âââ kho lưu trữ
âââ mubu4
âââ _manifests
âââ sửa đổi
â âââ sha256
â âââ 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
â  âââ liên kết
âââ thẻ
âââ v4
âââ hiện tại
â  âââ liên kết
âââ chỉ số
âââ sha256
âââ 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
âââ liên kết
19 thư mục, 3 tập tin
Tôi cũng đã thử xóa bộ nhớ liên tục bằng
root@spring:repo# rm -rf *
không có kết quả. Cố gắng đẩy hình ảnh đã xóa sau đó, vẫn xuất ra chính xác như vậy Lớp đã tồn tại
lỗi và cây đăng ký lại được tự động tạo lại, trông giống hệt như trong đầu ra cây ở trên.
Câu hỏi là Tôi có thể cố gắng làm gì khác để thực hiện công việc này và/hoặc thay vào đó,
nó xuất phát từ thử nghiệm trên, rằng trong nhóm đăng ký docker kubernetes, có các tệp khác giữ cấu hình trong đó các hình ảnh đã xóa dường như không bị xóavà các tệp này kích hoạt việc tạo lại hình ảnh đã xóa thông qua lệnh gọi đẩy docker. Tôi nên nhìn vào đâu ngoài cái cây
/var/lib/đăng ký/docker/đăng ký/v2/
để tôi có thể xóa tất cả các tham chiếu đến hình ảnh đã xóa?