Istio с использованием стратегии RevisionBased

Содержание

Установка Istio с использованием стратегии RevisionBased

Вы можете установить управляющую плоскость Istio, Istio CNI и демонстрационное приложение Bookinfo, используя стратегию обновления RevisionBased.

NOTE

Вы можете использовать следующий раздел для понимания процесса обновления. Если в кластере уже развернут Istio, установку можно пропустить.

Процедура

  1. Создайте пространства имён istio-cni и istio-system, выполнив следующую команду:

    kubectl create ns istio-cni
    kubectl create ns istio-system
  2. Установите плагин Istio CNI нужной версии. В следующем примере конфигурации создаётся ресурс IstioCNI с именем default в пространстве имён istio-cni:

    apiVersion: sailoperator.io/v1
    kind: IstioCNI
    metadata:
      name: default
    spec:
      version: v1.24.6
      namespace: istio-cni
      values:
        cni:
          cniConfDir: /etc/cni/multus/net.d # /etc/cni/net.d в ACP 4.0
          excludeNamespaces:
            - istio-cni
            - kube-system
  3. Разверните управляющую плоскость Istio, используя стратегию обновления RevisionBased. В следующем примере конфигурации создаётся ресурс Istio с именем default в пространстве имён istio-system:

    Пример конфигурации

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      namespace: istio-system
      version: v1.24.6
      updateStrategy:
        type: RevisionBased
  4. Получите имя IstioRevision, выполнив следующую команду:

    kubectl get istiorevision -n istio-system

    Пример вывода

    NAME              NAMESPACE      PROFILE   READY   STATUS    IN USE   VERSION   AGE
    default-v1-24-6   istio-system             True    Healthy   False    v1.24.6   4m18s

    Имя IstioRevision имеет формат <istio_resource_name>-<version>.

  5. Настройте рабочие нагрузки приложения для выполнения в кластере. Например, вы можете развернуть пример приложения bookinfo в пространстве имён bookinfo.

    1. Создайте пространство имён bookinfo следующей командой:

      kubectl create ns bookinfo
    2. Примените метку к пространству имён bookinfo для активации автоматической инъекции sidecar. Используйте следующую команду:

      # пример <revision_name>: default-v1-24-6
      kubectl label namespace bookinfo istio.io/rev=<revision_name>
    3. Разверните поды приложения bookinfo в пространстве имён bookinfo, выполнив команду:

      kubectl -n bookinfo apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
  6. Проверьте ресурс Istio, выполнив следующую команду:

    kubectl get istio -n istio-system

    Пример вывода

    NAME      NAMESPACE      PROFILE   REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
    default   istio-system             1           1       1        default-v1-24-6   Healthy   v1.24.6   12m

    Поле IN USE показывает 1 после развертывания приложения.

  7. Убедитесь, что версия прокси совпадает с версией управляющей плоскости, выполнив следующую команду:

    istioctl proxy-status

    Столбец VERSION должен соответствовать версии управляющей плоскости.

    Пример вывода

    NAME                                        CLUSTER        CDS                LDS                EDS                RDS                ECDS        ISTIOD                                      VERSION
    details-v1-5c89dbb599-t2lg5.bookinfo        Kubernetes     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0
    productpage-v1-f8fdd5649-5hrtj.bookinfo     Kubernetes     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0
    ratings-v1-ccf8bc48c-gzk9k.bookinfo         Kubernetes     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0
    reviews-v1-85dc746bfc-tbjzc.bookinfo        Kubernetes     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0
    reviews-v2-5bd759b4c5-p68cx.bookinfo        Kubernetes     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0
    reviews-v3-55d5b84fb9-8lwqs.bookinfo        Kubernetes     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0

Обновление управляющей плоскости Istio с использованием стратегии RevisionBased

При обновлении Istio с использованием стратегии RevisionBased вы можете обновлять более чем на одну минорную версию за раз. Оператор Alauda Service Mesh v2 создаёт новый ресурс IstioRevision для каждого изменения поля .spec.version и разворачивает соответствующий экземпляр управляющей плоскости. Чтобы мигрировать рабочие нагрузки на новую управляющую плоскость, установите метку istio.io/rev в пространстве имён, чтобы она совпадала с именем ресурса IstioRevision, а затем перезапустите рабочие нагрузки.

Предварительные требования

  • Вы вошли в веб-консоль Alauda Container Platform с правами cluster-admin.
  • Вы установили оператор Alauda Service Mesh v2 и развернули Istio.
  • Вы установили плагин Alauda Container Platform Networking для Multus, а kube-ovn должен быть версии v4.1.5 или выше.
  • Вы установили istioctl на локальной машине.
  • Вы настроили управляющую плоскость Istio для использования стратегии обновления RevisionBased. В этом примере ресурс Istio с именем default развернут в пространстве имён istio-system.
  • Вы установили плагин Istio CNI нужной версии. В этом примере ресурс IstioCNI с именем default развернут в пространстве имён istio-cni.
  • Вы пометили пространство имён bookinfo для включения инъекции sidecar.
  • В кластере запущены рабочие нагрузки приложения. В этом примере приложение bookinfo развернуто в пространстве имён bookinfo.

Процедура

  1. Измените версию в ресурсе Istio. Например, чтобы обновиться до Istio 1.26.3, установите поле spec.version в v1.26.3, выполнив следующую команду:

    kubectl patch istio default --type='merge' -p '{"spec":{"version":"v1.26.3"}}'

    Обновление версии в CR Istio

    kind: Istio
    spec:
      version: v1.26.3
      updateStrategy:
        type: RevisionBased

    Оператор Service Mesh v2 развернёт новую версию управляющей плоскости рядом со старой. Sidecar останутся подключёнными к старой управляющей плоскости.

  2. Убедитесь, что ресурсы Istio и IstioRevision готовы с новой ревизией.

    1. Проверьте готовность ресурса Istio, выполнив команду:

      kubectl get istio

      Пример вывода

      NAME      NAMESPACE      PROFILE   REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
      default   istio-system             2           2       1        default-v1-26-3   Healthy   v1.26.3   14m
    2. Проверьте готовность ресурса IstioRevision, выполнив команду:

      kubectl get istiorevision

      Пример вывода

      NAME              NAMESPACE      PROFILE   READY   STATUS    IN USE   VERSION   AGE
      default-v1-24-6   istio-system             True    Healthy   True     v1.24.6   15m
      default-v1-26-3   istio-system             True    Healthy   False    v1.26.3   61s
  3. Убедитесь, что запущено два пода управляющей плоскости, по одному на каждую ревизию, выполнив команду:

    kubectl get pods -n istio-system

    Пример вывода

    NAME                                      READY   STATUS    RESTARTS   AGE
    istiod-default-v1-24-6-79c8fddcf7-4lgqh   1/1     Running   0          16m
    istiod-default-v1-26-3-79b66bfb5f-fhvk9   1/1     Running   0          81s
  4. Убедитесь, что sidecar рабочих нагрузок всё ещё подключены к предыдущей управляющей плоскости, выполнив команду:

    istioctl proxy-status

    Пример вывода

    NAME                                        CLUSTER        CDS                LDS                EDS                RDS                ECDS        ISTIOD                                      VERSION
    details-v1-5c89dbb599-t2lg5.bookinfo        Kubernetes     SYNCED (3m23s)     SYNCED (3m23s)     SYNCED (3m22s)     SYNCED (3m23s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0
    productpage-v1-f8fdd5649-5hrtj.bookinfo     Kubernetes     SYNCED (3m23s)     SYNCED (3m23s)     SYNCED (3m22s)     SYNCED (3m23s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0
    ratings-v1-ccf8bc48c-gzk9k.bookinfo         Kubernetes     SYNCED (3m23s)     SYNCED (3m23s)     SYNCED (3m22s)     SYNCED (3m23s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0
    reviews-v1-85dc746bfc-tbjzc.bookinfo        Kubernetes     SYNCED (3m23s)     SYNCED (3m23s)     SYNCED (3m22s)     SYNCED (3m23s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0
    reviews-v2-5bd759b4c5-p68cx.bookinfo        Kubernetes     SYNCED (3m23s)     SYNCED (3m23s)     SYNCED (3m22s)     SYNCED (3m23s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0
    reviews-v3-55d5b84fb9-8lwqs.bookinfo        Kubernetes     SYNCED (3m23s)     SYNCED (3m23s)     SYNCED (3m22s)     SYNCED (3m23s)     IGNORED     istiod-default-v1-24-6-79c8fddcf7-4lgqh     1.24.6-asm-r0

    Столбец VERSION должен соответствовать версии старой управляющей плоскости.

  5. Переместите рабочие нагрузки на новую управляющую плоскость, обновив метку istio.io/rev в пространстве имён приложения или в подах на имя новой ревизии. Например, обновите метку для всего пространства имён, выполнив команду:

    # пример <new_revision_name>: default-v1-26-3
    kubectl label namespace bookinfo istio.io/rev=<new_revision_name> --overwrite
  6. Перезапустите рабочие нагрузки приложения, чтобы была внедрена новая версия sidecar, выполнив команду:

    kubectl rollout restart deployment -n bookinfo

Проверка

  1. Проверьте, что запущена новая версия sidecar, выполнив команду:

    istioctl proxy-status

    Столбец VERSION должен соответствовать новой версии управляющей плоскости.

  2. Убедитесь, что старая управляющая плоскость, а также ресурсы Istio и IstioRevision были удалены.

    1. Проверьте, что старая управляющая плоскость удалена, выполнив соответствующую команду.
    2. Проверьте, что ресурс Istio удалён, выполнив команду:
      kubectl get istio
    3. Проверьте, что ресурс IstioRevision удалён, выполнив команду:
      kubectl get istiorevision

Оператор Alauda Service Mesh v2 удаляет старый ресурс IstioRevision и связанную управляющую плоскость после истечения периода ожидания, определённого в поле spec.updateStrategy.inactiveRevisionDeletionGracePeriodSeconds. Значение периода ожидания по умолчанию — 30 секунд.

Вы можете увеличить период ожидания, чтобы выделить достаточно времени для тестирования новой управляющей плоскости перед удалением предыдущей ревизии. Установите большее значение при канареечных обновлениях, чтобы обеспечить стабильность рабочих нагрузок перед полным переходом.