• Русский
  • 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.26.3
        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.26.3
        updateStrategy:
          type: RevisionBased
    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> пример: default-v1-26-3
      kubectl label namespace bookinfo istio.io/rev=<revision_name>

      c. Разверните поды приложения 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-26-3   Healthy   v1.26.3   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-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

    Обновление управляющей плоскости 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.28.3, установите поле spec.version в v1.28.3, выполнив команду:

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

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

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

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

    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-3   Healthy   v1.28.3   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-3   istio-system             True    Healthy   False    v1.28.3   61s
    3. Убедитесь, что запущено два пода управляющей плоскости, по одному для каждой ревизии, выполнив команду:

      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-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-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 должен совпадать со старой версией управляющей плоскости.

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

      # <new_revision_name> пример: default-v1-28-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 удалены.

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

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

      kubectl get istio

      c. Проверьте, что ресурс IstioRevision удалён, выполнив команду:

      kubectl get istiorevision

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

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