Sail Operator 1.0.0 发布:使用 Operator 管理 Istio

深入了解 Sail Operator 的基础知识,并查看示例,了解使用它来管理 Istio 是多么容易。

Apr 3, 2025 | 作者 Francisco Herrera - Red Hat; Translated by Wilson Wu - DaoCloud

Sail Operator 是 Red Hat 发起的一个社区项目,旨在为 Istio 构建一个现代 operator于 2024 年 8 月首次发布, 我们很高兴地宣布 Sail Operator 现已正式发布,其明确的使命是:简化和精简集群中的 Istio 管理。

简化部署和管理

Sail Operator 旨在降低安装和运行 Istio 的复杂性。 它可以自动执行手动任务,确保从初始安装到集群中 Istio 版本的持续维护和升级, 都能获得一致、可靠且简单的体验。Sail Operator API 是围绕 Istio 的 Helm Chart API 构建的, 这意味着所有 Istio 配置都可以通过 Sail Operator CRD 的值获得。

我们鼓励用户阅读我们的文档以了解有关这种管理 Istio 环境的新方法的更多信息。

Sail Operator 的主要资源包括:

主要功能和支持

为什么是现在?

随着云原生架构的不断发展,我们认为为 Istio 提供强大且用户友好的 Operator 比以往任何时候都更加重要。 Sail Operator 为开发人员和运营团队提供了一致、安全且高效的解决方案, 让那些习惯使用 Operator 的人感觉很熟悉。它的 GA 版本标志着一个成熟的解决方案,可以支持最苛刻的生产环境。

尝试一下

您想尝试 Sail Operator 吗?此示例将向您展示如何使用基于修订的升级策略安全地更新 Istio 控制平面。 这意味着您将同时运行两个 Istio 控制平面,让您轻松迁移工作负载,最大限度地降低流量中断的风险。

先决条件:

使用 Helm 安装 Sail Operator

$ helm repo add sail-operator https://istio-ecosystem.github.io/sail-operator
$ helm repo update
$ kubectl create namespace sail-operator
$ helm install sail-operator sail-operator/sail-operator --version 1.0.0 -n sail-operator

该 Operator 现已安装在您的集群中:

NAME: sail-operator
LAST DEPLOYED: Tue Mar 18 12:00:46 2025
NAMESPACE: sail-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None

检查 Operator Pod 是否正在运行:

$ kubectl get pods -n sail-operator
NAME                             READY   STATUS    RESTARTS   AGE
sail-operator-56bf994f49-j67ft   1/1     Running   0          87s

创建 IstioIstioRevisionTag 资源

创建一个版本为 v1.24.2IstioRevisionTagIstio 资源:

$ kubectl create ns istio-system
$ cat <<EOF | kubectl apply -f-
apiVersion: sailoperator.io/v1
kind: Istio
metadata:
  name: default
spec:
  namespace: istio-system
  updateStrategy:
    type: RevisionBased
    inactiveRevisionDeletionGracePeriodSeconds: 30
  version: v1.24.2
---
apiVersion: sailoperator.io/v1
kind: IstioRevisionTag
metadata:
  name: default
spec:
  targetRef:
    kind: Istio
    name: default
EOF

请注意,IstioRevisionTag 具有对名称为 defaultIstio 资源的目标引用

检查创建的资源的状态:

请注意,IstioRevisionTag 状态为 NotReferencedByAnything。 这是因为当前没有资源使用修订版本 default-v1-24-2

部署示例应用程序

创建命名空间并标记以启用 Istio 注入:

$ kubectl create namespace sample
$ kubectl label namespace sample istio-injection=enabled

标记命名空间后,您将看到 IstioRevisionTag 资源状态将更改为 ‘In Use: True’, 因为现在有一个资源使用修订版 default-v1-24-2

$ kubectl get istiorevisiontag
NAME      STATUS    IN USE   REVISION          AGE
default   Healthy   True     default-v1-24-2   6m24s

