Prywatny rejestr Docker w OKD na zasobie NFS

Przetłumaczone automatycznie z angielskiego. Przeczytaj oryginał

Jeśli używasz OKD/OpenShift, najprawdopodobniej uruchamiasz też wewnętrzny, prywatny rejestr Docker dla swoich buildów. Klaster korzysta z niego, wyszukując obrazy kontenerów do dalszych wdrożeń. W podstawowej, domyślnej instalacji Docker Registry znajduje się w projekcie o nazwie default. Używa on też quasi-trwałego magazynu, który przetrwa tylko do następnego ponownego wdrożenia kontenera (poda) rejestru. Istnieje jednak możliwość zamontowania wolumenu NFS w konfiguracji wdrożenia rejestru, dzięki czemu obrazy wypchnięte do rejestru nie znikną, gdy trzeba będzie ponownie wdrożyć sam rejestr. Taka potrzeba może się pojawić, jeśli uruchamiasz playbook Ansible do ponownego wdrażania certyfikatów. Przeglądając ten playbook, zobaczysz krok, w którym następuje ponowne wdrożenie rejestru, więc w takim scenariuszu potrzebujesz trwałego magazynu dla rejestru.

Najpierw zainstaluj serwer NFS na osobnej maszynie i skonfiguruj katalog oraz /etc/exports. Następnie zrestartuj serwer NFS (service nfs-server restart).

Bash
/opt/PVdirectory		*(rw,root_squash,no_wdelay)

Następnie trzeba utworzyć na masterze OKD konfigurację PV (czyli persistent volume):

YAML
apiVersion: v1
kind: PersistentVolume
metadata:
  name: PVname
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteOnce
  nfs:
    path: /opt/PVdirectory
    server: 192.168.1.2
  persistentVolumeReclaimPolicy: Recycle

Zastosuj tę konfigurację:

Bash
oc create -f filename.yaml

Właśnie utworzyłeś definicję PV, która mówi OKD, by szukał wolumenu NFS na 192.168.1.2 w /opt/PVdirectory o pojemności 10GiB, który zostanie odzyskany (recycle), jeśli nie będzie powiązany. Następnie musisz skopiować bieżącą zawartość rejestru, czyli obrazy Docker. Nie ma scp do kopiowania plików, ale najpierw spakuj je za pomocą tar:

Bash
cd /registry
tar -cf docker.tar docker

Teraz przejdź na mastera i znajdź nazwę kontenera docker-registry (zastąp abcdefg właściwym ID):

Bash
oc rsync docker-registry-abcdefg:/registry/docker.tar .

Przenieś archiwum na serwer NFS i tam je rozpakuj. Główny folder ma właściciela nfsnobody, ale wewnętrzna zawartość taką samą jak oryginał:

Bash
sudo chown -R 1000000000:1000000000 docker

Teraz przejdź do webconsole OKD i wyłącz rejestr (przeskaluj do 0 podów). Przejdź do konfiguracji wdrożenia, usuń domyślny magazyn i dodaj w jego miejsce swój, podając /registry jako ścieżkę. Uruchom rejestr ponownie i przetestuj go. Teraz powinien korzystać z zasobu NFS i możesz swobodnie ponownie wdrażać rejestr, gdy zajdzie taka potrzeba.

Wersja Markdown

Wszystkie treści na tej stronie są udostępniane na licencji Uznanie autorstwa – Użycie niekomercyjne – Bez utworów zależnych 4.0 Międzynarodowe (CC BY-NC-ND 4.0). Cytuj jako: Michał Sobczak, „Prywatny rejestr Docker w OKD na zasobie NFS”, 6 listopada 2022, https://michalasobczak.pl/pl/posts/okd-docker-private-registry-on-nfs-mount.html