作者:Alejandro Pedraza
今天,我们很高兴地宣布 Linkerd 新的自动故障转移特性。这个特性,使 Linkerd 能够自动将所有通信,从一个失败或不可访问的服务,重定向到该服务的一个或多个副本,包括其他集群上的副本。而且,正如你所期望的那样,任何重定向流量,都维护着 Linkerd 对应用程序的安全性、可靠性和透明性的所有保证,甚至跨越了由开放互联网分隔的集群边界。
故障转移策略作为一个 Kubernetes 操作器(operator)实现,可以添加到现有的 Linkerd 部署中,可以应用到单个集群,但对于多集群部署特别有用。Linkerd 已经提供了强大的跨集群通信功能[1],适用于任何集群拓扑结构,包括多云和混合云;对应用程序是完全透明的;zero-trust 兼容;并且没有向系统引入任何单点故障(SPOF,single points of failure)。对于这个特性集,新的故障转移操作器(failover operator)现在增加了自动化,允许 Kubernetes 用户配置故障条件,在某种情况下 Linkerd 将自动在一个或多个服务之间转换流量。
采用真正的 Linkerd 方式,这个新功能引入了最少的新机制,而不是构建在现有的 Kubernetes 和服务网格原语(如健康探针和服务网格接口[2]TrafficSplit)之上。这家新操作器完善了 Linkerd 现有的可靠性特性,为超高可靠性部署提供了一个完整的解决方案,包括:
该操作器作为一个独立的项目,但需要搭配最新的Linkerd edge 发布版本[6]。该操作器也将支持预计将在未来几周内发布的 2.11.2 版本。
想现在就试试吗?前往linkerd-failover 仓库[7],并按照那里的说明进行安装,或通过 Helm 安装:
# Add the linkerd-edge Helm repo if you haven't already
helm repo add linkerd-edge https://helm.linkerd.io/edge
# And the linkerd-smi extension
helm repo add linkerd-smi https://linkerd.github.io/linkerd-smi
helm repo up
# Install linkerd-smi and linkerd-failover
helm install linkerd-smi -n linkerd-smi --create-namespace linkerd-smi/linkerd-smi
helm install linkerd-failover -n linkerd-failover --create-namespace --devel linkerd-edge/linkerd-failover
然后,通过将 failover.linkerd.io/control-by:linkerd-failover 标签应用于现有的 TrafficSplit 来配置服务故障转移。例如:
apiVersion: split.smi-spec.io/v1alpha2
kind: TrafficSplit
metadata:
name: sample-svc
annotations:
failover.linkerd.io/primary-service: sample-svc
labels:
failover.linkerd.io/controlled-by: linkerd-failover
spec:
service: sample-svc
backends:
- service: sample-svc
weight: 1
- service: sample-svc-remote
weight: 0
在本例中,在总体健康检查失败的情况下,到 sample-svc 服务的流量将自动从本地集群转移到副本。就是这么简单!
我们希望你能对 Linkerd 这个令人兴奋的新功能给予反馈。初始的操作器实现涵盖了基本内容,但后面还会有更多内容。请查看我们的初始路线图[8](很快会转移到linkerd2 仓库[9]),并向我们提供你的特性请求、错误报告和任何其他反馈!
Linkerd 是CNCF[10]的一个毕业项目[11]。Linkerd 致力于开放治理。如果你有功能要求,问题,或评论,我们希望你加入我们快速增长的社区!Linkerd 托管在GitHub[12]上,我们在Slack[13]、Twitter[14]和邮件列表[15]上有一个蓬勃发展的社区。快来加入我们吧!
[1]跨集群通信功能: https://linkerd.io/2/features/multicluster/
[2]服务网格接口: https://smi-spec.io/
[3]重试: https://linkerd.io/2/features/retries-and-timeouts/
[4]请求平衡: https://linkerd.io/2/features/load-balancing/
[5]金丝雀部署处理: https://linkerd.io/2.11/features/traffic-split/
[6]Linkerd edge 发布版本: https://linkerd.io/edge/
[7]linkerd-failover 仓库: https://github.com/linkerd/linkerd-failover
[8]初始路线图: https://github.com/linkerd/linkerd-failover/issues
[9]linkerd2 仓库: https://github.com/linkerd/linkerd2
[10]CNCF: https://cncf.io/
[11]毕业项目: https://linkerd.io/2021/07/28/announcing-cncf-graduation/
[12]GitHub: https://github.com/linkerd/
[13]Slack: https://slack.linkerd.io/
[14]Twitter: https://twitter.com/linkerd
[15]邮件列表: https://linkerd.io/2/get-involved/