Linkerd CLI 部署 Linkerd2 服务网格说明

参考:
https://linkerd.io/2.10/getting-started/
https://github.com/linkerd/linkerd2/releases/
https://linkerd.io/2.10/features/ha/
https://linkerd.io/2.10/reference/cli/install/

Linkerd简介

Linkerd是Kubernetes的一款超轻量、安全优先的服务网格。Linkerd为您的Kubernetes堆栈添加了关键的安全性、可观察性和可靠性特性,而不需要更改代码。

Linkerd是一个云原生计算基金会(CNCF)项目。

0.验证K8s集群设置

kubectl version --short

1.安装CLI

要手动安装 CLI,请运行:

curl -sL https://run.linkerd.io/install | sh
linkerd version

您也可以通过以下方式直接下载 CLI:

wget -c https://github.com/linkerd/linkerd2/releases/download/stable-2.6.0/linkerd2-cli-stable-2.6.0-linux
chmod +x linkerd2-cli-stable-2.6.0-linux
cp linkerd2-cli-stable-2.6.0-linux /usr/local/bin/linkerd
linkerd version

2.检查您的集群是否准备好安装 Linkerd

linkerd check --pre

3.将 Linkerd 控制平面安装到K8s集群

获取默认的高可用部署清单:

linkerd install --ha --controller-replicas=3 > linkerd-ha.yaml

在kube-system名称空间禁用代理注入器:

kubectl label namespace kube-system config.linkerd.io/admission-webhooks=disabled

修改部署清单:

vim linkerd-ha.yaml

官方镜像:

gcr.io/linkerd-io/proxy:stable-2.6.0
gcr.io/linkerd-io/proxy-init:v1.2.0
gcr.io/linkerd-io/controller:stable-2.6.0
gcr.io/linkerd-io/web:stable-2.6.0
prom/prometheus:v2.11.1
gcr.io/linkerd-io/grafana:stable-2.6.0

注:官方镜像拉取受限,可以使用阿里云的海外构建能力制作所需镜像。

验证安装:

linkerd check

安装可视化扩展:

linkerd viz install --ha | kubectl apply -f -  ## on-cluster metrics stack

可选安装其他扩展:

## optional
linkerd jaeger install | kubectl apply -f - # Jaeger collector and UI
linkerd multicluster install | kubectl apply -f - # multi-cluster components

安装扩展后再次验证:

linkerd check

4.探索Linkerd

安装并运行控制平面和扩展后,您现在可以查看 Linkerd 仪表板:

linkerd viz dashboard &

此命令设置一个端口从本地系统转发到 linkerd-web pod。 (也可以 公开仪表板 供所有人访问。参考:https://linkerd.io/2.10/tasks/exposing-dashboard/)

例如,使用Nginx控制器的Ingress基本认证

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: web-ingress-auth
  namespace: linkerd-viz
data:
  auth: YWRtaW46JGFwcjEkbjdDdTZnSGwkRTQ3b2dmN0NPOE5SWWpFakJPa1dNLgoK
---
# apiVersion: networking.k8s.io/v1beta1 # for k8s < v1.19
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  namespace: linkerd-viz
  annotations:
    nginx.ingress.kubernetes.io/upstream-vhost: $service_name.$namespace.svc.cluster.local:8084
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header Origin "";
      proxy_hide_header l5d-remote-ip;
      proxy_hide_header l5d-server-id;      
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: web-ingress-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
spec:
  ingressClassName: nginx
  rules:
  - host: dashboard.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web
            port:
              number: 8084

查看仪表板本身产生的流量:

linkerd -n linkerd-viz viz top deploy/web

5.安装演示应用程序

# 安装 emojivoto 到 emojivoto命名空间
curl -sL https://run.linkerd.io/emojivoto.yml | kubectl apply -f -

# 转发 web-svc本地到端口 8080
kubectl -n emojivoto port-forward svc/web-svc 8080:80

# 将 Linkerd 添加到 emojivoto
kubectl get -n emojivoto deploy -o yaml | linkerd inject - | kubectl apply -f -

# 检查安装
linkerd -n emojivoto check --proxy

6.观察应用运行状态

linkerd -n emojivoto viz stat deploy
linkerd -n emojivoto viz top deploy
linkerd -n emojivoto viz tap deploy/web





7.注入sidecar容器说明

linkerd inject k8s.yml | kubectl apply -f -

或者:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: whoami
  name: whoami
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: whoami
  strategy: {}
  template:
    metadata:
      annotations:
        linkerd.io/inject: enabled  #添加此注解加入服务网格
      creationTimestamp: null
      labels:
        app: whoami
    spec:
      containers:
      - image: 10.60.11.1/k8s/whoami
        name: whoami
        ports:
        - containerPort: 80
          name: web
        resources: {}
status: {}
---

          livenessProbe:
            failureThreshold: 8
            exec:
              command:
                - pgrep
                - traefik
            initialDelaySeconds: 30
            timeoutSeconds: 15

特性说明

分布式追踪说明

参考:https://linkerd.io/2.10/features/distributed-tracing/

Linkerd 提供了许多具有分布式跟踪关联的常用功能,无需配置或应用程序变化,包括:

  • 实时服务拓扑和依赖关系图
  • 聚合服务运行状况、延迟和请求量
  • 聚合路径/路由运行状况、延迟和请求量

Ingress

参考:https://linkerd.io/2.10/tasks/using-ingress/

为简单起见,Linkerd 没有提供自己的Ingress控制器。 相反,Linkerd 旨在与您选择的Ingress控制器一起工作。

遥测和监控

参考:https://linkerd.io/2.10/features/telemetry/

Linkerd 的遥测和监控功能自动运行,无需需要开发人员的任何工作。 这些功能包括:

  • 记录顶级(“黄金”)指标(请求量、成功率和 延迟分布)用于 HTTP、HTTP/2 和 gRPC 流量。
  • 记录其他 TCP 流量的 TCP 级别指标(输入/输出字节等)。
  • 报告每个服务、每个调用方/被调用方对或每个路由/路径的指标 (使用服务配置文件 )。
  • 生成拓扑图,显示服务之间的运行时关系。
  • 实时、按需请求采样。

可以通过多种方式使用这些数据:

  • 通过 Linkerd CLI ,例如使用 linkerd viz stat和 linkerd viz routes.
  • 通过 Linkerd 仪表板 ,以及预构建的 Grafana 仪表板。
  • 直接来自 Linkerd 的内置 Prometheus 实例

流量拆分(金丝雀、蓝/绿部署)

参考:https://linkerd.io/2.10/features/traffic-split/

Linkerd 的流量分流功能让你可以动态任意切换服务发往不同目的地的 Kubernetes 服务的流量部分。 此功能可用于实施复杂的推出策略,例如 金丝雀部署 和 蓝/绿部署 , 例如,通过缓慢缓解旧版本服务的流量,以及到较新的版本。

posted @ 2021-08-15 20:44  Varden  阅读(291)  评论(0编辑  收藏  举报