部署示例应用程序:

$ kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/sleep/sleep.yaml -n sample

确认示例应用的代理版本与控制平面版本匹配:

$ istioctl proxy-status
NAME                              CLUSTER        CDS              LDS              EDS              RDS              ECDS        ISTIOD                                    VERSION
sleep-5fcd8fd6c8-q4c9x.sample     Kubernetes     SYNCED (78s)     SYNCED (78s)     SYNCED (78s)     SYNCED (78s)     IGNORED     istiod-default-v1-24-2-bd8458c4-jl8zm     1.24.2

将 Istio 控制平面升级到版本 1.24.3

使用新版本更新 Istio 资源:

$ kubectl patch istio default -n istio-system --type='merge' -p '{"spec":{"version":"v1.24.3"}}'

检查 Istio 资源。您将看到有两个修订版本,并且它们都已 ‘ready’:

$ kubectl get istio
NAME      REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
default   2           2       2        default-v1-24-3   Healthy   v1.24.3   10m

IstioRevisiontag 现在引用了新的修订版本:

$ kubectl get istiorevisiontag
NAME      STATUS    IN USE   REVISION          AGE
default   Healthy   True     default-v1-24-3   11m

有两个 IstioRevisions,每个 Istio 版本一个:

$ kubectl get istiorevision
NAME              TYPE   READY   STATUS    IN USE   VERSION   AGE
default-v1-24-2          True    Healthy   True     v1.24.2   11m
default-v1-24-3          True    Healthy   True     v1.24.3   92s

Sail Operator 会自动检测给定的 Istio 控制平面是否正在使用, 并将此信息写入您在上面看到的“正在使用”状态条件中。目前, 所有 IstioRevisions 和我们的 IstioRevisionTag 都被视为“正在使用”:

确认有两个控制平面 Pod 正在运行,每个修订版本一个:

$ kubectl get pods -n istio-system
NAME                                      READY   STATUS    RESTARTS   AGE
istiod-default-v1-24-2-bd8458c4-jl8zm     1/1     Running   0          16m
istiod-default-v1-24-3-68df97dfbb-v7ndm   1/1     Running   0          6m32s

确认代理 Sidecar 版本保持不变:

$ istioctl proxy-status
NAME                              CLUSTER        CDS                LDS                EDS                RDS                ECDS        ISTIOD                                    VERSION
sleep-5fcd8fd6c8-q4c9x.sample     Kubernetes     SYNCED (6m40s)     SYNCED (6m40s)     SYNCED (6m40s)     SYNCED (6m40s)     IGNORED     istiod-default-v1-24-2-bd8458c4-jl8zm     1.24.2

重启示例 Pod:

$ kubectl rollout restart deployment -n sample

确认代理 Sidecar 版本已更新:

$ istioctl proxy-status
NAME                              CLUSTER        CDS              LDS              EDS              RDS              ECDS        ISTIOD                                      VERSION
sleep-6f87fcf556-k9nh9.sample     Kubernetes     SYNCED (29s)     SYNCED (29s)     SYNCED (29s)     SYNCED (29s)     IGNORED     istiod-default-v1-24-3-68df97dfbb-v7ndm     1.24.3

IstioRevision 不再使用且不是 Istio 资源的活动修订版本时(例如,当它不是 spec.version 字段中设置的版本时), Sail Operator 将在宽限期(默认为 30 秒)后将其删除。确认删除旧的控制平面和 IstioRevision

**恭喜!**您已成功使用基于修订的升级策略更新了您的 Istio 控制平面。

结论

Sail Operator 可自动执行手动任务,确保从初始安装到集群中 Istio 的持续维护和升级, 获得一致、可靠且简单的体验。Sail Operator 是一个 istio-ecosystem 项目, 我们鼓励您试用并提供反馈以帮助我们改进它,您可以查看我们的贡献指南了解有关如何为项目做出贡献的更多信息。

Share this post