使用 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
使用 IstioOperator
的 overlays 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-istiocontrolplane
的 IstioOperator 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
如果你使用 operator
对 control 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 CR
和 revision
之前删除 operator
可能会导致剩余Istio资源。
要清除那些没有被 operator
删除的东西请执行下面的命令:
istioctl manifest generate | kubectl delete -f -
kubectl delete ns istio-system --grace-period=0 --force
网友评论