美文网首页
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