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 服务的流量部分。 此功能可用于实施复杂的推出策略,例如 金丝雀部署 和 蓝/绿部署 , 例如,通过缓慢缓解旧版本服务的流量,以及到较新的版本。