Перед установкой определите, на каком из рабочих узлов будет располагаться локальное хранилище Docker-образов.
Для установки локального хранилища Docker-образов выполните действия на первом главном узле из любой директории:
Создайте пространство имён registryfmp:
kubectl create ns registryfmp
Сгенерируйте сертификат шифрования для корректной работы рабочего узла с локальным хранилищем:
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:
registry.crt. Сертификат шифрования;
registry.key. Ключ шифрования.
Создайте секрет для хранения сгенерированного сертификата шифрования:
kubectl create secret tls
registry-cert \
--cert=certs/registry.crt \
--key=certs/registry.key \
-n registryfmp
Создайте файл PV.yaml для описания тома постоянного хранения (Persistent Volume) с содержимым:
apiVersion: v1
kind: PersistentVolume
metadata:
name: registryfmp
labels:
type: local
spec:
storageClassName: longhorn
capacity:
storage: 50Gi
accessModes:
- ReadWriteOnce
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- <наименование
рабочего узла>
csi:
driver: driver.longhorn.io
fsType: ext4
volumeHandle: registryfmp
volumeAttributes:
dataLocality: disabled
fromBackup: ''
fsType: ext4
numberOfReplicas: '3'
staleReplicaTimeout: '30'
persistentVolumeReclaimPolicy: Delete
volumeMode: Filesystem
В подстановке <наименование рабочего узла> укажите наименование рабочего узла, на котором будет содержаться том и запускаться контейнер локального хранилища, например: k8s-worker1.
Примените конфигурацию тома постоянного хранения с использованием файла PV.yaml:
kubectl apply -f PV.yaml
Создайте файл PVC.yaml для описания заявки тома постоянного хранения (Persistent Volume Claim) с содержимым:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: registryfmp
namespace: registryfmp
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 50Gi
Примените конфигурацию заявки тома постоянного хранения с использованием файла PVC.yaml:
kubectl apply -f PVC.yaml
Создайте файл Deployment.yaml для описания развёртывания хранилища (Deployment) с содержимым:
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
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
-
key: kubernetes.io/hostname
operator:
In
values:
-
<наименование рабочего узла>
В подстановке <наименование рабочего узла> укажите наименование рабочего узла, используемого в шаге 4.
Примените конфигурацию развёртывания хранилища с использованием файла Deployment.yaml:
kubectl apply -f Deployment.yaml
Создайте файл 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.
Примените конфигурацию сетевого сервиса с использованием файла Service.yaml:
kubectl apply -f Service.yaml
Проверьте доступ к локальному хранилищу:
curl --cacert certs/registry.crt https://<IP-адрес рабочего узла>:5000/v2/_catalog
После выполнения запроса в ответе должно возвращаться содержимое каталога, например:
{"repositories":[]}
После выполнения действий на рабочем узле будет установлено локальное хранилище Docker-образов.
На каждом узле кластера выполните действия:
Растиражируйте сертификат шифрования registry.crt в папку /usr/local/share/ca-certificates:
scp certs/registry.crt root@<IP-адрес узла>/usr/local/share/ca-certificates/registry.crt
Обновите хранилище сертификатов:
update-ca-certificates
Перезапустите сервис контейнеров Deckhouse:
systemctl restart containerd.service
Далее перейдите к загрузке образов мобильной платформы в локальное хранилище.
См. также:
Подготовка и развёртывание отказоустойчивого кластера на основе Kubernetes | Загрузка образов мобильной платформы в локальное хранилище