Istio - 安装及注意事项
文章目录
1. 故事背景
前面说到,最近在拆分项目,把单体项目,往微服务架构方向迁移。因为我们的语言是JAVA,所以第一选择是Spring Cloud。可是在实践的过程中,和k8s整合不大融洽(Eureka缓存了服务地址,导致k8s在滚动更新应用时,会出现服务停止的现象。这点让我十分不爽),于是在找解决方案的时候,发现了Istio
。
简单了解后,这就是我想要的东东啊!😎
2. 提前准备
- 本次试验是在
CentOS 7.4 64位
系统,root
用户下进行 - Kubernetes(k8s)集群
- istio版本
1.0.2
3. 个人理解
Istio的定义,能干啥,官网说的很清楚,居然有中文文档👏,这点真的让我很惊喜。
🤔为什么这就是我想要东东?
- 解决我上面的问题
- 可以直接抛弃Spring Cloud这个大包袱,只需要SpringBoot足以
- 把微服务里较偏向运维侧的工作
服务治理
解耦了出来,业务研发可以几乎不再关心这部分的内容,这点实在太好了!就好像之前的前后端分离
一样,较好的划清了工作边界,让专业的人做专业的事!这点真的非常振奋人心!👏
4. 安装
官网说的挺清楚,我这里用helm
进行安装
下载
curl -L https://git.io/getLatestIstio | sh -
安装
这里针对自建K8S集群的安装,如果公有云(阿里云),一般有一键安装,也支持个性化配置。
# 指定gateway为NodePort,因为测试环境没有LoadBalancer
# 同时安装tracing相关组件(其实就是jaeger),建议在这里一起安装,不要独立安装jaeger
cd {your-istio-directory-path}
helm install install/kubernetes/helm/istio --name istio --namespace istio-system \
--set gateways.istio-ingressgateway.type=NodePort \
--set tracing.enabled=true
如果你想定制Istio,请查看个性化配置列表传送门
删除
helm delete --purge istio
cd {your-istio-directory-path}
# 这步相当重要,在我这个版本存在,其他版本不知道
# 如果不执行我下面这句命令,在我这个版本重新安装会有问题
# 应该是删除时,清理不干净
kubectl delete -f install/kubernetes/helm/istio/templates/crds.yaml -n istio-system
5. 注意事项
Istio 对 Pod 和服务的要求
实践后,我总结如下:
- 一定要对
service
进行命名(否则在jaeger
无法显示,其他问题未知),如下命名为http-foo
:
kind: Service
apiVersion: v1
metadata:
name: foo
namespace: bar
spec:
selector:
app: bar-foo-production
ports:
- name: http-foo
protocol: TCP
port: 80
targetPort: 8080
- 一个pod最好只关联一个service
- 目前Pod的标签只带了
app
,没带上version
。暂未发现什么问题,因为我的版本会体现在镜像上,所以暂时未使用。
文章作者 xifan
上次更新 2018-12-01