Обновление#

Изменения в параметрах настройки#

Настройки не изменились.

Подготовка#

После получения архива с образами и бинарными файлами необходимо распаковать его и переложить образы в свой локальный репозиторий образов.

Для загрузки образов в локальный репозиторий требуется утилита skopeo. Skopeo позволяет сохранить sha256 оригинальных образов.

  1. Установите skopeo:

    sudo dnf install -y skopeo
    
  2. Распакуйте полученный архив, в нем содержится две директории binaries (она содержит oc и dropappplus-install) и images, а также инструкцию по обновлению с актуальным sha256 релизного образа и инструкцию по установке:

    drwxr-xr-x 2 binaries
    -rw-r--r-- 1 cluster_upgrade_instructions.pdf
    drwxr-xr-x 2 images
    
  3. С помощью skopeo синхронизируйте каталог с локальным репозиторием (в примере здесь и ниже это registry.example.aa.ааа без аутентификации):

    skopeo sync --preserve-digests --src dir --dest docker ./4.8.57-dropappplus-2.0.3-x86_64/images registry.example.aa.bbb # для версии dplus-release
    

Примечание

Репозиторий должен быть доверенным. Если нет, то сгенерируйте сертификат и добавьте его на nodes кластера

Обновление кластера#

Примечание

На node администратора кластера установлена и настроена утилита oc, подробнее см. «Руководство по системному администрированию» раздел «Сценарии эксплуатации кластера DropApp Plus с помощью oc»

Шаги обновления#

