《云计算与虚拟化技术丛书 Service Mesh实战》—3.2.4部署Linkerd
3.2.4 部署Linkerd
通常来说,开发人员除了开发本身业务逻辑外,还需要实现如下一个或者多个特性以确保应用的高可用性。
可见性(visiblity):运行时指标、分布式跟踪。
可管理性(manageablity):服务发现、运行时动态路由。
健壮性(resilience):超时重试、请求最后期限、熔断机制。
安全性(security):服务间访问控制、TLS加密通信。
像我们在第1章所述,如果从应用层完全实现这些特性,需要考虑多方面需求,如支持多协议、多语言等,所以这并不容易,而Service Mesh工具如Linkerd使得无需从应用层逐一实现这些特性,应用层只需关注业务逻辑,所有这些特性由Service Mesh工具实现,从应用层剥离出来以独立单元运行。针对提供的示例应用,我们可以在它们之间增加Service Mesh层,即Linkerd,然后服务间通信由Linkerd实现,以此在无需更改服务代码的情况下实现上述特性。增加Service Mesh层后示例应用间的调用逻辑如图3-3所示,除了服务与数据库之间的通信,其他服务间通信均通过Linkerd实现。
图3-3 基于Linkerd的服务间通信流
后续章节将围绕Linkerd配置及相应架构设计等内容讲解,以此通过Linkerd实现服务间通信。然后我们需要在演示环境中每台机器上部署Linkerd,它将服务所有运行在机器上的所有服务。首先,准备运行Linkerd需要的配置文件linkerd.yml,实际上,示例环境中每台虚拟机的/vagrant目录已包括预先配置好的配置文件linkerd.yml,通过该配置文件即可以Docker容器方式启动Linkerd,当前只要保证Linkerd正常启动即可,对linkerd.yml的具体内容,后续会详细解释相应配置的具体含义,此时大家无需关注其具体含义。
Linkerd配置信息如:
admin:
port: 9990
ip: 0.0.0.0
namers:
- kind: io.l5d.consul
prefix: /io.l5d.consul
host: 127.0.0.1
port: 8500
includeTag: false
setHost: false
useHealthCheck: true
routers:
- protocol: http
label: outgoing
dtab: |
/consul => /#/io.l5d.consul/dc1;
/host => /consul;
/svc => /$/io.buoyant.http.subdomainOfPfx/service.consul/host;
interpreter:
kind: default
transformers:
- kind: io.l5d.port
port: 4141
httpAccessLog: /tmp/access_outgoing.log
servers:
- port: 4140
ip: 0.0.0.0
- protocol: http
label: incoming
dtab: |
/consul => /#/io.l5d.consul/dc1;
/host => /consul;
/svc => /$/io.buoyant.http.subdomainOfPfx/service.consul/host;
interpreter:
kind: default
transformers:
- kind: io.l5d.localhost
servers:
- port: 4141
ip: 0.0.0.0
telemetry:
- kind: io.l5d.recentRequests
sampleRate: 0.01
usage:
enabled: false
然后在每台机器上执行如下命令启动Linkerd进程:
# docker run -d --name Linkerd --network host -v /vagrant/linkerd.yml:/linkerd.yml buoyantio/linkerd:1.3.6 /linkerd.yml
为了简单起见,Linkerd容器以host网络模式运行。启动完成后执行Linkerd健康检测确保Linkerd正常启动:
# curl -s localhost:9990/admin/ping
pong
若返回pong表示Linkerd已正常启动。
- 点赞
- 收藏
- 关注作者
评论(0)