Спеціальні кроки для оновлення Платформи та реєстрів до версії 1.9.3

1. Мета сторінки

Метою цієї сторінки є опис процесу оновлення кластера з версії 1.9.2.7 до 1.9.3.15 та необхідних для цього спеціальних кроків, а також подальшого оновлення реєстрів.

Послідовність оновлення наступна:
  1. Оновлення платформи з 1.9.2.7 до 1.9.3.15.

  2. Ручні кроки конфігурації після оновлення.

  3. Оновлення реєстрів до версії 1.9.3.28.

2. Оновлення платформи

2.1. Ручне оновлення платформи

Якщо ви розгортали платформу самостійно, за інструкцією Розгортання платформи з нуля в AWS-середовищі, то перейдіть до відповідного розділу 6.2. Оновлення та виконайте необхідні кроки з оновлення Платформи.

2.2. Оновлення платформи за допомогою пайплайну platform-deploy

Якщо ви розгортали платформу за допомогою Jenkins-пайплайну з CICD2-кластера, то виконайте наступні дії:

Запустіть Jenkins-пайплайн platform-deploy з опціями оновлення та необхідною версією збірки — 1.9.3.15.

image

Для середовища Envone режим розгортання має бути development:

deploymentMode: development

2.3. Оновлення cluster-mgmt до версії 1.9.3.28

Оновіть компонент cluster-mgmt до версії 1.9.3.28.

image
Детальніше — див. на сторінці Оновлення інфраструктурних компонентів Платформи.

3. Кроки після оновлення платформи

3.1. Додавання оператора external-secrets до ресурсів CRDs

Додайте оператор external-secrets до ресурсів CRDs. Для цього виконайте наступні кроки:

  1. Виконайте вхід до цільового Openshift-кластера як адміністратор Платформи.

  2. Отримайте API-токен для доступу до кластера через oc login:

    • Натисніть Copy Login Command.

      cp backup schedule 11

    • Увійдіть через Keycloak.

      cp backup schedule 12

    • Натисніть Display Token (показати токен).

      cp backup schedule 13

    • Скопіюйте oc login API-токен.

      cp backup schedule 14

  3. Відкрийте термінал/консоль, вставте отриманий токен та виконайте вхід.

    $ oc login --token=sha256~**** --server=https://api.master-for-update-31.mdtu-ddm.projects.epam.com:6443
  4. Клонуйте репозиторій control-plane-installer та виконайте checkout до гілки з останньою версією тегу — 1.9.3.15. Для цього по черзі виконайте команди:

    $ git clone "ssh://name_surname@epam.com@gerrit-mdtu-ddm-edp-cicd.apps.cicd2.mdtu-ddm.projects.epam.com:32114/mdtu-ddm/infrastructure/control-plane-installer" && scp -p -P 32114 name_surname@epam.com@gerrit-mdtu-ddm-edp-cicd.apps.cicd2.mdtu-ddm.projects.epam.com:hooks/commit-msg "control-plane-installer/.git/hooks/"
    
    $ cd control-plane-installer
    
    $ git checkout build/1.9.3.15
  5. Застосуйте external-secrets CRDs:

    $ kubectl apply -f deploy-templates/customresourcedefinitions/crds/external-secrets/
image
image

За відсутності доступу до CICD2-кластера, ці конфігурації CRD можна взяти з екземпляра, на якому розпаковувався installer, за наступним шляхом:

$ cd repositories/components/control-plane/control-plane-installer.git/

3.2. Версіонування control-plane-console

У зв’язку зі створенням зворотно несумісних змін у control-plane-console, вирішено переходити до процесу версіонування цього компонента.

Як проміжний крок для впровадження підходу версіонування та плавного переходу на нову версію control-plane-console із можливістю відкотитися назад, запропоновано виконати наступні кроки для оновлення реєстрів із версії 1.9.2 до 1.9.3:

  • Відкотити control-plane-console до старої версії 1.9.2.

  • Розгорнути додатково control-plane-console версії 1.9.2 + Route.

  • Розгорнути додатково control-plane-console версії 1.9.3 + Route.

