搬瓦工 VPS 部署 Linkerd 轻量服务网格搭建教程
Linkerd 是 CNCF 毕业的轻量级服务网格项目,专注于简洁性和低资源消耗。与 Istio 相比,Linkerd 使用 Rust 编写的微代理(linkerd2-proxy)替代 Envoy,内存占用更小、延迟更低,非常适合在搬瓦工 VPS 等资源有限的环境中运行。Linkerd 开箱即用地提供 mTLS 加密、自动重试、负载均衡和可观测性功能。本教程将介绍完整的 Linkerd 部署流程。
一、Linkerd 架构简介
- 控制平面:运行在 linkerd 命名空间中,包括 destination(服务发现)、identity(证书管理)和 proxy-injector(自动注入)。
- 数据平面:由 linkerd2-proxy 微代理组成,以 Sidecar 形式注入到每个 Pod 中,用 Rust 编写,内存占用仅约 20MB。
- Linkerd Viz:可选的可视化扩展,提供 Dashboard、Prometheus 和 Grafana 集成。
二、系统要求
- 操作系统:Ubuntu 22.04 LTS
- 内存:至少 2GB,推荐 4GB
- CPU:至少 2 核
- Kubernetes:K3s 或其他 K8s 集群 1.24+
三、准备 K3s 环境
# 安装 K3s
curl -sfL https://get.k3s.io | sh -
# 配置 kubectl
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
echo 'export KUBECONFIG=/etc/rancher/k3s/k3s.yaml' >> ~/.bashrc
# 验证集群
kubectl get nodes
四、安装 Linkerd
4.1 安装 Linkerd CLI
curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install | sh
export PATH=$HOME/.linkerd2/bin:$PATH
echo 'export PATH=$HOME/.linkerd2/bin:$PATH' >> ~/.bashrc
# 验证 CLI 版本
linkerd version --client
4.2 集群环境检查
linkerd check --pre
此命令会检查集群是否满足 Linkerd 的所有要求,确保所有检查项通过后再继续安装。
4.3 安装 CRD 和控制平面
# 安装 Linkerd CRD
linkerd install --crds | kubectl apply -f -
# 安装 Linkerd 控制平面
linkerd install | kubectl apply -f -
# 等待安装完成
linkerd check
4.4 安装 Viz 扩展
# Viz 包含 Dashboard、Prometheus 和 Grafana
linkerd viz install | kubectl apply -f -
# 验证 Viz 安装
linkerd viz check
五、注入 Sidecar 代理
5.1 自动注入(命名空间级别)
# 为命名空间添加注入注解
kubectl annotate namespace default linkerd.io/inject=enabled
5.2 手动注入已有部署
# 对已存在的 Deployment 注入 Sidecar
kubectl get deploy -o yaml | linkerd inject - | kubectl apply -f -
5.3 部署测试应用
# 部署 emojivoto 示例应用
curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/emojivoto.yml | kubectl apply -f -
# 注入 Linkerd Sidecar
kubectl get -n emojivoto deploy -o yaml | linkerd inject - | kubectl apply -f -
# 检查注入状态
linkerd -n emojivoto check --proxy
六、Dashboard 和监控
6.1 访问 Dashboard
# 开启 Dashboard 端口转发
linkerd viz dashboard &
# 或手动端口转发
kubectl -n linkerd-viz port-forward svc/web 8084:8084 --address 0.0.0.0 &
通过 SSH 隧道访问 Dashboard,可以查看服务间的实时流量、成功率、延迟分布等指标。
6.2 命令行查看指标
# 查看命名空间级别统计
linkerd viz stat deploy -n emojivoto
# 查看实时流量
linkerd viz top deploy/web -n emojivoto
# 查看路由级别指标
linkerd viz routes deploy/web -n emojivoto
七、流量管理
7.1 ServiceProfile 配置
cat <<EOF | kubectl apply -f -
apiVersion: linkerd.io/v1alpha2
kind: ServiceProfile
metadata:
name: web.emojivoto.svc.cluster.local
namespace: emojivoto
spec:
routes:
- name: "GET /"
condition:
method: GET
pathRegex: "/"
isRetryable: true
- name: "POST /api/vote"
condition:
method: POST
pathRegex: "/api/vote"
timeout: 5s
EOF
7.2 流量分割(金丝雀发布)
cat <<EOF | kubectl apply -f -
apiVersion: split.smi-spec.io/v1alpha2
kind: TrafficSplit
metadata:
name: web-split
namespace: emojivoto
spec:
service: web-svc
backends:
- service: web-svc
weight: 900
- service: web-svc-canary
weight: 100
EOF
八、安全:自动 mTLS
Linkerd 在安装时自动为所有注入 Sidecar 的服务启用 mTLS 加密,无需额外配置。验证 mTLS 状态:
# 查看 mTLS 连接状态
linkerd viz edges deploy -n emojivoto
# 检查代理证书
linkerd viz tap deploy/web -n emojivoto --to deploy/emoji -n emojivoto | head -5
九、多集群支持
Linkerd 支持跨集群的服务发现和通信。安装多集群扩展:
# 安装多集群扩展
linkerd multicluster install | kubectl apply -f -
# 验证
linkerd multicluster check
十、常见问题
linkerd check 失败
# 重新运行检查并查看详细信息
linkerd check --output json
# 查看控制平面日志
kubectl logs -n linkerd deploy/linkerd-destination -c destination
Sidecar 注入不生效
确认命名空间注解已添加,并且 Pod 在注解添加之后重新创建:
kubectl get ns default -o yaml | grep linkerd
kubectl rollout restart deploy -n default
总结
Linkerd 以轻量、简洁和低资源占用著称,是在搬瓦工 VPS 上部署服务网格的优秀选择。相比 Istio 的全面功能,Linkerd 更适合资源有限但需要 mTLS 和可观测性的场景。如果需要 API 网关功能,可以搭配 Kong 或 APISIX 使用。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net。