Mirroring с помощью ImageContentSourcePolicy#

  1. Создайте манифест ImageContentSourcePolicy, в котором декларируется mirror registry, прописанный в image-reference файле в cluster-version-operator образе, создайте файл:

    dplus-icsp-mvp.yaml
    apiVersion: operator.openshift.io/v1alpha1
    kind: ImageContentSourcePolicy
    metadata:
    name: dropapp-plus-repo-mvp
    spec:
    repositoryDigestMirrors:
    - mirrors:
      - registry.example.aa.bbb/dplus-v-1 # <---- релизный артефакт в локальном registry, куда выгрузили образы с помощью skopeo
        source: <path>/dplus/2.0.3/dplus-v-1 # <----- релизный артефакт в registry, прописанный в поставляемом cluster-version-operator образе
    - mirrors:
      - registry.example.aa.bbb/dplus-v-2 # <---- релизный артефакт в локальном registry, куда выгрузили образы с помощью skopeo
        source: <path>/dplus/2.0.3/dplus-v-2 # <----- релизный артефакт в registry, прописанный в поставляемом cluster-version-operator образе
    
  2. Примените манифест:

    oc apply -f dplus-icsp-icsp.yaml
    
  3. После применения манифеста все machine-config-pool должны применить новый mirror на все nodes, в выводе oc get mcp убедиться, что nodes начали обновляться, не выполняя перезагрузку:

    NAME     CONFIG                  UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master   rendered-master-<хеш>   False      True      False      3              3                   3                     0                      26d
    worker   rendered-worker-<хеш>   False      True      False      2              2                   2                     0                      26d
    
  4. После того, как nodes обновились (Updating стало False, а Updated стало True), зайдите на любую node и убедитесь, что mirror создался:

    [core@master1 ~]$ cat /etc/containers/registries.conf
    unqualified-search-registries = ["registry.access.redhat.com", "docker.io"]
    
    [[registry]]
    prefix = ""
    location = "<path>/2.0.3/dplus-v-1"
    mirror-by-digest-only = true
    
    [[registry.mirror]]
    location = "registry.example.aa.bbb/dplus-v-1"
    
    [[registry]]
    prefix = ""
    location = "<path>/2.0.3/dplus-v-2"
    mirror-by-digest-only = true
    
    [[registry.mirror]]
    location = "registry.example.aa.bbb/dplus-v-2"
    
  5. Если mirror не создался, то необходимо создать его через MachineConfig:

    • Создайте файл dzomirror.conf (здесь пример для dplus-v-1):

      [[registry]]
      prefix = ""
      location = "<path>/dplus/2.0.3/dplus-v-1"
      mirror-by-digest-only = true
      
      [[registry.mirror]]
      location = "registry.example.aa.bbb/dplus-v-1"
      
      [[registry]]
      prefix = ""
      location = "<path>/dplus/2.0.3/dplus-v-2"
      mirror-by-digest-only = true
      
      [[registry.mirror]]
      location = "registry.example.aa.bbb/dplus-v-2"
      
    • Сделайте base64 encode этого файла:

      cat dzomirror.conf | base64 -w 0
      
    • Создайте манифест mirror-dplus-registries.conf (в поле source после текста data:text/plain;charset=utf-8;base64 идет base64 строка полученная выше):

      mirror-dplus-registries.conf
      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfig
      metadata:
        labels:
        machineconfiguration.openshift.io/role: master
        name: 99-master-registry-config
      spec:
        config:
          ignition:
              version: 3.2.0
          storage:
            files:
            - contents:
                source: data:text/plain;charset=utf-8;base64,W1tyZWdpc3RyeV1dCiAgcHJlZml4ID0gIiIKICBsb2NhdGlvbiA9ICJkem8uc3cuc2JjLnNwYWNlL3NidF9kZXYvY2k5MDAwMDU2MF9kYXBwX2Rldi9kcGx1cy8xLjAuMC9kcGx1cy1tdnAiCiAgbWlycm9yLWJ5LWRpZ2VzdC1vbmx5ID0gdHJ1ZQoKICBbW3JlZ2lzdHJ5Lm1pcnJvcl1dCiAgICBsb2NhdGlvbiA9ICJyZWdpc3RyeS5kcGx1cy51bi5zYnQvZHBsdXMtbXZwIgoKW1tyZWdpc3RyeV1dCiAgcHJlZml4ID0gIiIKICBsb2NhdGlvbiA9ICJkem8uc3cuc2JjLnNwYWNlL3NidF9kZXYvY2k5MDAwMDU2MF9kYXBwX2Rldi9kcGx1cy8xLjAuMC9kcGx1cy1tdnAtMiIKICBtaXJyb3ItYnktZGlnZXN0LW9ubHkgPSB0cnVlCgogIFtbcmVnaXN0cnkubWlycm9yXV0KICAgIGxvY2F0aW9uID0gInJlZ2lzdHJ5LmRwbHVzLnVuLnNidC9kcGx1cy1tdnAtMiIK
              filesystem: root
              mode: 0644
              path: /etc/containers/registries.conf.d/99-dplus-registries.conf
      ---
      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfig
      metadata:
        labels:
            machineconfiguration.openshift.io/role: worker
        name: 99-worker-registry-config
      spec:
        config:
          ignition:
            version: 3.2.0
          storage:
            files:
            - contents:
                source: data:text/plain;charset=utf-8;base64,W1tyZWdpc3RyeV1dCiAgcHJlZml4ID0gIiIKICBsb2NhdGlvbiA9ICJkem8uc3cuc2JjLnNwYWNlL3NidF9kZXYvY2k5MDAwMDU2MF9kYXBwX2Rldi9kcGx1cy8xLjAuMC9kcGx1cy1tdnAiCiAgbWlycm9yLWJ5LWRpZ2VzdC1vbmx5ID0gdHJ1ZQoKICBbW3JlZ2lzdHJ5Lm1pcnJvcl1dCiAgICBsb2NhdGlvbiA9ICJyZWdpc3RyeS5kcGx1cy51bi5zYnQvZHBsdXMtbXZwIgoKW1tyZWdpc3RyeV1dCiAgcHJlZml4ID0gIiIKICBsb2NhdGlvbiA9ICJkem8uc3cuc2JjLnNwYWNlL3NidF9kZXYvY2k5MDAwMDU2MF9kYXBwX2Rldi9kcGx1cy8xLjAuMC9kcGx1cy1tdnAtMiIKICBtaXJyb3ItYnktZGlnZXN0LW9ubHkgPSB0cnVlCgogIFtbcmVnaXN0cnkubWlycm9yXV0KICAgIGxvY2F0aW9uID0gInJlZ2lzdHJ5LmRwbHVzLnVuLnNidC9kcGx1cy1tdnAtMiIK
              filesystem: root
              mode: 0644
              path: /etc/containers/registries.conf.d/99-dplus-registries.conf
      
    • Примените манифест:

      oc apply -f mirror-dplus-registries.conf
      

