3

使用 Kind 体验 Linkerd

 3 years ago
source link: https://liqiang.io/post/try-linkerd-with-kind?lang=ZH_CN
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用 Kind 体验 Linkerd

@SOLUTION· 2021-09-07 23:02 · 47 min read

虽然对 Linkerd 已经闻其名很久的,也大概了解了一些它的架构,但还真是没有尝试一下,主要是它之前的版本着实不易用,但是据说第二版改了很多,所以最近就跟着别人的视频玩了一下,顺便水一篇。

安装 Kind

使用的环境是 Ubuntu:

  1. [[email protected]]# curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
  2. [[email protected]]# chmod +x ./kind
  3. [[email protected]]# mv ./kind /usr/local/bin/kind
  1. [[email protected]]# kind create cluster
  2. [[email protected]]# kind create cluster --name linkerd --image kindest/node:v1.19.1
  3. [[email protected]]# kind get clusters
  4. kind
  5. linkerd

添加本地 DNS 记录

  1. [[email protected]]# sudo echo "127.0.0.1 servicemesh.demo" >> /etc/hosts

部署测试应用

  1. [[email protected]]# git clone https://github.com/marcel-dempers/docker-development-youtube-series.git
  2. [[email protected]]# echo "create nginx ingress"
  3. [[email protected]]# kubectl create ns ingress-nginx
  4. [[email protected]]# kubectl apply -f kubernetes/servicemesh/applications/ingress-nginx/
  5. [[email protected]]# echo "create applications"
  6. [[email protected]]# kubectl apply -f kubernetes/servicemesh/applications/playlists-api/
  7. [[email protected]]# kubectl apply -f kubernetes/servicemesh/applications/playlists-db/
  8. [[email protected]]# kubectl apply -f kubernetes/servicemesh/applications/videos-web/
  9. [[email protected]]# kubectl apply -f kubernetes/servicemesh/applications/videos-api/
  10. [[email protected]]# kubectl apply -f kubernetes/servicemesh/applications/videos-db/

访问测试应用,打开本地的浏览器,输入:http://servicemesh.demo/home/,应该看到这个页面:

图 0:测试应用页面 79dd983c1caf

部署 Linkerd

这里我按照别人的视频操作选择了一个 Docker 容器,在容器内操作:

  1. [[email protected]]# docker run -it --rm -v ${HOME}:/root/ -v ${PWD}:/work -w /work --net host alpine:3.12 sh
  2. /work # echo "现在进入到容器内部了"
  3. /work # apk add --no-cache curl nano
  4. /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
  5. /work # chmod +x ./kubectl
  6. /work # mv ./kubectl /usr/local/bin/kubectl
  7. /work # export KUBE_EDITOR="nano"
  8. /work # kubectl get nodes
  9. NAME STATUS ROLES AGE VERSION
  10. linkerd-control-plane Ready master 127m v1.19.1

安装 Linkerd Cli:

  1. /work # curl -L -o linkerd https://github.com/linkerd/linkerd2/releases/download/edge-20.10.1/linkerd2-cli-edge-20.10.1-linux-amd64
  2. /work # chmod +x linkerd && mv ./linkerd /usr/local/bin/
  3. /work # linkerd check --pre

应该看到的是一片 ✅ 就对了,最后有一点小 Warning,还有这里的结果是 ❎,因为我是在安装之后才执行的,所以请忽略它:

图 1:Precheck 6f91c9b51787

安装 Linkerd

  1. [[email protected]]# linkerd install > ./kubernetes/servicemesh/linkerd/manifest/linkerd-edge-20.10.1.yaml
  2. [[email protected]]# kubectl apply -f ./kubernetes/servicemesh/linkerd/manifest/linkerd-edge-20.10.1.yaml
  3. [[email protected]]# linkerd check

再检查一遍,应该此时就是正常的了:

图 2:PostCheck 2baa84ba0734

查看 Dashboard

  1. [[email protected]]# kubectl -n linkerd port-forward svc/linkerd-web 8084

如果你是远程机器的话,因为 Linkerd 设置了 Host 过滤,所以你可能需要代理一下(不能麻烦的话):

  1. [[email protected]]# ssh -L 8084:127.0.0.1:8084 <host-ip>

然后访问 http://127.0.0.1:8084/namespaces 就可以看到这个界面了:

图 3:Linkerd Dashboard 1615a4bc2a87

到此,只是将 Linkerd 的架子打起来,其实还没有使用到 Linkerd 的功能,下面开始正式注入 Linkerd,Linkerd 和 Istio 一样,都是通过注入 Sidecar 的方式实现,所以这个没啥差异。

Linkerd 使用

注入 Sidecar

这一步,就开始给所有的 Service 注入 Linkerd 的 sidecar,然后我们再来看看 Dashboard 中会显示什么内容,如果不注入 Sidecar 的话,什么内容都不会显示:

  1. [[email protected]]# kubectl get deploy playlists-api -o yaml | linkerd inject - | kubectl apply -f -
  2. [[email protected]]# kubectl get deploy playlists-db -o yaml | linkerd inject - | kubectl apply -f -
  3. [[email protected]]# kubectl get deploy videos-api -o yaml | linkerd inject - | kubectl apply -f -
  4. [[email protected]]# kubectl get deploy videos-db -o yaml | linkerd inject - | kubectl apply -f -
  5. [[email protected]]# kubectl get deploy videos-web -o yaml | linkerd inject - | kubectl apply -f -
  6. [[email protected]]# kubectl -n ingress-nginx get deploy nginx-ingress-controller -o yaml | linkerd inject - | kubectl apply -f -

然后打开 Dashboard:

图 4:Dashboard 数据 27d2751437a4

可以看到这些 Meshed 的 Pod 会有一些成功率以及延迟的一些数据,这就表示 Sidecar 开始工作了。这个 Dashboard 其实也没多少内容,点击一个 Metric 之后你可以看到一个调用链的图,除此之外没有太多其他的东西:

图 5:调用链 0b28042d936a

这个 Dashboard 用来监测流量,例如你发现一个 API 异常之后,你可以通过这个监测面板查看 API 的状态,从而定位异常,解决异常:

图 6:流量监测 c86dfbf5275e

本文大概就这么多内容,主要都还是参照这个视频(Introduction to Linkerd for beginners | a Service Mesh)来的,其实还是主要学习了一下如何使用 Linkerd,但是对于一些特性还没有来得及体会,接下来会继续水。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK