• Русский
  • Istio со стратегией RevisionBased

    Установка Istio со стратегией RevisionBased

    Вы можете установить control plane 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:

      cat <<EOF | kubectl apply -f -
      apiVersion: sailoperator.io/v1
      kind: IstioCNI
      metadata:
        name: default
      spec:
        version: v1.26.3
        namespace: istio-cni
        values:
          cni:
            cniConfDir: /etc/cni/multus/net.d # /etc/cni/net.d in ACP 4.0
            excludeNamespaces:
              - istio-cni
              - kube-system
      EOF
    3. Разверните control plane Istio, используя стратегию обновления RevisionBased. Следующий пример конфигурации создает ресурс Istio с именем default в пространстве имен istio-system:

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

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

      kubectl get istiorevision -n istio-system

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

      NAME              NAMESPACE      PROFILE   READY   STATUS    IN USE   VERSION   AGE
      default-v1-26-3   istio-system             True    Healthy   False    v1.26.3   4m18s

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

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

      a. Создайте пространство имен bookinfo, выполнив команду ниже:

      kubectl create ns bookinfo

      b. Примените метку к пространству имен bookinfo, чтобы включить автоматическую инъекцию sidecar. Используйте следующую команду:

      # <revision_name> example: default-v1-26-3
      kubectl label namespace bookinfo istio.io/rev=<revision_name>

      c. Разверните pod'ы приложения bookinfo в пространстве имен bookinfo, выполнив эту команду:

      kubectl -n bookinfo apply -f https://raw.githubusercontent.com/alauda-mesh/istio/refs/heads/istio-1.28/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-26-3   Healthy   v1.26.3   12m

      Поле IN USE будет иметь значение 1 после развертывания приложения.

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

      # <revision_name> example: default-v1-26-3
      istioctl proxy-status --revision <revision_name>

      Столбец VERSION должен совпадать с версией control plane.

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

      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-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0
      productpage-v1-f8fdd5649-5hrtj.bookinfo     Kubernetes     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     IGNORED     istiod-default-v1-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0
      ratings-v1-ccf8bc48c-gzk9k.bookinfo         Kubernetes     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     IGNORED     istiod-default-v1-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0
      reviews-v1-85dc746bfc-tbjzc.bookinfo        Kubernetes     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     IGNORED     istiod-default-v1-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0
      reviews-v2-5bd759b4c5-p68cx.bookinfo        Kubernetes     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     IGNORED     istiod-default-v1-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0
      reviews-v3-55d5b84fb9-8lwqs.bookinfo        Kubernetes     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     SYNCED (1m25s)     IGNORED     istiod-default-v1-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0

    Обновление control plane Istio со стратегией RevisionBased

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

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

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

    Процедура

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

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

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

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

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

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

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

      kubectl get istio

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

      NAME      NAMESPACE      PROFILE   REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
      default   istio-system             2           2       1        default-v1-28-6   Healthy   v1.28.6   14m

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

      kubectl get istiorevision

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

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

      kubectl get pods -n istio-system

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

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

      # <revision_name> example: default-v1-26-3
      istioctl proxy-status --revision <revision_name>

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

      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-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0
      productpage-v1-f8fdd5649-5hrtj.bookinfo     Kubernetes     SYNCED (3m23s)     SYNCED (3m23s)     SYNCED (3m22s)     SYNCED (3m23s)     IGNORED     istiod-default-v1-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0
      ratings-v1-ccf8bc48c-gzk9k.bookinfo         Kubernetes     SYNCED (3m23s)     SYNCED (3m23s)     SYNCED (3m22s)     SYNCED (3m23s)     IGNORED     istiod-default-v1-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0
      reviews-v1-85dc746bfc-tbjzc.bookinfo        Kubernetes     SYNCED (3m23s)     SYNCED (3m23s)     SYNCED (3m22s)     SYNCED (3m23s)     IGNORED     istiod-default-v1-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0
      reviews-v2-5bd759b4c5-p68cx.bookinfo        Kubernetes     SYNCED (3m23s)     SYNCED (3m23s)     SYNCED (3m22s)     SYNCED (3m23s)     IGNORED     istiod-default-v1-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0
      reviews-v3-55d5b84fb9-8lwqs.bookinfo        Kubernetes     SYNCED (3m23s)     SYNCED (3m23s)     SYNCED (3m22s)     SYNCED (3m23s)     IGNORED     istiod-default-v1-26-3-79c8fddcf7-4lgqh     1.26.3-asm-r0

      Столбец VERSION должен совпадать со старой версией control plane.

    5. Обновите плагин Istio CNI до той же версии, что и новая ревизия control plane. Ресурс IstioCNI обновляется независимо от ресурса Istio, а обновленный плагин CNI продолжает перенаправлять трафик для обеих ревизий control plane во время миграции. Подробные шаги см. в разделе The Istio CNI update process.

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

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

      kubectl rollout restart deployment -n bookinfo

    Проверка

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

      # <new_revision_name> example: default-v1-28-6
      istioctl proxy-status --revision <new_revision_name>

      Столбец VERSION должен совпадать с новой версией control plane.

    2. Убедитесь, что старый control plane, ресурсы Istio и IstioRevision удалены.

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

      kubectl get pods -n istio-system

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

      kubectl get istio

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

      kubectl get istiorevision

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

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

    Удаление ресурсов обновления RevisionBased из среды разработки

    После завершения проверки и экспериментов следует удалить конфигурацию обновления RevisionBased, чтобы очистить среду разработки и освободить ресурсы.

    Процедура

    Выполните следующие команды, чтобы удалить все компоненты Istio и примеры приложений:

    kubectl delete istio/default istiocni/default
    kubectl delete ns/bookinfo
    kubectl delete ns/istio-system ns/istio-cni