Điểm:0

Đăng ký riêng của Docker dưới dạng kubernetes pod - hình ảnh đã xóa được tự động tạo lại

lá cờ es

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àycá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?

Điểm:1
lá cờ es

Có vẻ như đã xảy ra sự cố bộ nhớ đệm ít nhất với phiên bản sổ đăng ký 2.7.0 được mô tả đâyđây.

Trong các chủ đề trên, bạn nên tắt hoàn toàn bộ đệm hoặc khởi động lại vùng chứa mỗi lần.

Bởi vì tôi đang sử dụng sổ đăng ký docker làm nhóm kubernetes, tức là thay đổi thành tệp cấu hình sổ đăng ký mặc định. /etc/docker/registry/config.yml không có bất kỳ ảnh hưởng nào vì yaml nhóm đăng ký kubernetes được ưu tiên, nghĩa là cấu hình phải được đặt trong nhóm yaml dưới dạng các biến môi trường ở dạng REGISTRY_biến trong đó dấu gạch dưới biểu thị các mức thụt đầu dòng, như được giải thích trong phần tài liệu.

Vì vậy, giải pháp là thêm

- tên: REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR
  giá trị: ""

vào môi trường vùng chứa trong nhóm yaml để tắt hoàn toàn bộ đệm, nếu không, nếu sổ đăng ký được chạy dưới dạng vùng chứa docker, chúng ta có thể sử dụng thông tin sau trong config.yml:

kho:
  bộ đệm:
    blobdescriptor: ""

Cách khác là khởi động lại nhóm mỗi khi chúng tôi xóa một hình ảnh bằng:

kubectl exec <pod_name> -c <container_name> -- khởi động lại

hoặc nếu nó là một container docker

docker khởi động lại <registry_container>

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.