目录:
(1).istio1.8.3部署准备工作
1.准备kubernetes集群
2.下载istio1.8.3版本
(2).安装istio
2.1.istio1.8.3最小安装
2.2.istio1.8.3全组件安装
2.2.1.安装基础组件
2.2.2.安装grafana/jaeger/kiali/prometheus组件
2.2.3.安装zipkin组件
2.2.4.安装prometheus-operator组件:使用prometheus-operator收集istio metrics
3.配置ingress
(4).其他注意事项
4.1.jaeger的变化
4.2.jaeger与zipkin
(5).卸载istio1.8.3
(6).参考文章
前置阅读:
1.kubernetes-1:使用kubeadm搭建K8S单master节点集群
相关阅读:
2.istio-2:istio1.4.2-demo部署与体验,聊聊一些个人看法
3.istio-3:istio-1.4.2-demo链路体验之jaeger
(1).istio1.8.3部署准备工作
1.准备kubernetes集群
Istio 1.4 has been tested with Kubernetes releases 1.13, 1.14, 1.15.
请确保你的kubernetes集群的版本是1.13,1.14,1.15。
笔者提供一个1.13.3的kubernetes部署步骤:
kubernetes-1:使用kubeadm搭建K8S单master节点集群
2.下载istio1.8.3版本
进入istio的release页面选择最新版本:
https://github.com/istio/istio/releases
本文时间的最新版本是istio1.8.3,选择对应OS的版本,如Linux:
wget https://github.com/istio/istio/releases/download/1.8.3/istio-1.8.3-linux-amd64.tar.gz
解压到目录:/app/3rd/istio-1.8.3
配置环境变量,/etc/profile增加:
export PATH=$PATH:/app/3rd/istio-1.8.3/bin
source /etc/profile
(2).安装istio
2.1.istio1.8.3最小安装
安装最基本的组件:
istioctl install
默认使用的配置文件是istio-1.8.3/manifests/profiles/default.yaml,只有最基本的两个组件:istio-ingressgateway和istiod。安装过程:
(老版本istio中使用的是apply,现在已经废弃,不存在此命令了,用install替代)
istio-ingressgateway:对内网关。
其image是:docker.io/istio/proxyv2:1.8.3。
登入pod后可以看到是使用的envoy。另一个容器pilot-agent是控制面板的agent端,负责收集各种数据然后供面板展示。
istiod:
简化控制平面,将先前由 Pilot,Galley,Citadel 和 sidecar 注入器执行的功能统一为一个二进制文件。
其image是:docker.io/istio/pilot:1.8.0-alpha.2,可以看到都合并到了pilot概念中。
登入pod后可以看到容器pilot-discovery,用于发现所有的pilot-agent(所有istio标准下的pod)并进行数据收集。
但是最小安装并不是我们想要的,需要自定义安装其他组件:
当前istio版本支持的组件位于:
https://github.com/istio/istio/blob/1.8.3/operator/pkg/util/merge_iop.go
对比istio1.7.4可以发现有很大不同:
2.2.istio1.8.3全组件安装
关于这些组件的实际体验,请参见笔者另外两篇文章:
istio-2:istio1.4.2-demo部署与体验,聊聊一些个人看法
istio-3:istio-1.4.2-demo链路体验之jaeger
2.2.1.安装基础组件
istioctl install --set profile=demo
可以看到比istioctl install多安装一个对外网关组件:istio-egressgateway。
remove的两个pod是之前用istioctl install命令安装的,需要remove掉。
2.2.2.安装grafana/jaeger/kiali/prometheus组件
之前版本通过命令行参数安装这些组件的方式已经被废弃,需要自行手动执行:
配置文件位于:istioctl-1.8.3/samples/addons
kubectl apply -f istioctl-1.8.3/samples/addons
查看组件:kubectl get pods -n istio-system
2.2.3.安装zipkin组件
之前版本通过命令行参数安装这些组件的方式已经被废弃,需要自行手动执行:
配置文件位于:istioctl-1.8.3/samples/addons/extras/zipkin.yaml
kubectl apply -f istioctl-1.8.3/samples/addons/extras/zipkin.yaml
2.2.4.安装prometheus-operator组件:使用prometheus-operator收集istio metrics
需要先部署prometheus-operator:
https://github.com/prometheus-operator/prometheus-operator/releases
wget https://github.com/prometheus-operator/prometheus-operator/archive/v0.46.0.tar.gz
解压后在根目录执行:
kubectl apply -f bundle.yaml
可以看到在default命名空间下出现了一个prometheus-operator的pod:
再执行istio的prometheus-operator的关联配置文件:这样让prometheus-operator可以感知到istio:
kubectl apply -f istio-1.8.3/samples/addons/prometheus.yaml
3.配置ingress
先部署ingress-nginx,笔者提供一个配置实例:
https://github.com/hepyu/k8s-app-config/tree/master/yaml/min-cluster-allinone/ingress-nginx-min
直接执行sh deploy.sh:
我们需要配置如下所有组件的ingress,这样才可以在外部以浏览器的形式观察。
笔者提供一个isito-1.4.3全组件的ingress的部署配置文件:
https://github.com/hepyu/k8s-app-config/tree/master/yaml/min-cluster-allinone/istio/istio-1.8.3
执行后查看:
配置安全组开放ingress端口:
可以看到,80绑定的是本地30834,443绑定的是本地30760,安全组需要开这两个端口。
本地配置host:
grafana-istio-demo.inc-inc.com
jaeger-istio-demo.inc-inc.com
kiali-istio-demo.inc-inc.com
prometheus-istio-demo.inc-inc.com
zipkin-istio-demo.inc-inc.com
grafana:
http://grafana-istio-demo.inc-inc.com:30834/d/3--MLVZZk/istio-control-plane-dashboard?search=open&folder=current&orgId=1&refresh=5s
jaeger:
http://jaeger-istio-demo.inc-inc.com:30834/jaeger/search
kiali:
http://kiali-istio-demo.inc-inc.com:30834/kiali/console/istio
prometheus:
http://prometheus-istio-demo.inc-inc.com:30834/graph?g0.range_input=1h&g0.expr=&g0.tab=1
zipkin:
http://zipkin-istio-demo.inc-inc.com:30834/zipkin/dependency
(4).其他注意事项
4.1.jaeger的变化
在老版本的istio中,jaeger-collector和jaeger-ui是在不同的pod,现在都放在一个pod里了。
详细参见另一篇文章:istio-3:istio-1.4.2-demo链路体验之jaeger。
4.2.jaeger与zipkin
zipkin是广义上的tracing标准,jaeger同样支持zipkin api。
(5).卸载istio1.8.3
卸载会删除RBAC权限,istio-system命名空间及其下的所有资源。可以忽略不存在的资源的错误(因为它们可能已被分层删除)。
kubectl delete -f samples/addons
istioctl manifest generate --set profile=demo | kubectl delete --ignore-not-found=true -f -
默认情况下,不删除istio-system名称空间。如果不再需要,请使用以下命令将其删除:
kubectl delete namespace istio-system
默认情况下,Istio自动注入Envoy sidecar代理的标签不会被删除。如果不再需要,请使用以下命令将其删除。
kubectl label namespace default istio-injection-
如果存在Terminating状态的pod,使用强制删除pod方式,类似:
kubectl delete -n istio-system pod istiod-86f494f976-nvqjz --force --grace-period=0
注意也要清理下exit状态的docker容器,是有差异的:
查看下exit状态的容器,有两个与istio相关:
删除exit状态的docker容器:
docker rm `docker ps -a|grep Exited|awk '{print $1}'`
(6).参考文章
1.istio in kubernetes (二)
https://my.oschina.net/mikeowen/blog/4727940
2.Istio 学习笔记:Istio CNI 插件
https://www.servicemesher.com/blog/istio-cni-note/
3.Istio 庖丁解牛四:pilot discovery
https://www.servicemesher.com/blog/istio-analysis-4/