概述
虽然对 Linkerd 已经闻其名很久的,也大概了解了一些它的架构,但还真是没有尝试一下,主要是它之前的版本着实不易用,但是据说第二版改了很多,所以最近就跟着别人的视频玩了一下,顺便水一篇。
环境准备
安装 Kind
使用的环境是 Ubuntu:
[root@liqiang.io]# curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
[root@liqiang.io]# chmod +x ./kind
[root@liqiang.io]# mv ./kind /usr/local/bin/kind
创建集群
[root@liqiang.io]# kind create cluster
[root@liqiang.io]# kind create cluster --name linkerd --image kindest/node:v1.19.1
[root@liqiang.io]# kind get clusters
kind
linkerd
添加本地 DNS 记录
[root@liqiang.io]# sudo echo "127.0.0.1 servicemesh.demo" >> /etc/hosts
部署测试应用
[root@liqiang.io]# git clone https://github.com/marcel-dempers/docker-development-youtube-series.git
[root@liqiang.io]# echo "create nginx ingress"
[root@liqiang.io]# kubectl create ns ingress-nginx
[root@liqiang.io]# kubectl apply -f kubernetes/servicemesh/applications/ingress-nginx/
[root@liqiang.io]# echo "create applications"
[root@liqiang.io]# kubectl apply -f kubernetes/servicemesh/applications/playlists-api/
[root@liqiang.io]# kubectl apply -f kubernetes/servicemesh/applications/playlists-db/
[root@liqiang.io]# kubectl apply -f kubernetes/servicemesh/applications/videos-web/
[root@liqiang.io]# kubectl apply -f kubernetes/servicemesh/applications/videos-api/
[root@liqiang.io]# kubectl apply -f kubernetes/servicemesh/applications/videos-db/
访问测试应用,打开本地的浏览器,输入:http://servicemesh.demo/home/,应该看到这个页面:
图 0:测试应用页面 |
---|
部署 Linkerd
这里我按照别人的视频操作选择了一个 Docker 容器,在容器内操作:
[root@liqiang.io]# docker run -it --rm -v ${HOME}:/root/ -v ${PWD}:/work -w /work --net host alpine:3.12 sh
/work # echo "现在进入到容器内部了"
/work # apk add --no-cache curl nano
/work # curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
/work # chmod +x ./kubectl
/work # mv ./kubectl /usr/local/bin/kubectl
/work # export KUBE_EDITOR="nano"
/work # kubectl get nodes
NAME STATUS ROLES AGE VERSION
linkerd-control-plane Ready master 127m v1.19.1
安装 Linkerd Cli:
/work # curl -L -o linkerd https://github.com/linkerd/linkerd2/releases/download/edge-20.10.1/linkerd2-cli-edge-20.10.1-linux-amd64
/work # chmod +x linkerd && mv ./linkerd /usr/local/bin/
/work # linkerd check --pre
应该看到的是一片 ✅ 就对了,最后有一点小 Warning,还有这里的结果是 ❎,因为我是在安装之后才执行的,所以请忽略它:
图 1:Precheck |
---|
安装 Linkerd
[root@liqiang.io]# linkerd install > ./kubernetes/servicemesh/linkerd/manifest/linkerd-edge-20.10.1.yaml
[root@liqiang.io]# kubectl apply -f ./kubernetes/servicemesh/linkerd/manifest/linkerd-edge-20.10.1.yaml
[root@liqiang.io]# linkerd check
再检查一遍,应该此时就是正常的了:
图 2:PostCheck |
---|
查看 Dashboard
[root@liqiang.io]# kubectl -n linkerd port-forward svc/linkerd-web 8084
如果你是远程机器的话,因为 Linkerd 设置了 Host 过滤,所以你可能需要代理一下(不能麻烦的话):
[root@liqiang.io]# ssh -L 8084:127.0.0.1:8084 <host-ip>
然后访问 http://127.0.0.1:8084/namespaces 就可以看到这个界面了:
图 3:Linkerd Dashboard |
---|
到此,只是将 Linkerd 的架子打起来,其实还没有使用到 Linkerd 的功能,下面开始正式注入 Linkerd,Linkerd 和 Istio 一样,都是通过注入 Sidecar 的方式实现,所以这个没啥差异。
Linkerd 使用
注入 Sidecar
这一步,就开始给所有的 Service 注入 Linkerd 的 sidecar,然后我们再来看看 Dashboard 中会显示什么内容,如果不注入 Sidecar 的话,什么内容都不会显示:
[root@liqiang.io]# kubectl get deploy playlists-api -o yaml | linkerd inject - | kubectl apply -f -
[root@liqiang.io]# kubectl get deploy playlists-db -o yaml | linkerd inject - | kubectl apply -f -
[root@liqiang.io]# kubectl get deploy videos-api -o yaml | linkerd inject - | kubectl apply -f -
[root@liqiang.io]# kubectl get deploy videos-db -o yaml | linkerd inject - | kubectl apply -f -
[root@liqiang.io]# kubectl get deploy videos-web -o yaml | linkerd inject - | kubectl apply -f -
[root@liqiang.io]# kubectl -n ingress-nginx get deploy nginx-ingress-controller -o yaml | linkerd inject - | kubectl apply -f -
然后打开 Dashboard:
图 4:Dashboard 数据 |
---|
可以看到这些 Meshed 的 Pod 会有一些成功率以及延迟的一些数据,这就表示 Sidecar 开始工作了。这个 Dashboard 其实也没多少内容,点击一个 Metric 之后你可以看到一个调用链的图,除此之外没有太多其他的东西:
图 5:调用链 |
---|
监测流量
这个 Dashboard 用来监测流量,例如你发现一个 API 异常之后,你可以通过这个监测面板查看 API 的状态,从而定位异常,解决异常:
图 6:流量监测 |
---|
小结
本文大概就这么多内容,主要都还是参照这个视频(Introduction to Linkerd for beginners | a Service Mesh)来的,其实还是主要学习了一下如何使用 Linkerd,但是对于一些特性还没有来得及体会,接下来会继续水。