Таким чином, після оновлення Платформи до версії 1.9.3 кінцевим користувачам буде доступна лише 1.9.2 версія Адмін панелі.

Порядок оновлення реєстрів описано у розділі Консоль, з якої необхідно оновлювати реєстри.

Перед оновленням необхідно виконати наступні кроки:

  1. Відкотіть control-plane-console до старої версії 1.9.2 шляхом зміни тегу образа (image) у control-plane-console DeploymentConfig.

    • 1.1. Відкрийте OKD > Workloads > DeploymentConfigs > control-plane-console > YAML.

    • 1.2. Знайдіть і замініть docker image на версію control-plane-console-master:1.9.0.26.

      control-plane-console
      image: >-
                  docker-registry.control-plane-nexus.svc:5004/control-plane/control-plane-console-master:1.9.0.26
      Зауважте, що Route за замовчуванням буде приводити до старої версії control-plane-console — 1.9.2. Наприклад, https://control-plane-console-control-plane-platform-main.apps.master-for-update-30.mdtu-ddm.
  2. Розгорніть додатково control-plane-console версії 1.9.2 — Build 1.9.0.26.

    • 2.1. Відкрийте OKD > Workloads > DeploymentConfigs > Create DeploymentConfig > YAML.

      Необхідно скрізь замінити DNS wildcard відповідно до середовища.
      DeploymentConfig control-plane-console-1-9-2
      kind: DeploymentConfig
      apiVersion: apps.openshift.io/v1
      metadata:
        annotations:
          meta.helm.sh/release-name: control-plane-console
          meta.helm.sh/release-namespace: control-plane
        name: control-plane-console-1-9-2
        namespace: control-plane
        labels:
          app: control-plane-console-1-9-2
          app.kubernetes.io/managed-by: Helm
      spec:
        strategy:
          type: Recreate
          recreateParams:
            timeoutSeconds: 600
          rollingParams:
            updatePeriodSeconds: 1
            intervalSeconds: 1
            timeoutSeconds: 600
            maxUnavailable: 25%
            maxSurge: 25%
          resources: {}
          activeDeadlineSeconds: 21600
        triggers:
          - type: ConfigChange
        replicas: 1
        revisionHistoryLimit: 10
        test: false
        selector:
          app: control-plane-console-1-9-2
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: control-plane-console-1-9-2
          spec:
            containers:
              - resources:
                  requests:
                    memory: 500Mi
                readinessProbe:
                  tcpSocket:
                    port: 8080
                  initialDelaySeconds: 60
                  timeoutSeconds: 1
                  periodSeconds: 20
                  successThreshold: 1
                  failureThreshold: 5
                terminationMessagePath: /dev/termination-log
                name: control-plane-console
                livenessProbe:
                  tcpSocket:
                    port: 8080
                  initialDelaySeconds: 180
                  timeoutSeconds: 1
                  periodSeconds: 20
                  successThreshold: 1
                  failureThreshold: 5
                env:
                  - name: NAMESPACE
                    valueFrom:
                      fieldRef:
                        apiVersion: v1
                        fieldPath: metadata.namespace
                  - name: HOST
                    value: >-
                      https://control-plane-console-1-9-2-control-plane.apps.master-for-update-30.mdtu-ddm.projects.epam.com
                  - name: BASE_PATH
                  - name: EDP_ADMIN_CONSOLE_VERSION
                  - name: GERRIT_GLOBAL_LINK
                    value: >-
                      https://gerrit-control-plane-platform-main.apps.master-for-update-30.mdtu-ddm.projects.epam.com
                  - name: CLUSTER_REPO
                    value: cluster-mgmt
                  - name: GROUP_GIT_REPO
                    value: registry-group
                  - name: REGISTRY_REPO_HOST
                    value: >-
                      https://gerrit-control-plane-platform-main.apps.master-for-update-30.mdtu-ddm.projects.epam.com
                  - name: REGISTRY_REPO_PREFIX
                    value: registry-tenant-template-
                  - name: JENKINS_GLOBAL_LINK
                    value: >-
                      https://jenkins-control-plane-platform-main.apps.master-for-update-30.mdtu-ddm.projects.epam.com
                  - name: AUTH_ENABLED
                    value: 'true'
                  - name: INTEGRATION_STRATEGIES
                    value: 'Create,Import'
                  - name: BUILD_TOOLS
                    value: maven
                  - name: DEPLOYMENT_SCRIPT
                    value: 'helm-chart,openshift-template'
                  - name: PLATFORM_TYPE
                    value: openshift
                  - name: VERSIONING_TYPES
                    value: 'default,edp'
                  - name: CI_TOOLS
                    value: 'Jenkins,GitLab CI'
                  - name: PERF_DATA_SOURCES
                    value: 'Sonar,Jenkins,GitLab'
                  - name: EDP_NAME
                    value: control-plane
                  - name: OC_CLIENT_SECRET
                    valueFrom:
                      secretKeyRef:
                        name: oauth-admin-console-client
                        key: secret
                  - name: OC_CLIENT_ID
                    valueFrom:
                      secretKeyRef:
                        name: oauth-admin-console-client
                        key: clientId
                  - name: PROJECT_MASK_URL
                    value: '/console/project/{namespace}/overview'
                  - name: IMAGE_STREAM_MASK_URL
                    value: '/console/project/{namespace}/browse/images/{stream}'
                  - name: ENABLE_BRANCH_PROVISIONERS
                    value: '1'
                ports:
                  - containerPort: 8080
                    protocol: TCP
                imagePullPolicy: IfNotPresent
                terminationMessagePolicy: File
                image: >-
                  docker-registry.control-plane-nexus.svc:5004/control-plane/control-plane-console-master:1.9.0.26
            restartPolicy: Always
            terminationGracePeriodSeconds: 30
            dnsPolicy: ClusterFirst
            serviceAccountName: control-plane-console
            serviceAccount: control-plane-console
            securityContext: {}
            schedulerName: default-scheduler
      image
    • 2.2. Відкрийте OKD > Networking > Services > Create Service.

      Service control-plane-console-1-9-2
      kind: Service
      apiVersion: v1
      metadata:
        name: control-plane-console-1-9-2
        namespace: control-plane
        labels:
          app: control-plane-console-1-9-2
          app.kubernetes.io/managed-by: Helm
        annotations:
          meta.helm.sh/release-name: control-plane-console
          meta.helm.sh/release-namespace: control-plane
      spec:
        ipFamilies:
          - IPv4
        ports:
          - protocol: TCP
            port: 8080
            targetPort: 8080
        internalTrafficPolicy: Cluster
        type: ClusterIP
        ipFamilyPolicy: SingleStack
        sessionAffinity: None
        selector:
          app: control-plane-console-1-9-2
      image
    • 2.3. Відкрийте OKD > Networking > Routes > Create Route.

      Необхідно замінити DNS wildcard у полі host на таке, що відповідатиме середовищу.
      Route control-plane-console-1-9-2
      kind: Route
      apiVersion: route.openshift.io/v1
      metadata:
        name: control-plane-console-1-9-2
        namespace: control-plane
        labels:
          app: control-plane-console
          app.kubernetes.io/managed-by: Helm
        annotations:
          openshift.io/host.generated: 'true'
      spec:
        host: >-
          control-plane-console-1-9-2-control-plane.apps.master-for-update-30.mdtu-ddm.projects.epam.com
        to:
          kind: Service
          name: control-plane-console-1-9-2
          weight: 100
        port:
          targetPort: 8080
        tls:
          termination: edge
          insecureEdgeTerminationPolicy: Redirect
        wildcardPolicy: None
      image
      image
  3. Розгорніть додатково control-plane-console версії 1.9.3 — Build 1.9.0.41.

    • 3.1. Відкрийте OKD > Workloads > DeploymentConfigs > Create DeploymentConfig > YAML.

      Необхідно скрізь замінити DNS wildcard відповідно до середовища.
      DeploymentConfig control-plane-console-1-9-3
      kind: DeploymentConfig
      apiVersion: apps.openshift.io/v1
      metadata:
        annotations:
          meta.helm.sh/release-name: control-plane-console
          meta.helm.sh/release-namespace: control-plane
        name: control-plane-console-1-9-3
        namespace: control-plane
        labels:
          app: control-plane-console-1-9-3
          app.kubernetes.io/managed-by: Helm
      spec:
        strategy:
          type: Recreate
          recreateParams:
            timeoutSeconds: 600
          rollingParams:
            updatePeriodSeconds: 1
            intervalSeconds: 1
            timeoutSeconds: 600
            maxUnavailable: 25%
            maxSurge: 25%
          resources: {}
          activeDeadlineSeconds: 21600
        triggers:
          - type: ConfigChange
        replicas: 1
        revisionHistoryLimit: 10
        test: false
        selector:
          app: control-plane-console-1-9-3
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: control-plane-console-1-9-3
          spec:
            containers:
              - resources:
                  requests:
                    memory: 500Mi
                readinessProbe:
                  tcpSocket:
                    port: 8080
                  initialDelaySeconds: 60
                  timeoutSeconds: 1
                  periodSeconds: 20
                  successThreshold: 1
                  failureThreshold: 5
                terminationMessagePath: /dev/termination-log
                name: control-plane-console
                livenessProbe:
                  tcpSocket:
                    port: 8080
                  initialDelaySeconds: 180
                  timeoutSeconds: 1
                  periodSeconds: 20
                  successThreshold: 1
                  failureThreshold: 5
                env:
                  - name: NAMESPACE
                    valueFrom:
                      fieldRef:
                        apiVersion: v1
                        fieldPath: metadata.namespace
                  - name: HOST
                    value: >-
                      https://control-plane-console-1-9-3-control-plane.apps.master-for-update-30.mdtu-ddm.projects.epam.com
                  - name: BASE_PATH
                  - name: EDP_ADMIN_CONSOLE_VERSION
                  - name: GERRIT_GLOBAL_LINK
                    value: >-
                      https://gerrit-control-plane-platform-main.apps.master-for-update-30.mdtu-ddm.projects.epam.com
                  - name: CLUSTER_REPO
                    value: cluster-mgmt
                  - name: GROUP_GIT_REPO
                    value: registry-group
                  - name: REGISTRY_REPO_HOST
                    value: >-
                      https://gerrit-control-plane-platform-main.apps.master-for-update-30.mdtu-ddm.projects.epam.com
                  - name: REGISTRY_REPO_PREFIX
                    value: registry-tenant-template-
                  - name: JENKINS_GLOBAL_LINK
                    value: >-
                      https://jenkins-control-plane-platform-main.apps.master-for-update-30.mdtu-ddm.projects.epam.com
                  - name: AUTH_ENABLED
                    value: 'true'
                  - name: INTEGRATION_STRATEGIES
                    value: 'Create,Import'
                  - name: BUILD_TOOLS
                    value: maven
                  - name: DEPLOYMENT_SCRIPT
                    value: 'helm-chart,openshift-template'
                  - name: PLATFORM_TYPE
                    value: openshift
                  - name: VERSIONING_TYPES
                    value: 'default,edp'
                  - name: CI_TOOLS
                    value: 'Jenkins,GitLab CI'
                  - name: PERF_DATA_SOURCES
                    value: 'Sonar,Jenkins,GitLab'
                  - name: EDP_NAME
                    value: control-plane
                  - name: OC_CLIENT_SECRET
                    valueFrom:
                      secretKeyRef:
                        name: oauth-admin-console-client
                        key: secret
                  - name: OC_CLIENT_ID
                    valueFrom:
                      secretKeyRef:
                        name: oauth-admin-console-client
                        key: clientId
                  - name: PROJECT_MASK_URL
                    value: '/console/project/{namespace}/overview'
                  - name: IMAGE_STREAM_MASK_URL
                    value: '/console/project/{namespace}/browse/images/{stream}'
                  - name: ENABLE_BRANCH_PROVISIONERS
                    value: '1'
                ports:
                  - containerPort: 8080
                    protocol: TCP
                imagePullPolicy: IfNotPresent
                terminationMessagePolicy: File
                image: >-
                  docker-registry.control-plane-nexus.svc:5004/control-plane/control-plane-console-master:1.9.0.41
            restartPolicy: Always
            terminationGracePeriodSeconds: 30
            dnsPolicy: ClusterFirst
            serviceAccountName: control-plane-console
            serviceAccount: control-plane-console
            securityContext: {}
            schedulerName: default-scheduler
    • 3.2. Відкрийте OKD > Networking > Services > Create Service.

      Service control-plane-console-1-9-3
      kind: Service
      apiVersion: v1
      metadata:
        name: control-plane-console-1-9-3
        namespace: control-plane
        labels:
          app: control-plane-console-1-9-3
          app.kubernetes.io/managed-by: Helm
        annotations:
          meta.helm.sh/release-name: control-plane-console
          meta.helm.sh/release-namespace: control-plane
      spec:
        ipFamilies:
          - IPv4
        ports:
          - protocol: TCP
            port: 8080
            targetPort: 8080
        internalTrafficPolicy: Cluster
        type: ClusterIP
        ipFamilyPolicy: SingleStack
        sessionAffinity: None
        selector:
          app: control-plane-console-1-9-3
    • 3.3. Відкрийте OKD > Networking > Routes > Create Route.

      Необхідно замінити DNS wildcard в полі host на відповідне середовищу.
      Route control-plane-console-1-9-3
      kind: Route
      apiVersion: route.openshift.io/v1
      metadata:
        name: control-plane-console-1-9-3
        namespace: control-plane
        labels:
          app: control-plane-console
          app.kubernetes.io/managed-by: Helm
        annotations:
          openshift.io/host.generated: 'true'
      spec:
        host: >-
          control-plane-console-1-9-3-control-plane.apps.master-for-update-30.mdtu-ddm.projects.epam.com
        to:
          kind: Service
          name: control-plane-console-1-9-3
          weight: 100
        port:
          targetPort: 8080
        tls:
          termination: edge
          insecureEdgeTerminationPolicy: Redirect
        wildcardPolicy: None
  4. Оновіть admin-console-client OAuthClient CustomResource

    • 4.1. Відкрийте OKD > Home > Search > Resources > OAuthClient > admin-console-client.

    • 4.2. Додайте до redirectURIs нові маршрути (routes).

      OAuthClient admin-console-client
      kind: OAuthClient
      apiVersion: oauth.openshift.io/v1
      metadata:
        name: admin-console-client
        uid: b44af87a-0971-4d67-9d9c-8b715a256047
        resourceVersion: '30903501'
        creationTimestamp: '2023-01-10T15:30:33Z'
        labels:
          app.kubernetes.io/managed-by: Helm
        annotations:
          meta.helm.sh/release-name: control-plane-console
          meta.helm.sh/release-namespace: control-plane
      secret: abc123***
      redirectURIs:
        - >-
          https://control-plane-console-control-plane-platform-main.apps.master-for-update-30.mdtu-ddm.projects.epam.com/auth/callback
        - >-
          https://control-plane-console-1-9-2-control-plane.apps.master-for-update-30.mdtu-ddm.projects.epam.com/auth/callback
         - >-
          https://control-plane-console-1-9-3-control-plane.apps.master-for-update-30.mdtu-ddm.projects.epam.com/auth/callback
        - 'http://localhost:8080/auth/callback'
      grantMethod: auto
