添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 任务
  • 网格可视化
  • 远程访问遥测插件
  • 示例
  • 运维
  • Ambient Mesh 架构
  • 发布
  • 参考
  • 术语表
  • 使用 Istio Operator 安装

    除了手动在生产环境中安装、升级、和卸载 Istio,您还可以用 Istio Operator 管理安装。 这样做还能缓解管理不同 Istio 版本的负担。 您只需简单的更新 Operator 自定义资源(CR) 即可, Operator 控制器将为您应用更改的相应配置。

    当您 使用 Istioctl 安装 Istio 时, 底层使用的是和 Operator 安装相同的 IstioOperator API 。 在这两种场景下,都会以架构验证配置,并执行同样的正确性检查。

    先决条件

    1. 执行必要的 平台安装

    2. 检查 服务和 Pod 的要求

    3. 安装 istioctl 可执行程序

    安装

    部署 Istio Operator

    istioctl 命令可用于自动部署 Istio 操作符:

    $ istioctl operator init
    

    此命令运行 Operator 在 istio-operator 命名空间中创建以下资源:

    • Operator 自定义资源定义(CRD)
    • Operator 控制器的 Deployment 对象
    • 一个用来访问 Operator 指标的服务
    • Istio Operator 运行必须的 RBAC 规则

    您可以配置 Operator 控制器安装的命名空间、Operator 观测的命名空间、Istio 的镜像源和版本、以及更多。 例如,可以使用参数 --watchedNamespaces 指定一个或多个命名空间来观测:

    $ istioctl operator init --watchedNamespaces=istio-namespace1,istio-namespace2
    

    更多详细信息,请参阅 istioctl operator init 命令参考

    使用 operator 安装 Istio

    要使用 Operator 安装 Istio demo 配置项(configuration profile) ,请运行以下命令:

    $ kubectl apply -f - <<EOF
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    metadata:
      namespace: istio-system
      name: example-istiocontrolplane
    spec:
      profile: demo
    

    控制器将检测 IstioOperator 资源,然后安装( demo )配置指定的 Istio 组件。

    默认情况下,Istio 控制平面(istiod)将安装在 istio-system 命名空间中。 要将其安装到其他命名空间,请如下使用 values.global.istioNamespace 字段:

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      profile: demo
      values:
        global:
          istioNamespace: istio-namespace1
    

    可以使用以下命令确认 Istio 控制平面服务是否成功:

    $ kubectl get services -n istio-system
    NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)   AGE
    istio-egressgateway    ClusterIP      10.96.65.145    <none>           ...       30s
    istio-ingressgateway   LoadBalancer   10.96.189.244   192.168.11.156   ...       30s
    istiod                 ClusterIP      10.96.189.20    <none>           ...       37s
    
    $ kubectl get pods -n istio-system
    NAME                                    READY   STATUS    RESTARTS   AGE
    istio-egressgateway-696cccb5-m8ndk      1/1     Running   0          68s
    istio-ingressgateway-86cb4b6795-9jlrk   1/1     Running   0          68s
    istiod-b47586647-sf6sw                  1/1     Running   0          74s
    

    更新

    现在,控制器已经运行起来,您可以通过编辑或替换 IstioOperator 资源来改变 Istio 配置。 控制器将检测到改变,继而用相应配置更新安装的 Istio。

    例如,使用以下命令将安装切换到 default 配置:

    $ kubectl apply -f - <<EOF
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    metadata:
      namespace: istio-system
      name: example-istiocontrolplane
    spec:
      profile: default
    

    您还可以启用或禁用组件、修改资源设置。 例如,启用 istio-egressgateway 组件并增加 pilot 的内存请求:

    $ kubectl apply -f - <<EOF
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    metadata:
      namespace: istio-system
      name: example-istiocontrolplane
    spec:
      profile: default
      components:
        pilot:
            resources:
              requests:
                memory: 3072Mi
        egressGateways:
        - name: istio-egressgateway
          enabled: true
    

    通过检查 Operator 控制器日志,您可以检测到控制器为了响应 IstioOperator CR 的更新,而在集群中所做的改变:

    $ kubectl logs -f -n istio-operator "$(kubectl get pods -n istio-operator -lname=istio-operator -o jsonpath='{.items[0].metadata.name}')"
    

    参阅 IstioOperator API 获取完整的配置设置。

    就地升级

    下载并提取希望升级到的 Istio 版本对应的 istioctl 。 在目标 Istio 版本的目录中,重新安装 Operator:

    $ <extracted-dir>/bin/istioctl operator init
    

    您会看到 istio-operator 的 Pod 已重新启动,其版本已更改到目标版本:

    $ kubectl get pods --namespace istio-operator \
      -o=jsonpath='{range .items[*]}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{"\n"}{end}'
    

    经过一两分钟后,Istio 控制平面组件也会重新启动为新版本:

    $ kubectl get pods --namespace istio-system \
      -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{"\n"}{end}'
    

    金丝雀升级

    金丝雀升级的过程类似于 istioctl 版本的金丝雀升级

    例如,要升级上一节中安装的 Istio 修订版本,首先验证集群中名为 example-istiocontrolplane IstioOperator CR 是否存在:

    例如要升级 Istio 1.19.0 到 1.20.2, 首先安装 1.19.0:

    $ curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.19.0 sh -
    

    使用 Istio 版本 1.19.0 部署 Operator:

    $ istio-1.19.0/bin/istioctl operator init
    

    安装 Istio 控制平面 demo 配置文件:

    $ kubectl apply -f - <<EOF
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    metadata:
      namespace: istio-system
      name: example-istiocontrolplane-1-19-0
    spec:
      profile: default
    

    确认您的集群中存在名为 example-istiocontrolplane IstioOperator CR:

    $ kubectl get iop --all-namespaces
    NAMESPACE      NAME                              REVISION   STATUS    AGE
    istio-system   example-istiocontrolplane1-19-0              HEALTHY   11m
    

    下载并提取希望升级到的 Istio 版本对应的 istioctl 。 然后,运行以下命令,基于集群内的 IstioOperator CR 的方式,安装 Istio 目标版本的控制平面 (这里,我们假设目标修订版本为 1.8.1):

    $ istio-1.20.2/bin/istioctl operator init --revision 1-20-2
    

    复制 example-istiocontrolplane CR 并将其另存为 example-istiocontrolplane-1-8-1.yaml 文件。 在 CR 中修改该文件的名称为 example-istiocontrolplane-1-8-1 ,并添加 revision: 1-8-1 。 更新后的 IstioOperator CR 如下所示:

    $ cat example-istiocontrolplane-1-20-2.yaml
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    metadata:
      namespace: istio-system
      name: example-istiocontrolplane-1-20-2
    spec:
      revision: 1-20-2
      profile: default
    

    运行该命令后,您将看到两组并排运行的控制平面 Deployment 和 Service:

    $ kubectl get pod -n istio-system -l app=istiod
    NAME                             READY   STATUS    RESTARTS   AGE
    istiod-1-20-2-597475f4f6-bgtcz   1/1     Running   0          64s
    istiod-6ffcc65b96-bxzv5          1/1     Running   0          2m11s
    
    $ kubectl get services -n istio-system -l app=istiod
    NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                         AGE
    istiod          ClusterIP   10.104.129.150   <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP,853/TCP   2m35s
    istiod-1-20-2   ClusterIP   10.111.17.49     <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP           88s
    

    要完成升级,请给工作负载的命名空间打这个标签: istio.io/rev=1-8-1 ,并重新启动工作负载, 就如 数据平面升级 文档的描述。

    卸载

    如果您使用 Operator 完成了控制平面的金丝雀升级,请运行以下命令卸载旧版本的控件平面,并保留新版本:

    $ kubectl delete istiooperators.install.istio.io -n istio-system example-istiocontrolplane
    

    等到 Istio 卸载完成 - 这可能需要一些时间。 然后删除 Istio Operator:

    $ istioctl operator remove --revision <revision>
    

    如果省略 revision 标志,则 Istio Operator 的所有修订版本都将被删除。

    注意:在 Istio 完全移除之前删除 Operator 可能会导致 Istio 资源残留。 需要清理 Operator 未删除的内容:

    $ istioctl uninstall -y --purge
    $ kubectl delete ns istio-system istio-operator
    
    这些信息有用吗?
    您是否有更多建议和改进意见?

    感谢您的反馈!