搬瓦工 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 网关功能,可以搭配 KongAPISIX 使用。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。