image

3.3. Оновлення empty-template-registry-regulation для створення нових реєстрів, починаючи з версії 1.9.3

Існує проблема, коли розробник не може вносити зміни до "чистого" регламенту до того, як завантажить робочу версію цього регламенту. Щоб розв’язати цю проблему, потрібно:

  1. Після оновлення увійти до Openshift-консолі, відкрити проєкт control-plane > Networking > Routes > gerrit > empty-template-registry-regulation_
    та створити зміну у гілці build/1.5.0-SNAPSHOT.65 з редагуванням файлу data-model/main-liquibase.xml.

  2. Замінити посилання з nexus cicd2 на шлях до nexus на цільовому кластері, який знаходиться у проєкті control-plane-nexus.

4. Оновлення реєстру

4.1. Видалення пайплайн gerrit-configure-all-projects-repo-patched

Наступним кроком видаліть пайплайн gerrit-configure-all-projects-repo-patched в Openshift для всіх реєстрів, які будуть оновлюватися. Для цього:

Увійдіть до OKD > Workloads > Jobs та видаліть job gerrit-configure-all-projects-repo-patched для того, щоб вона створилася повторно в процесі оновлення.

image

4.2. Консоль, з якої необхідно оновлювати реєстри

  • Реєстри версій 1.9.2 і нижче оновлювати лише із консолі 1.9.2.

  • Редагування та створення реєстрів версії 1.9.2 та нижче відбувається лише з відповідної версії консолі 1.9.2.

  • Редагування та створення реєстрів версії 1.9.3 відбувається з відповідної версії консолі 1.9.3.

