Установка локального хранилища Docker Registry

Для установки локального хранилища Docker Registry:

  1. Создайте пространство имён registryfmp на одном из рабочих узлов:

kubectl create ns registryfmp

  1. Сгенерируйте сертификат шифрования для корректной работы рабочих узлов с локальным хранилищем:

mkdir -p certs
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/registry.key \
-addext "subjectAltName = IP:<IP-адрес рабочего узла>" \
-x509 -days 3650 -out certs/registry.crt

В подстановке <IP-адрес рабочего узла> укажите IP-адрес, который будет использоваться в качестве адреса локального хранилища.

После выполнения действий будут получены файлы в папке certs:

  1. Создайте секрет для хранения сгенерированного сертификата шифрования:

kubectl create secret tls registry-cert \
--cert=certs/registry.crt \
--key=certs/registry.key \
-n registryfmp

  1. Создайте файл манифеста SC.yaml:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
 name: registryfmp
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

  1. Примените конфигурацию StorageClass с использованием файла SC.yaml:

kubectl apply -f SC.yaml

  1. Создайте файл манифеста PV.yaml:

apiVersion: v1
kind: PersistentVolume
metadata:
 name: registryfmp
 labels:
   type: local
spec:
 storageClassName: registryfmp
 capacity:
   storage: <объём памяти>
 accessModes:
   - ReadWriteOnce
 hostPath:
   path: "<путь до локального хранилища>"
 nodeAffinity:
   required:
     nodeSelectorTerms:
     - matchExpressions:
       - key: kubernetes.io/hostname
         operator: In
         values:
         - <наименование рабочего узла>

В подстановках:

  1. Примените конфигурацию Persistent Volume с использованием файла PV.yaml:

kubectl apply -f PV.yaml

  1. Создайте файл манифеста PVC.yaml:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: registryfmp
 namespace: registryfmp
spec:
 accessModes:
   - ReadWriteOnce
 storageClassName: registryfmp
 resources:
   requests:
     storage: 50Gi

  1. Примените конфигурацию Persistent Volume Claim с использованием файла PVC.yaml:

kubectl apply -f PVC.yaml

  1. Создайте файл манифеста Deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
 labels:
   run: registry
 name: registry
 namespace: registryfmp
spec:
 replicas: 1
 selector:
   matchLabels:
     run: registry
 template:
   metadata:
     labels:
       run: registry
   spec:
     containers:
     - name: registry
       image: registry:2
       ports:
       - containerPort: 5000
       env:
       - name: REGISTRY_HTTP_TLS_CERTIFICATE
         value: "/certs/tls.crt"
       - name: REGISTRY_HTTP_TLS_KEY
         value: "/certs/tls.key"
       volumeMounts:
       - name: registry-certs
         mountPath: "/certs"
         readOnly: true
       - name: registry-data
         mountPath: /var/lib/registry
         subPath: registry
     volumes:
     - name: registry-certs
       secret:
         secretName: registry-cert
     - name: registry-data
       persistentVolumeClaim:
         claimName: registryfmp
  1. Примените конфигурацию Deployment с использованием файла Deployment.yaml:

kubectl apply -f Deployment.yaml

  1. Создайте файл манифеста Service.yaml:

apiVersion: v1
kind: Service
metadata:
 name: registryfmp-service
 namespace: registryfmp
spec:
 type: NodePort
 selector:
   run: registry
 ports:
   - name: registryfmp-tcp
     protocol: TCP
     port: 5000
     targetPort: 5000
 externalIPs:
   - <IP-адрес рабочего узла>

В подстановке <IP-адрес рабочего узла> укажите IP-адрес, заданный в шаге 2.

  1. Примените конфигурацию Service с использованием файла Service.yaml:

kubectl apply -f Service.yaml

  1. Проверьте выполнение запроса к локальному хранилищу:

curl --cacert certs/registry.crt https://<IP-адрес рабочего узла>/v2/_catalog

После выполнения запроса в ответе должно возвращаться содержимое каталога.

  1. Скопируйте сертификат шифрования registry.crt на все рабочие узлы кластера в папку /usr/local/share/ca-certificates:

scp certs/registry.crt root@<IP-адрес рабочего узла>/usr/local/share/ca-certificates/registry.crt

  1. Обновите хранилище сертификатов на каждом рабочем узле:

update-ca-certificates

  1. Перезапустите сервис runtime на каждом рабочем узле:

systemctl restart docker

systemctl restart containerd

После выполнения действий будет установлено локальное хранилище Docker Registry.

Далее перейдите к настройке Persistent Volume.

См. также:

Подготовка и развёртывание отказоустойчивого кластера на основе Deckhouse | Настройка Persistent Volume