美文网首页
Istio安装&卸载&升级

Istio安装&卸载&升级

作者: 坚持到底v2 | 来源:发表于2021-01-05 10:38 被阅读0次

    使用 istioctl 安装

    # 使用default profile安装Istio
    istioctl install
    istioctl install --set profile=default
    
    # 个性化配置
    istioctl install --set meshConfig.accessLogFile=/dev/stdout
    # 使用文件
    cat > my-config.yaml <<EOF
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      meshConfig:
        accessLogFile: /dev/stdout
    EOF
    istioctl install -f my-config.yaml
    
    # 使用不同的profile
    istioctl install --set profile=demo
    

    列出可用的profile

    istioctl profile list
    

    打印profile的配置内容
    通过 dump profile的配置内容,可以查看某些组件的默认值

    istioctl profile dump demo  
    # 通过 `dump` profile的配置内容,可以查看某些组件的默认值
    # 例如
    istioctl profile dump --config-path components.ingressGateways
    istioctl profile dump --config-path values.gateways.istio-ingressgateway
    
    
    
    # 显示不同的profile的差异
    istioctl profile diff default demo
    

    检查都安装了什么

    istioctl命令会将用于安装Istio的IstioOperator CR保存在名为 installed-state 的CR的副本中。 无需检查Istio安装的部署,pod,服务和其他资源,而使用如下的命令:

    kubectl -n istio-system get IstioOperator installed-state -o yaml > installed-state.yaml
    

    installed-state CR 也用于执行一些istioctl命令中的检查, 因此不应删除它

    使用 IstioOperator API自定义安装

    # 个性化配置
    istioctl install --set meshConfig.accessLogFile=/dev/stdout
    # 使用文件
    cat > my-config.yaml <<EOF
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      meshConfig:
        accessLogFile: /dev/stdout
    EOF
    istioctl install -f my-config.yaml
    
    • 组件API:
      组件有 base 、 pilot 、 ingressGateways 、 egressGateways 、 cni 、 istiodRemote
      示例 --set components.pilot.enabled=false
      文件示例
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        pilot:
          enabled: false
    
    

    所有的组件都使用 k8s 来自定义,示例

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        pilot:
          k8s:
            resources:
              requests:
                cpu: 1000m # override from default 500m
                memory: 4096Mi # ... default 2048Mi
            hpaSpec:
              maxReplicas: 10 # ... default 5
              minReplicas: 2  # ... default 1
            nodeSelector:
              master: "true"
            tolerations:
            - key: dedicated
              operator: Exists
              effect: NoSchedule
            - key: CriticalAddonsOnly
              operator: Exists
    
    

    IstioOperator API 还包含了可以透传到 Helm API参数的方式,如下示例

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      values:
        pilot:
          traceSampling: 0.1 # override from 1.0
        global:
          monitoringPort: 15050
    
    

    一些参数暂时共存于Helm和IstioOperator API中,包括 Kubernetes resources、namespaces和enablement 设置。
    Istio社区建议使用 IstioOperator API

    对输出的manifest进行Patch

    使用 IstioOperatoroverlays API,
    patch文件 传递给 istioctl manifest generate -f patch.yaml 会将 patch文件 中的内容应用到输出的manifest内容。
    patch文件 的内容示例:

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      profile: empty
      hub: docker.io/istio
      tag: 1.1.6
      components:
        pilot:
          enabled: true
          namespace: istio-control
          k8s:
            overlays:
              - kind: Deployment
                name: istiod
                patches:
                  # Select list item by value
                  - path: spec.template.spec.containers.[name:discovery].args.[30m]
                    value: "60m" # overridden from 30m
                  # Select list item by key:value
                  - path: spec.template.spec.containers.[name:discovery].ports.[containerPort:8080].containerPort
                    value: 1234
                  # Override with object (note | on value: first line)
                  - path: spec.template.spec.containers.[name:discovery].env.[name:POD_NAMESPACE].valueFrom
                    value: |
                      fieldRef:
                        apiVersion: v2
                        fieldPath: metadata.myPath
                  # Deletion of list item
                  - path: spec.template.spec.containers.[name:discovery].env.[name:REVISION]
                  # Deletion of map item
                  - path: spec.template.spec.containers.[name:discovery].securityContext
              - kind: Service
                name: istiod
                patches:
                  - path: spec.ports.[name:https-dns].port
                    value: 11111 # OVERRIDDEN
    

    注意 patch内容 是按给定的顺序进行的。每个patch都是基于上次patch之后的内容进行的。在patch中不存在的路径会在输出的manifest中创建。

    卸载Istio

    # 使用 --purge 进行完全卸载,包含集群范围的资源,这些资源有可能是和其他Istio控制面共享的
    istioctl x uninstall --purge
    
    # 只卸载某个特定的Istio控制面
    istioctl x uninstall <your original installation options>
    # 或 
    istioctl manifest generate <your original installation options> | kubectl delete -f -
    
    

    控制面namespace(例如 istio-system)不会被删除,如果不需要请手动删除


    使用 IstioOperator 安装

    需要先部署 Istio operator :

    istioctl operator init
    

    该命令会在 istio-operator namespace 中创建如下的资源:

    • operator CRD
    • operator controller deployment
    • 用于访问 operator metrics 的 service
    • 必要的 Istio operator RBAC rules

    该命令有详细的参数可以让你配置将 operator controller 安装在哪个namespace、以及operator监视哪些namespaces、以及安装的Istio的镜像源和版本等等。

    接下来就是创建 istio-system namespace
    以及 apply IstioOperator CRD 资源
    示例

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

    IstioOperator 资源被apply后,operator controller 会(在90秒内)检测到,并(在120秒内完成)安装Istio组件。

    更新
    现在你可以通过编辑或替换 IstioOperator资源 来更改Istio的配置, operator controller 会检测到更改并更新Istio的安装。

    你可以查阅 operator controller 的日志来观察它执行的内容

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

    In-place Upgrade
    下载新版本的 istioctl
    然后使用新版本的 istioctl 重新安装 operator

    <extracted-dir>/bin/istioctl operator init
    

    你应该看到 istio-operator pod已经被重启,并且它使用的镜像的版本已经更改为新的版本

    Canary Upgrade(金丝雀升级)
    例如,要升级上一节中安装的Istio的revision(修订版),首先验证集群中存在名称为 example-istiocontrolplaneIstioOperator CR :

    kubectl get iop --all-namespaces
    

    然后下载新版本的 istioctl
    然后,运行以下命令以基于群集中的 IstioOperator CR 安装新的 Istio control plane 的 revision(修订版) :

    <extracted-dir>/bin/istioctl operator init --revision 1-8-1
    

    example-istiocontrolplane CR的内容拷贝到文件 example-istiocontrolplane-1-8-1.yaml 并修改文件内容,添加 revision: 1-8-1 。最终的文件内容如下:

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

    将该文件apply。然后你会看到两个 control place deployments and services 同时运行:

    $ kubectl get pod -n istio-system -l app=istiod
    NAME                            READY   STATUS    RESTARTS   AGE
    istiod-1-8-1-597475f4f6-bgtcz   1/1     Running   0          64s
    istiod-6ffcc65b96-bxzv5         1/1     Running   0          2m11s
    
    $ kubectl get svc -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-8-1   ClusterIP   10.111.17.49     <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP           88s
    
    

    要完成升级,请使用 istio.io/rev=1-8-1 标记工作负载名称空间,然后重新启动工作负载,如数据平面升级文档中所述。

    卸载Istio
    如果你使用 operatorcontrol plane 进行了 canary upgrade(金丝雀升级) , 你可以删除就的 control plane 并保留新的 control plane , 即删除就的 IstioOperator CR :

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

    等待直到卸载完成--这可能需要一些时间
    然后移除 operator

    istioctl operator remove --revision <revision>
    

    如果你省略了 revision 标志,则所有的revision都会被移除

    注意,如果在完全删除 IstioOperator CRrevision 之前删除 operator 可能会导致剩余Istio资源。
    要清除那些没有被 operator 删除的东西请执行下面的命令:

    istioctl manifest generate | kubectl delete -f -
    kubectl delete ns istio-system --grace-period=0 --force
    
    

    相关文章

      网友评论

          本文标题:Istio安装&卸载&升级

          本文链接:https://www.haomeiwen.com/subject/ahyioktx.html