4.3. Оновлення реєстрів до нової версії 1.9.3.28

Перед оновленням уважно продивитися нижчезазначені кроки.

image

Детальніше про оновлення реєстру — див. на сторінці Оновлення компонентів реєстру.

Під час оновлення реєстру через control-plane-console створиться зміна у Gerrit.

Перед тим, як злити (git merge) цю зміну, у ній необхідно додати зміни до файлу values.yaml, а саме у полі global.crunchyPostgres додати нове значення — backups.

Вміст змін залежить від змінної deploymentMode (значення змінної можна побачити у тому ж файлі values.yaml при редагуванні)

Налаштування values.yaml мають виглядати так:
Приклад 1. Налаштування values.yaml із deploymentMode: development
global:
  crunchyPostgres:
    backups:
      pgbackrest:
        repos:
          schedules:
            full: "0 15 * * *"
Приклад 2. Налаштування values.yaml із deploymentMode: production
global:
  crunchyPostgres:
    backups:
      pgbackrest:
        repos:
          schedules:
            full: "0 1 * * *"

Змінене поле crunchyPostgres після редагування для реєстру зі значенням deploymentMode: development має виглядати так:

image

При отриманні помилки 403 при спробі редагування зміни, необхідно додати наступний код до ресурсу GerritProjectAccesses, який має назву реєстру:

   - action: ALLOW
     groupName: {назва_реєстру}
     permissionName: addPatchSet
     refPattern: refs/for/*

4.4. Дії після успішного оновлення всіх реєстрів на кластері до версії 1.9.3

Після успішного оновлення всіх реєстрів на кластері до версії 1.9.3, або під час прийняття рішення перемикнути користувачів на нову версію control-plane-console, необхідно:

  1. Змінити версію control-plane-console на нову 1.9.3 (Build 1.9.0.41) у control-plane-console DeploymentConfig.

  2. Видалити DeploymentConfig, Service та Route для версії 1.9.2 з відповідними назвами control-plane-console-1-9-3.

  3. Видалити DeploymentConfig, Service та Route для версії 1.9.3 з відповідними назвами control-plane-console-1-9-3.

5. Відомі проблеми

Помилка на UI адмін-панелі Control Plane при створенні запита на оновлення у секції Керування Платформою.

Розв’язання проблеми: оновіть сторінку.

6. Специфічні та нечасті помилки

  1. У разі зависання Jenkins Build Pipeline на чартах kong, або kong-admin-tools під час оновлення реєстру, перейдіть до OKD > User Management > Roles та видаліть наступні кластерні ролі:

    kong-cluster-role
    kong-admin-tools-cluster-role

    Pipeline створить нові ролі та перейде до етапу розгортання.

  2. У разі неуспішного завершення Jenkins Build Pipeline через оновлення чартів kong, або kong-admin-tools, виконайте кроки, описані у пункті 1, та перезапустіть Build Pipeline для успішного оновлення реєстру.