内容简介:「技术直达」系列 道客船长「技术直达」系列,关注国内外云原生领域的技术和前沿趋势,为开发者和企业提供最新的理论和实践干货。近期我们将视角放到业界炙手可热的北京时间 2018 年 8 月 1 日凌晨 0 点,
「技术直达」系列 道客船长「技术直达」系列,关注国内外云原生领域的技术和前沿趋势,为开发者和企业提供最新的理论和实践干货。近期我们将视角放到业界炙手可热的 微服务管理工具 Istio 之上 ,将持续更新系列干货文章。
北京时间 2018 年 8 月 1 日凌晨 0 点, Istio 宣布推出 1.0 正式版本 ,并表示已可用于生产环境。这距离最初的 0.1 版本发布已过去一年多的时间。Istio 是一个由谷歌、IBM 与 Lyft 共同开发的开源项目,旨在提供一种统一化的微服务连接、安全保障、管理与监控方式。
Istio 项目能够为微服务架构提供流量管理机制,同时亦为其它增值功能(包括安全性、监控、路由、连接管理与策略等)创造了基础。这款软件利用久经考验的 Lyft Envoy 代理进行构建,可在无需对应用程序代码作出任何发动的前提下实现可视性与控制能力。Istio 项目是一款强大的工具,可帮助 CTO/CIO 们立足企业内部实施整体性安全、政策与合规性要求。
Istio 至今已经开发了一年多的时间。直至今天,Istio 才推出了 1.0 版本,这是一个重要的里程碑,意味着所有的核心功能现在都可以用于生产环境。与两个月前发布的 0.8 版本相比,1.0 版本只新增了一些新功能,大部分工作主要还是用于修复错误和提升性能,将许多现有的功能标记为 Beta 状态 —— 表明可用于生产环境。
这个项目的组件相对比较复杂,原有的一些选项是靠 ConfigMap 以及 istioctl 分别调整的,现在通过重新设计的 Helm Chart
,安装选项用 values.yml
或者 helm 命令行的方式来进行集中管理了。
在安装 Istio 之前要确保 Kubernetes 集群(仅支持 v1.9
及以后版本)已部署并配置好本地的 kubectl 客户端。
1. 下载 Istio
$ wget https://github.com/istio/istio/releases/download/1.0.0/istio-1.0.0-linux.tar.gz $ tar zxf istio-1.0.0-linux.tar.gz $ cp istio-1.0.0/bin/istioctl /usr/local/bin/
2. 使用 Helm 部署 Istio 服务
克隆 Istio 仓库:
$ git clone https://github.com/istio/istio.git $ cd istio
安装包内的 Helm 目录中包含了 Istio 的 Chart,官方提供了两种方法:
istio.yaml Tiller
很明显,两种方法并没有什么本质区别,这里我们采用第一种方法来部署。
$ helm template install/kubernetes/helm/istio --name istio --namespace istio-system --set sidecarInjectorWebhook.enabled=true --set ingress.service.type=NodePort --set gateways.istio-ingressgateway.type=NodePort --set gateways.istio-egressgateway.type=NodePort --set tracing.enabled=true --set servicegraph.enabled=true --set prometheus.enabled=true --set tracing.jaeger.enabled=true --set grafana.enabled=true > istio.yaml $ kubectl create namespace istio-system $ kubectl create -f istio.yaml
这里说的是使用 install/kubernetes/helm/istio
目录中的 Chart 进行渲染,生成的内容保存到 ./istio.yaml
文件之中。将 sidecarInjectorWebhook.enabled
设置为 true,从而使自动注入属性生效。
部署完成后,可以检查 isotio-system
namespace 中的服务是否正常运行:
$ kubectl -n istio-system get pods -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' istio-citadel-f5779fbbb-brbxd istio-cleanup-secrets-jjqg5 istio-egressgateway-6c5cc7dd86-l2c82 istio-galley-6bf8f6f4b7-twvzl istio-ingressgateway-fbfdfc5c7-fg9xh istio-pilot-85df58955d-g5bfh istio-policy-74c48c8ccb-wd6h6 istio-sidecar-injector-cf5999cf8-h9smx istio-statsd-prom-bridge-55965ff9c8-2hmzf istio-telemetry-cb49594cc-gfd84 istio-tracing-77f9f94b98-9xvzs prometheus-7456f56c96-xcdh4 servicegraph-5b8d7b4d5-lzhth
- 过去的 istio-ca 现已更名
istio-citadel
。 -
istio-cleanup-secrets
是一个 job,用于清理过去的 Istio 遗留下来的 CA 部署(包括 sa、deploy 以及 svc 三个对象)。 -
egressgateway
、ingress
以及ingressgateway
,可以看出边缘部分的变动很大,以后会另行发文。
3. Prometheus、Grafana、Servicegraph 和 Jaeger
等所有 Pod 启动后,可以通过 NodePort、Ingress 或者 kubectl proxy 来访问这些服务。比如可以通过 Ingress
来访问服务。
首先为 Prometheus、Grafana、Servicegraph 和 Jaeger 服务创建 Ingress:
$ cat ingress.yaml --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: prometheus namespace: istio-system spec: rules: - host: prometheus.istio.io http: paths: - path: / backend: serviceName: prometheus servicePort: 9090 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: grafana namespace: istio-system spec: rules: - host: grafana.istio.io http: paths: - path: / backend: serviceName: grafana servicePort: 3000 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: servicegraph namespace: istio-system spec: rules: - host: servicegraph.istio.io http: paths: - path: / backend: serviceName: servicegraph servicePort: 8088 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tracing namespace: istio-system spec: rules: - host: tracing.istio.io http: paths: - path: / backend: serviceName: tracing servicePort: 80
$ kubectl create -f ingress.yaml
然后在你的本地电脑上添加四条 hosts
:
$Ingree_host prometheus.istio.io $Ingree_host grafana.istio.io $Ingree_host servicegraph.istio.io $Ingree_host tracing.istio.io
将 $Ingree_host
替换为 Ingress Controller 运行节点的 IP。
通过 http://grafana.istio.io
访问 Grafana 服务:
通过 http://servicegraph.istio.io
访问 ServiceGraph 服务,展示服务之间调用关系图。
-
http://servicegraph.istio.io/force/forcegraph.html
: As explored above, this is an interactive D3.js visualization.
-
http://servicegraph.istio.io/dotviz
: is a static Graphviz visualization.
-
http://servicegraph.istio.io/dotgraph
: provides a [DOT]( https://www.wikiwand.com/en/DOT_(graph_description_language ) serialization. -
http://servicegraph.istio.io/d3graph
: provides a JSON serialization for D3 visualization. -
http://servicegraph.istio.io/graph
: provides a generic JSON serialization.
通过 http://tracing.istio.io/
访问 Jaeger 跟踪页面:
通过 http://prometheus.istio.io/
访问 Prometheus 页面:
Note:
如果你已经部署了 Prometheus-operator
,可以不必部署 Grafana,直接将 addons/grafana/dashboards
目录下的 Dashboard 模板复制出来放到 Prometheus-operator 的 Grafana 上,然后添加 istio-system 命名空间中的 Prometheus 数据源就可以监控 Istio 了。
4. Mesh Expansion
Istio 还支持管理非 Kubernetes 管理的应用。此时,需要在应用所在的 VM 或者物理中部署 Istio,具体步骤请参考 Mesh Expansion
部署好后,就可以向 Istio 注册应用,如:
# istioctl register servicename machine-ip portname:port $ istioctl -n onprem register mysql 1.2.3.4 3306 $ istioctl -n onprem register svc1 1.2.3.4 http:7000
5. 参考
以上所述就是小编给大家介绍的《直达 Istio 1.0 | 使用 Helm 部署 Istio 服务》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- linux 部署golang 项目(直接部署和基于nginx部署)
- 部署策略对比:蓝绿部署、金丝雀发布及其他
- 使用Docker容器化部署实践之Django应用部署(一)
- 【前端打包部署】谈一谈我在SPA项目打包=>部署的处理
- 「实战篇」开源项目docker化运维部署-后端java部署(七)
- Kubernetes 中的渐进式交付:蓝绿部署和金丝雀部署
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员面试金典(第5版)
[美] Gayle Laakmann McDowell / 李琳骁、漆 犇 / 人民邮电出版社 / 2013-11 / 59.00
本书是原谷歌资深面试官的经验之作,层层紧扣程序员面试的每一个环节,全面而详尽地介绍了程序员应当如何应对面试,才能在面试中脱颖而出。第1~7 章主要涉及面试流程解析、面试官的幕后决策及可能提出的问题、面试前的准备工作、对面试结果的处理等内容;第8~9 章从数据结构、概念与算法、知识类问题和附加面试题4 个方面,为读者呈现了出自微软、苹果、谷歌等多家知名公司的150 道编程面试题,并针对每一道面试题目......一起来看看 《程序员面试金典(第5版)》 这本书的介绍吧!