Міграція реєстрів
🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію. |
Ця сторінка надає практичне керівництво з виконання міграції між OKD кластерами SRC та DEST.
1. Позначення та скорочення
-
SRC кластер — кластер, на якому розгорнуто наявний реєстр.
-
DEST кластер — кластер, куди буде перенесено наявний реєстр (цільовий кластер).
Міграція реєстру виконується з останньої резервної копії наявного реєстру та, відповідно до інструкції, буде переноситися із SRC кластеру до DEST кластеру й відновлюватися вже на цьому кластері. |
2. Передумови для міграції
Дотримуючись цих рекомендацій, ви забезпечите плавний процес міграції без непотрібних затримок та незручностей для користувачів. |
-
Процес міграції включає запуск bash-скрипту, що здійснює перенесення даних з SRC кластеру до DEST кластеру. Для успішної міграції, цей скрипт має бути виконаний на платформі Linux з архітектурою мікропроцесора
x86-64
(відомою також якAMD64
, Intel 64, чиx64
) -
Користувач, який буде переносити реєстр на інший кластер, повинен бути доданий до адміністраторів Платформи на обох кластерах через
control-plane-console
.Див. детальніше — Створення адміністратора платформи. -
На кластері, на який переноситься реєстр, повинна бути розгорнута та версія платформи, у якої версія
control-plane-gerrit
буде дорівнювати версії самого реєстру (наприклад, версія платформи —1.9.4.11
, версія реєстру —1.9.4.7
, версіяcontrol-plane-gerrit
–1.9.4.7
). Цю версію можна перевірити наявністю гілки у репозиторіїcluster-mgmt
в центральному Gerrit. Якщо гілка з версією реєстру існує, то версію реєстру можна переносити на DEST кластер. Якщо ні, то існує два шляхи:-
Оновити платформу на DEST кластері, яка буде відповідати версії самого реєстру.
-
Оновити реєстр на SRC кластері до версії, яка вже існує на DEST кластері.
-
-
Одночасний доступ до SRC кластеру та DEST кластеру.
-
Наявність наступних команд в Terminal:
-
oc
-
velero
-
rclone
-
vault
-
helm
-
jq
-
-
Стабільне з’єднання з інтернетом. Чим більша пропускна здатність, тим швидше буде проходити міграція. В іншому випадку, можна використовувати jumpbox (із доступом до обох кластерів), який знаходиться або в AWS, або в іншого cloud-провайдера. Використання jumpbox зменшить час перенесення резервної копії з одного кластера на інший.
Якщо ви використовуєте jumpbox, то необхідно перевірити доступ до таких ресурсів:
-
Платформний MinIO.
-
Платформний Vault.
-
Центральний Vault у проєкті
user-management
.
Для цього необхідно виконати перевірку з IP-адреси jumpbox. Для отримання IP-адреси jumpbox виконайте наступну команду:
curl sshmyip.com | jq '.ip'
Далі переконайтеся, що виконані такі дії:
-
IP-адресу jumpbox додано до переліку дозволених CIDR на рівні керування платформою для кластерів SRC та DEST.
-
NAT IP DEST-кластера додано до списку дозволених CIDR на рівні SRC-кластера. Ви можете дізнатися NAT IP DEST-кластера, запустивши под у Jenkins проєкту
control-plane
та виконавши ту ж саму команду:curl sshmyip.com | jq '.ip'
(Деталі додавання IP адрес через інтерфейс адміністратора, детальніше дивіться на сторінці CIDR: Обмеження доступу до Платформних та реєстрових компонентів).
Якщо відсутній доступ до control-plane-console, зверніться до L2-команди для перевірки доступу.
При міграції реєстру, важливо щоб перед початком міграції, на DEST кластері не було ресурсів пов’язаних із реєстром. Якщо раніше реєстр не існував на цьому кластері, то подальші дії можна не виконувати.
- Якщо реєстр існував, то для видалення усіх ресурсів потрібно перевірити/видалити наступне:
-
-
Видаліть реєстр через інтерфейс адміністративної панелі Control Plane.
Детальніше про це ви можете переглянути на сторінці Видалення реєстру. -
Підтвердьте зміни та дочекатися видалення реєстру.
-
Після видалення перевірте відсутність проєкту у центральному компоненті Gerrit.
-
Перейдіть до Gerrit (Openshift-консоль > Projects >
control-plane
> Networking > Routes >control-plane-gerrit
). -
Автентифікуйтеся через openshift-sso, відкрийте меню Browse > Repositories та виконайте пошук за назвою реєстру.
-
Якщо пошук знаходить репозиторій, то перейдіть до Openshift-консоль > Projects >
control-plane
> Home > API Explorer > у пошуку (Filter by kind …
) знайдітьgerritproject
><назва реєстру>
> Actions >Delete GerritProject
. -
Після видалення Gerrit-проєкту, перейдіть до Gerrit-консолі та перевірте, що репозиторій відсутній. Якщо репозиторій існує, видаліть його через Gerrit-консоль ( відкрийте репозиторій реєстру > Commands > Delete project).
-
-
Видаліть директорію в Minio.
-
Для перевірки створених директорій в Minio, перейдіть до MinioUI (для кластерів vSphere цей Route можна знайти в OpenShift-консолі > Projects >
control-plane
> Networking > Routes >platform-minio-ui
. -
У випадку відсутності Route, перейдіть до секретів за шляхом:
Openshift-консоль > Project >control-plane
> Workloads > Secrets >backup-credentials
, скопіюйте полеbackup-s3-like-storage-url
та додайте до URL порт (Наприклад,https://endpoint.com:9001
).Дані для аутентифікації в Minio знаходяться в Openshift-консолі > Project > control-plane
> Secrets >backup-credentials
, деusername
— це полеbackup-s3-like-storage-access-key-id
, аpassword
—backup-s3-like-storage-secret-access-key
. -
Після аутентифікації перевірте/видаліть директорії, пов’язані у реєстрі в бакеті. Такими є:
-
openshift-backups/backups/<назва-реєстру>*;
-
openshift-backups/restic/<назва-реєстру>;
-
obc-backups/<назва реєстру>.
-
-
-
-
3. Підготовка реєстру до міграції
Перед початком міграції необхідно повністю обмежити доступ для кінцевих користувачів до цього реєстру. |
-
Створіть резервну копію реєстру на кластері SRC.
Перед перенесенням реєстру на новий кластер, необхідно запустити Jenkins-процес
Create-registry-backup-<назва реєстру>
.Якщо Jenkins pipeline завершився зі статусом
Success
, то резервна копія виконана успішно.Для отримання назви резервної копії, перейдіть до логів/журналів подій останнього запуску Jenkins pipeline (Console Output), та за пошуком на сторінці знайдіть повідомлення накшталт:
[INFO] Velero backup - <назва реєстру>-<час> done with Completed status
Наприклад, таке:
[INFO] Velero backup - abc-02-2023-04-18-19-03-14 done with Completed status
-
де
abc-02-2023-04-18-19-03-14
— назва резервної копії.
Для версій реєстру < 1.9.3 необхідно виконати у Terminal наступну команду:
velero backup describe <назва бекапу>
Назву бекапу можна знайти в логах останнього запуску Jenkins-процесу
Create-registry-backup-<назва реєстру>
.Детальніше про створення резервних копій та відновлення реєстрів див. у розділі Резервне копіювання та відновлення.
-
-
Якщо останній velero backup завершився зі статусом
Completed
, то можна переходити далі. У випадку, коли статус velero backup відрізняється відCompleted
, необхідно долучати спеціалістів із технічної підтримки L2-L3 для перевірки працездатності Jenkins-пайплайну. -
Отримайте консистентні дані у бекапах бакетів реєстру, що мігрується.
-
Для початку, отримайте актуальні бекапи S3-бакетів реєстру в проєкті
velero
. Відкрийте розділ Workloads, потім перейдіть до CronJobs. Тут використовуйте пошукову панель для фільтрації бакетів за назвою реєстру, наприклад,migrationreg
.Зображення 1. CronJobs -
Відкрийте кожну CronJob і змініть час її запуску на найближчий можливий, та додайте
value
для змінної оточенняMAX_AGE
. Для прикладу, встановіть запуск через 10-15 хвилин. Щоб це зробити, перейдіть до налаштувань кожної CronJob, відкрийте її YAML-конфігурацію і змініть параметрspec.schedule
. Наприклад, для запуску CronJob щодня о 10:50 за UTC, використовуйте наступну конфігурацію:CronJob details. YAML-конфігураціяspec: schedule: 50 10 * * *
При роботі з
cron
, час вказується за UTC.Зображення 2. CronJob details. ScheduleДля конфігурації
MAX_AGE
використовуйте наступну конфігурацію:spec: ... jobTemplate: ... spec: template: ... spec: ... containers: ... env: - name: MAX_AGE value: '2y'
-
Після цього дочекайтеся запуску і завершення усіх CronJob. Прогрес і статус можна перевірити в розділі Jobs, обравши відповідний Job і переглянувши розділ Status, де має бути позначка
✅ Complete
.Зображення 3. CronJob details. JobsЗображення 4. Job details. Status -
Завдяки цим діям ви отримаєте консистентні дані з бекапів бакетів реєстру, який перебуває у процесі міграції.
-
-
Забороніть робити зміни у реєстрі за допомогою Jenkins пайплайнів.
У кожному пайплайні для реєстру перейдіть до секції Configure та знайдіть параметр
Disable this project
у секції Build Triggers, встановіть напроти нього прапорець та збережіть зміни за допомогою кнопки Save.
4. Міграція резервної копії із кластера SRC до кластера DEST
-
Отримайте логін-команди для обох кластерів.
Для цього виконайте вхід до Openshift-консолі та у правому верхньому кутку, натисканням на свій username, перейдіть до
Copy login command
, скопіюйте токен доступу у поліLog in with token
та збережіть його у текстовому редакторі.Операцію потрібно повторити для обох кластерів: SRC та DEST. -
Отримайте назву останньої резервної копії, яка була створена на кластері SRC (наприклад,
abc-02-2023-04-18-19-03-14
). -
Відкрийте термінал та виконайте наступні команди:
Експорт логіну для кластера SRCexport SRC_CLUSTER_LOGIN="oc login --token …"
Вставте між лапок
"…"
після--token
отриману в пункті 1 команду логіну для кластера SRC. В кінці логін-команди не повинно бути перенесення на наступний рядок.Експорт логіну для кластера Вexport DEST_CLUSTER_LOGIN="oc login --token …"
Вставте між лапок
"…"
після--token
отриману в пункті 1 команду логіну для кластера В. В кінці логін-команди не повинно бути перенесення на наступний рядок.Експорт назви реєструexport REGISTRY_NAME="abc-02"
abc-02
— назва реєструЕкспорт назви резервної копіїexport BACKUP_NAME="<назва резервної копії>"
Приклад назви резервної копії: abc-02-2023-04-18-19-03-14
.Експорт значення шифрування резервних копій в MinIO на кластері SRCexport MINIO_SRC_SSE="true"/"false"
За замовчуванням це значення дорівнює - "false". Приклад значення при увімкненому шифруванні резервної копії на кластері SRC: "true"
.Експорт значення шифрування резервних копій в MinIO на кластері DESTexport MINIO_DEST_SSE="true"/"false"
За замовчуванням це значення дорівнює - "false". Приклад значення при увімкненому шифруванні резервної копії на кластері DEST: "true"
.
У випадку, коли реєстр попередньо був мігрований на кластер SRC, а не розгорнутий на цій Платформі, виконайте додатковий
|
-
Збережіть архів, розархівуйте його в нову директорію наступною командою:
unzip registry-migration.zip -d registry-migration
Перейдіть в директорію registry-migration (
cd
) та виконайте команду:bash migration.sh
Якщо виконання скрипта завершилось з помилкою на етапі міграції бакетів (наприклад, через помилку Helm), то процес міграції бакетів можна запустити окремо, виконавши наступну команду:
export MIGRATE_BUCKETS_ONLY="true"
Якщо необхідно замінити посилання на MinIO SRC, виконайте команду:
export MINIO_SRC_ENDPOINT_OVERWRITE="<посилання на MinIO>"
Якщо необхідно замінити посилання на MinIO DEST, виконайте команду:
export MINIO_DEST_ENDPOINT_OVERWRITE="<посилання на MinIO>"
Після виконання необхідних змін перезапустіть скрипт.
-
В результаті виконання скрипта будуть виконані наступні дії:
-
Перенесено Velero backup на DEST кластер
-
На jumpbox хості, створенна директорія - keycloak-export-<назва-реєстру>
-
Перенесена інформація з Vault в проєкті user-management
-
На DEST кластері в проекті velero створені Kubertnets Job для перенесення данних бакетів з MinIO SRC до MiniIO DEST
-
-
Після виконання скрипту, виконайте логін у терміналі за допомогою oc cli на кластері DEST, та перевірте наступне:
-
Наявність velero backup на кластері DEST.
-
Наявність директорій із назвою keycloak-export у папці, де знаходиться скрипт.
-
Завершення Kubernetes Job з переносу інформації з MinIO SRC до MiniIO DEST
-
5. Підготовка до відновлення на кластері DEST
-
Створіть реєстр через
control-plane-console
.-
Створіть реєстр з тим же ім’ям, і такою ж версією на кластері DEST. При створенні реєстру призначте усіх адміністраторів, що були у реєстрі на кластері SRC, та вкажіть актуальні дані.
- Дані про ключ
-
Поля заповніть або з актуальними ключами для цього реєстру, або використовуйте тестові ключі. У майбутньому, після міграції, інформацію про ключі можна актуалізувати через консоль Control Plane. За даними для ключів звертатись до L2-L3 підтримки.
Детальніше про оновлення ключів реєстру — див. на сторінці Оновлення ключів та сертифікатів цифрового підпису для реєстру.
- Шаблон реєстру
-
Оберіть такий самий шаблон, як і шаблон цього реєстру на кластері SRC. Для отримання назви шаблону, перейдіть до Openshift-консолі > Projects >
control-plane
> API Explorer > У пошуку визначтеcodebase
> Перейдіть доcodebase
> Instances > Відкрийтеcodebase <назва реєстру>
> Перевірте наступні налаштування:Приклад 1. codebase.yamlmetadata: annotations: registry-parameters/template-name: templates/registry-tenant-template-minimal
-
де
templates/registry-tenant-template-minimal
— назва шаблону розгортання реєстру.
-
Якщо функціональність консолі дозволяє додати DNS для keycloak або порталів, на цьому етапі необхідно пропустити цей крок, адже трафік поки налаштований на кластер SRC). -
Після створення, одразу перейдіть до Jenkins (namespace
control-plane
> Networking > Routes >jenkins
), та зупиніть першу збіркуMASTER-Build-<назва реєстру>
.Дочекайтеся створення директорії <назва реєстру>
та створення Jenkins-пайплайну. Після запуску одразу зробити Abort збірки.
-
-
Залишаючись у консолі Jenkins, змініть конфігурацію MASTER-Build-
<назва реєстру>
:
Перейдіть до MASTER-Build-<назва реєстру>
> Configure, та у секції Build Triggers встановіть прапорець на параметрі Disable this project. Далі збережіть зміни кнопкоюSave
. -
Перенесіть файли конфігурації values.yaml, values.gotmpl та helmfile.yaml з репозиторію реєстру кластера SRC на кластер DEST.
-
Перейдіть до репозиторію реєстру на кластері А:
Відкрийте Control-plane-console > Дашборд > Gerrit > Browse > Repositories > оберіть репозиторій<назва реєстру>
.
У репозиторії реєстру перейдіть до Branches >master
, далі перейдіть до deploy-templates, відкрийте файл values.yaml ( values.gotmpl, helmfile.yaml) > Скопіюйте raw-код до буфера обміну. -
Далі перейдіть до репозиторію реєстру на кластері DEST:
Control-plane-console > Дашборд > Gerrit ) > Browse > Repositories та оберіть репозиторій<назва реєстру>
. Через commands >Create change
створіть зміну (change) із наступними параметрами:-
Select branch for new change: master
. -
Description: Update registry before migration
.Після створення зміни, у самому change натисніть
Edit
>ADD/OPEN/UPLOAD
— знайдіть файл values.yaml (values.gotmpl, helmfile.yaml). Перенесіть до цього файлу скопійовану конфігурацію values.yaml (values.gotmpl) із кластера SRC.
-
-
Повторіть операцію для файлів: values.yaml, values.gotmpl та helmfile.yaml.
-
Збережіть зміни, дочекайтеся проходження пайплайну Code Review (СІ Jenkins
+1
), проставтеCode-review +2
,та виконайте злиття змін доmaster
-гілки кнопкоюSubmit
.
-
-
Перенесіть усі версії компонент які були застосовані для реєстру як кастомізація(Gerrit гілка, Docker Image).
Від виконання цього пункту залежить подальше відновлення рєестра
-
Перейдіть у консоль Jenkins, змініть конфігурацію MASTER-Build-
<назва реєстру>
:
Перейдіть до MASTER-Build-<назва реєстру>
> Configure, та у секції Build Triggers приберіть прапорець на параметрі Disable this project. Далі збережіть зміни кнопкоюSave
. -
Заміна файла в репозиторії backup-management
Цей розділ описує процес заміни файлу
bucket-replication/templates/configmap.yaml
у репозиторіїbackup-management
.Кроки виконання:
-
Знайти версію backup-management для змін:
-
Відкрити гілку
cluster-mgmt
. -
Перейти у файл
properties/cluster-mgmt.yaml
. -
Знайти версію у релізі backup-management, яка використовується.
-
-
Зробити зміни у версії backup-management:
Замість поточного файлу
bucket-replication/templates/configmap.yaml
потрібно додати наступний код:apiVersion: v1 kind: ConfigMap metadata: name: {{ include "bucket-replication.fullname" . }} namespace: {{ .Release.Namespace }} labels: {{- include "bucket-replication.labels" . | nindent 4 }} data: bucket-replication.sh: | #!/usr/bin/env bash rook_s3_endpoint=$(oc get cephobjectstore/mdtuddm -n openshift-storage -o=jsonpath='{.status.info.endpoint}') bucket=$(oc get objectbucketclaim/"${OBJECT_BUCKET_CLAIM}" -n ${REGISTRY_NAMESPACE} -o=jsonpath="{.spec.bucketName}") access_key_rook=$(oc get secret/"${OBJECT_BUCKET_CLAIM}" -n "${REGISTRY_NAMESPACE}" -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 -d) access_secret_key_rook=$(oc get secret/"${OBJECT_BUCKET_CLAIM}" -n "${REGISTRY_NAMESPACE}" -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 -d) mkdir -p ~/.config/rclone echo " ["${BACKUP_BUCKET}"] type = s3 provider = Other endpoint = ${S3_ENDPOINT} {{- if .Values.global.registryBackup.obc.sse }} server_side_encryption = aws:kms {{- end }} env_auth = true region = ${S3_REGION} [rook] type = s3 provider = Ceph env_auth = false access_key_id = ${access_key_rook} secret_access_key = ${access_secret_key_rook} endpoint = ${rook_s3_endpoint} acl = bucket-owner-full-control bucket_acl = authenticated-read" > ~/.config/rclone/rclone.conf # append only bucket - data bucket strategy (by label) - copy / other sync rclone_command="rclone copy --progress --no-traverse --metadata --s3-no-check-bucket --transfers=16 --checkers=32 --buffer-size=32Mi" {{- if eq .Values.registryBackup.obc.action "replication" }} if [[ -z $(rclone lsd ${BACKUP_BUCKET}:${BACKUP_BUCKET}/obc-backups/${REGISTRY_NAMESPACE} | grep ${OBJECT_BUCKET_CLAIM}) ]]; then echo "[INFO] Destination folder empty, copy full bucket to destination" else echo "[INFO] Destination folder exists, copy bucket data for ${MAX_AGE}" rclone_command="${rclone_command} --max-age ${MAX_AGE}" fi $rclone_command rook:${bucket} ${BACKUP_BUCKET}:/${BACKUP_BUCKET}/obc-backups/${REGISTRY_NAMESPACE}/${OBJECT_BUCKET_CLAIM}/ {{- else }} $rclone_command ${BACKUP_BUCKET}:/${BACKUP_BUCKET}/obc-backups/${REGISTRY_NAMESPACE}/${OBJECT_BUCKET_CLAIM} rook:${bucket} {{- end }}
Вставте цей код, замінивши поточний вказаний файл у відповідній версії backup-management.
У випадку коли на Minio DEST кластеру увімкнене шифрування, треба зробити додаткові зміни в
bucket-replication/values.yaml
. Зміни передбачають додавання значення для ключа .global.registryBackup.obc.sse зі значенням true наступним чином:global: registryBackup: obc: sse: true
-
-
Оновити версію
edp-library-stages-fork
-
Визначити поточну версію
edp-library-stages-fork
:-
Відкрити Jenkins pipeline
Restore-registry*
. -
Перейти до секції Configure у пайплайні.
-
У Pipeline script знайти поточну версію
edp-library-stages-fork
.
-
-
Оновити репозиторій
edp-library-stages-fork
:-
У файлі репозиторію
edp-library-stages-fork
за шляхом:src/com/epam/edp/customStages/impl/registrytenanttemplate/RestoreRegistry.groovy
Знайти ряд:
deployHelper.deployOBCBackupRestoreHelm( "${veleroNamespace}", "${backupManagementDir}/bucket-replication", "s3-restore-${script.env.NAMESPACE}", parametersMap, "${context.workDir}/${context.helmValuesPath}", true )
Видалити прапорець та замініть їх на:
deployHelper.deployOBCBackupRestoreHelm( "${veleroNamespace}", "${backupManagementDir}/bucket-replication", "s3-restore-${script.env.NAMESPACE}", parametersMap, "${context.workDir}/${context.helmValuesPath}", false )
-
-
-
Зберегти зміни у Gerrit:
-
Перейти в репозиторій
edp-library-stages-fork
у Gerrit. -
Виконати необхідні правки в файлі, створивши новий change.
-
Після цього підтвердити зміни:
-
Проставити позначки (Code-Review +2).
-
Виконати злиття змін за допомогою кнопки
Submit
.
-
-
-
Перевірити оновлення:
-
Переконатися, що зміни в репозиторії збережені.
-
У Jenkins pipeline
Restore-registry*
підтвердити, що застосовано нову версію репозиторіюedp-library-stages-fork
.-
Змініть файл і змерджіть зміни:
-
-
Виконайте заміну файлу
bucket-replication/templates/configmap.yaml
у відповідній гілці репозиторію backup-management. -
Надішліть зміни на Code Review.
-
Дочекайтеся підтвердження змін (Code-Review +2).
-
Натисніть Submit для злиття змін.
-
6. Відновлення реєстру на кластері DEST
Увімкніть доступ для кінцевих користувачів до реєстру ЛИШЕ після завершення процесу відновлення реєстру. |
-
Відрийте до Jenkins (namespace
control-plane
> Networking > Routes >jenkins
), перейдіть до папки із назвою реєстру та запустіть Jenkins-пайплайнRestore-registry-<назва реєстру>
. Після запуску пайплайну оберіть версію (на етапіcleanup-registry-before-restore
) та дочекайтеся, коли процес завершиться.У випадку, коли процес завершується помилкою або триває понад 1-2 години, зверніться до спеціалістів команди технічної підтримки L2-L3 "ЕПАМ". Після внесених змін в репозиторій edp-library-stages-fork, процес відновлення реєстру запускає паралельний підпроцес відновлення бакетів реєстру. Для повного завершення процесу міграції та відновлення на кластері DEST необхідно дочекатися завершення Job з префіксом
<назва-реєстру>-restore-
.Цей процес виконується паралельно і результат його завершення впливає виключно на кінцевий результат відновлення реєстра. Очікування завершення процесу відновлення бакетів реєстру є важливим для коректного завершення процесу відновлення.
Процесс відновлення OBC не впливає на подальші виконання кроків в інструкції.
-
Після завершення пайплайну перейдіть в Openshift-консоль → Projects → <registry-name>, та перевірте, що немає под у статусі помилок.
У випадку, коли пода із назвою
bpms-
* не запущена і має статус помилки, виправте паролі уpostgres
дляoperational-instance
таanalytical-instance
под, для цього потрібно:-
Перейдіть в Openshift-консоль > Secrets, знайдіть secret для
operational-instance
—operational-pguser-postgres
(дляanalytical-instance
— цеanalytical-pguser-postgres
). -
Перейдіть в Secret та скопіюйте поле
password
. -
Перейдіть в Openshift-консоль > Pods > знайдіть поду
operational-instance
абоanalytical-instance
та виконайте по черзі наступні команди:psql
ALTER ROLE postgres WITH PASSWORD '<password>';
-
де
<password>
— полеpassword
, скопійоване у Secret, для відповідного екземпляра —operational
абоanalytical
.
-
-
Після виконання усіх операцій, видаліть поду
bpms
та дочекайтеся, коли вона буде у статусіRunning
(активна/запущена).
У випадку, коли пода
registry-rest-api
запускається з помилкоюImagePullBackOff
, додайте IP кластера DEST до анотації Openshift Route > Nexus.-
Для цього перейдіть в Openshift-консоль > Project >
<назва реєстру>
> Routes > Nexus > YAML та перевірте наступне поле у .yaml-конфігурації:.Приклад 2. route.yamlmetadata: annotations: haproxy.router.openshift.io/ip_whitelist: <NAT Cluster IP>/32,....
Якщо IP-адреса кластера DEST відсутня, додайте її до
haproxy.router.openshift.io/ip_whitelist
із маскою/32
.
У випадку коли пода
nexus-
* зі статусомCrashLoopBackOff
, треба видалити поду і дочекатись коли вона буде в статусіRunning
.Якщо пода в реєстрі має статус 1/2, 0/1 або 2/3, перезапустіть поду шляхом видалення.
-
-
Перенесіть користувачів.
-
В Openshift-консолі знайдіть проєкт (namespace)
user-management
, відкрийте Networking > Routes та перейдіть за посиланням до сервісуkeycloak
.Дані для логіну можна отримати із секретів keycloak у тому ж проєкті. Для цього перейдіть до Workloads > Secrets, знайдіть у пошуку секрет із назвою keycloak
, та у розділі Data скопіюйте дані для входу до сервісу.Перейдіть в адмін-консоль Keycloak, перейдіть до реалму (1), та у лівому меню реалму оберіть
Import
(2) (при імпорті оберіть стратегіюSKIP
), далі натиснітьSelect file
(3) та виберіть файл із директорії keycloak-export-<назва реєстру>/<ім’я реалму>-users-*.json.Перенесення користувачів треба повторити для усіх реалмів реєстру. Якщо файлів більше одного, то виконайте імпорт усіх файлів.
Зображення 5. File import -
-
Перенесіть конфігурацію реєстру до values.yaml/values.gotmpl.
-
Увійдіть до control-plane-gerrit (Openshift-консоль > Projects →
control-plane
→ Networking →gerrit
> Логін черезopenshift-sso
).У Gerrit перейдіть до Browse > Repositories та оберіть репозиторій
<назва реєстру>
. Черезcommands
>Create change
створіть зміну (change) із наступними параметрами:-
Select branch for new change: master
. -
Description: Update registry after migration
.Після створення change, у самому change натисніть
Edit
.
-
-
Додайте конфігурацію
vault
у values.gotmpl.Для цього візьміть актуальну конфігурацію
vault
з config-maphashicorp-vault-config
(Openshift-консоль > Projects ><назва реєстру>
> Workloads > ConfigMaps >hashicorp-vault-config
) та скопіюйте поле як у наступному прикладі:ui = true listener "tcp" { tls_disable = 1 address = "[::]:8200" cluster_address = "[::]:8201" } storage "file" { path = "/vault/data" } seal "transit" { address = "https://<vault url>" disable_renewal = "false" key_name = "<key name>" mount_path = "transit/" tls_skip_verify = "true" }
-
де
<vault URL>
— посилання доvault
,<key name>
— назва ключа (у конфігурації зconfig-map
поле не актуальне, треба замінити наautounseal-<назва реєстру>-migration>
).У випадку, коли реєстр попередньо був мігрований на кластер SRC, а не розгорнутий на цій Платформі,
<key name>
буде дорівнювати<VAULT_KEY>-<назва реєстру>-migration>
, деVAULT_KEY
- це зміна оточення з пункту4.3
. -
Далі в change натисніть
ADD/OPEN/UPLOAD
, у пошуку вкажіть values.gotmpl та виберіть потрібний файл. В самому файлі додайте конфігурацію як у прикладі:vault: platformVaultToken: {{ env "platformVaultToken" }} openshiftApiUrl: {{ env "openshiftApiUrl" }} centralVaultUrl: {{ b64dec $centralVaultUrl }} server: dataStorage: storageClass: ocs-storagecluster-ceph-rbd auditStorage: storageClass: ocs-storagecluster-ceph-rbd standalone: config: | ui = true listener "tcp" { tls_disable = 1 address = "[::]:8200" cluster_address = "[::]:8201" } storage "file" { path = "/vault/data" } seal "transit" { address = "https://<vault url>" disable_renewal = "false" key_name = "<key name>" mount_path = "transit/" tls_skip_verify = "true" }
-
Після додавання натисніть Save.
-
Змініть розмір
kafka
-дисків. Залишаючись у цьому файлі, знайдіть поле:storage: zookeeper: size: 5Gi kafka: size: 20Gi
-
Змініть розмір
kafka.size
відповідно до розміру актуального диска в Openshift-консолі (Openshift-консоль > Project →<назва реєстру>
→ Storage >PersistentVolumeClaims
). У пошуку знайдітьdata-0-kafka-cluster-kafka-0
та йогоCapacity
. Поверніться до редагування values.gtmpl та встановіть бажаний розмір диска:storage: zookeeper: size: 5Gi kafka: size: 40Gi
-
де 40Gi - актуальний розмір диска з
Capacity
.
-
-
Видаліть усіх
GerritGroupMember
. Для цього виконайте вхід до кластера DEST через ос cli та виконати наступну команду:oc -n <назва-реєстру> delete gerritgroupmember --all
-
-
Після застосування змін має запуститися Jenkins-процес
MASTER-Build-<назва реєстру>
. -
Після з завершення Jenkins-пайплайну
MASTER-Build-<назва реєстру>
, виправте Jenkins Credentials у Jenkins реєстру.У випадку, коли доступу немає, додайте себе як адміністратора реєстру через control-plane-console.
-
Для цього перейдіть в Openshift-консоль > Projects >
<назва реєстру>
> Workloads > Secrets >gerrit-control-plane-sshkey
та скопіюйте полеid_rsa
. -
Після цього перейдіть у реєстровий Jenkins (Networking > Routes >
jenkins
) > Manage Jenkins > Manage Credentials >gerrit-ci-users-sshkey
(gerrit-control-plane-sshkey
) > натиснітьUpdate
. -
У полі
Private Key
за допомогоюReplace
вставте скопійоване значення.
-
-
Оновіть посилання на Nexus у репозиторії регламенту.
Для цього перейдіть до Openshift-консолі > Project → <назва реєстру> > Gerrit та виконайте логін.
Далі перевірте наявність доступу до проєктів у Gerrit та клонуйте локально репозиторій registry-regulations. Для цього:
-
У вебінтерфейсі Gerrit, перейдіть у налаштування > HTTP Credentials > згенеруйте новий пароль за допомогою
Generate New Password
, та збережіть цей пароль у нотатках. -
Перейдіть до репозиторію
registry-regulations
> та скопіюйте команду для клону Anonymous HTTP >Clone with commit-msg hook
. -
Вставте команду для клону репозиторію до термінала та виконайте. Команда запитає логін та пароль. Логін в цьому випаду буде ваш email, а пароль — той, який ви згенерували у першому підпункті.
Детальніше про роботу з репозиторієм Gerrit див. на сторінці Операції з регламентом в Gerrit. Якщо в системі git user відрізняється від вашого user на сервері Gerrit, виконайте наступні команди:
git config --global user.name "New Author Name" git config --global user.email "<email@address.example>"
Наприклад:
git config --global user.name "Jonh Doe" git config --global user.email "jong_doe@doemail.com"
-
-
Змініть мінорну версію в settings.yaml у кореневій (root) директорії репозиторію registry-regulations згідно із приладом:
settings: general: package: ua.gov.mdtu.ddm.dataplatform.template register: registry version: 2.21.0
Наприклад, додайте до версії
+1
:settings: general: package: ua.gov.mdtu.ddm.dataplatform.template register: registry version: 2.21.1
-
Замініть згадування DNS-кластера SRC на кластер DEST. Для цього у терміналі перейдіть до директорії registry-regulations/data-model
cd registry-regulations/data-model
Та виконайте наступну команду по заміні DNS:
find "." \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i -e 's/<Cluster SRC DNS wildcard> /<Cluster DEST DNS Wildcard> /g'
Cluster SRC DNS wildcard/Cluster DEST DNS wildcard
— цеapps.
* (наприклад,apps.reestr1.eua.gov.ua
). Як повинно виглядати sed правило:'s/apps.cluster-a.dns.wildcard.com/apps.cluster-b.dns.wildcard.com/g'
-
Виконайте commit змін та push до репозиторію:
git add --all
git commit -m "Update nexus URL"
git push origin refs/heads/master:refs/for/master
-
Перейдіть у реєстровий Gerrit, проставте відмітки
Code-Review +2
, та за допомогою кнопки Submit застосуйте зміни до master-гілки. -
Після внесення змін до master-гілки перейдіть до Jenkins реєстру та перевірте, що Jenkins-пайплайни у Jenkins Folder registry-regulations завершилися зі статусом
Success
.
7. Перевірка реєстру
-
Переконайтеся, що Кабінети користувачів працюють у штатному режимі, та бізнес-процеси мігрували успішно.
-
Усі Jenkins pipeline мають завершитися зі статусом
Success
.
8. Перенесення конфігурації реєстру
- Перенесіть конфігурацію реєстру із кластера SRC на кластер DEST відповідно до документації:
-
-
Адміністратори (див. детальніше на сторінці Створення адміністраторів реєстру).
-
Дані про ключ (див. детальніше на сторінці Оновлення ключів та сертифікатів цифрового підпису для реєстру).
-
Поштовий сервер (див. детальніше на сторінці Налаштування підключення до поштового сервера).
-
Ресурси реєстру
Перенесіть параметри налаштувань із файлу values.yaml (секція global.registry
) реєстру на кластері А до налаштувань у файлі values.yaml реєстру на кластері В. -
DNS (див. детальніше на сторінці Налаштування власних DNS-імен).
-
Обмеження доступу (див. детальніше на сторінці CIDR: Обмеження доступу до Платформних та реєстрових компонентів).
-
Автентифікація надавачів послуг (див. детальніше на сторінках Налаштування автентифікації надавачів послуг та Налаштування самостійної реєстрації для надавачів послуг).
-
Автентифікація отримувачів послуг (див. детальніше на сторінці Налаштування автентифікації та підпису даних для отримувачів послуг)
-
Резервне копіювання (див. детальніше на сторінках Створення резервних копій та відновлення екземпляра реєстру вручну та Керування розкладом резервного копіювання реєстру).
-