Важно

MachineConfig объекты нужно сделать для всех ролей (master, worker и т.п.).

После применения MachineConfig nodes перезапускаются.

Запуск обновления кластера#

Важно

Перед обновлением кластера, убедитесь что все кластерные операторы доступны, выполните oc get co

Если какой-то из операторов выключен (столбец Available содержит статус False), то Cluster Version Operator заблокирует обновление, когда дойдет до выключенного оператора.

Например: если отключен оператор operator-lifecycle-manager, то это приведет к тому, что во время обновления кластера возникнет ошибка несовместимости установленных из каталога операторов (например, Jaeger или Red Hat Service Mesh) с обновляемой версией и обновление заблокируется.

Обновите кластер, передав релизный образ, например:

oc adm upgrade --force --allow-explicit-upgrade --allow-upgrade-with-warnings --to-image=registry.example.aa.bbb/<Релизный образ>

В конце процедуры кластер обновит все операторы и компоненты, которыми они управляют.

Также на nodes кластера применится ostree слой Platform V OS Core до новой версии.

Проверка обновления#

Результаты выполнения сценария обновления DropApp Plus:

  • Обновлен программный компонент K8SP;

  • Настроены хосты;

  • Развернут кластер DropApp Plus.

Обновление кластера OpenShift до DropApp Plus#

Шаги обновления#

  1. Предварительно исправьте clusterversion, добавив релиз DropApp Plus в канал обновлений stable-4.8. Для этого создайте граф обновления и скопируйте его в каталог dapp веб-сервера, доступного с nodes обновляемого кластера:

    dplus-upgrade.json
    {
      "edges": [
        [
          0,
          1
        ]
      ],
      "nodes": [
        {
          "version": "4.8.57",
          "payload": "quay.io/openshift-release-dev/ocp-release@sha256:<хеш образа>",
          "metadata": {
            "io.openshift.upgrades.graph.release.channels": "eus-4.10,candidate-4.8,eus-4.8,fast-4.8,stable-4.8,candidate-4.9,fast-4.9,stable-4.9",
            "io.openshift.upgrades.graph.release.manifestref": "sha256:<хеш образа>",
            "url": "https://access.redhat.com/errata/RHSA-2023:0237"
          }
        },
        {
          "payload": "<parth>/dapp/2.0.0/dapp-release@sha256:<хеш образа>",
          "version": "4.8.57-dropappplus-2.0.0",
          "metadata": {
            "io.openshift.upgrades.graph.release.channels": "fast-4.8,stable-4.8"
          }
        }
      ]
    }
    

    Где структура файла:

    • "nodes" – массив узлов графа, содержит версии Openshift Container Platform/DropApp Plus;

    • "edges" – массив граней, включает вложенные массивы, которые содержат информацию о допустимости смены версий. Версия OSP 4.8.57 в примере графа это корневой nod (индекс 0 в массиве nodes), может обновиться до версий dplus-mvp (индекс 1), dplus-mvp-2 (индекс 2) и dplus-release (индекс 3).

  2. Примените патч:

    oc patch clusterversion/version --patch '{"spec":{"upstream":"http://<path>/dappp/dplus-graph.json"}}' --type=merge
    

    В этом примере http://<path>/dappp это веб-сервер, доступный с nodes кластера.

  3. Убедитесь, что web console в канале stable-4.8 отражает версии DropApp Plus:

    web-console

    Примечание

    Обновление через web console недоступно, поскольку образы не подписаны Red Hat. Добавление версий в канал stable-4.8 нужно для того, чтобы избежать потенциальных сопутствующих эффектов при обновлении на версию, которой изначально в канале нет.

  4. После выполнения шагов 1-3, настройте Mirroring на локальный registry и обновите кластер в соответствии с разделом «Обновление кластера» настоящего документа.

Проверка обновления#

Результаты выполнения сценария обновления OpenShift:

  • Обновлен кластер OpenShift до DropApp Plus;

  • Настроены хосты;

  • Развернут кластер DropApp Plus.