- 村田靖拓
- 約 2,100 文字
- 400 View
目次
はじめに
こんにちは。TIGの村田です。CNCF連載の第3回はLinkerdについて書いていきます。
Linkerdとは
LinkerdはCNCFのIncubating projectsに所属しているサービスメッシュプロダクトです。Twitter社における大規模なマイクロサービス運用の知見をもとに作られたという誕生エピソードが以下のブログで語られています。
Linkerd: Twitter-style Operability for Microservices
超軽量であることが特徴で、Podにinjectされるsidecar proxyはRustで実装されています。また、zero configでアプリのソースコードを全くいじることなく簡単に動作させることが可能です。
Linkerdを使ってみる
環境
kubectl version --short |
今回はGKEを使います。
we need to ensure you have access to a Kubernetes cluster running 1.13 or later
Linkerdを使う際にはKubernetesは1.13以上である必要があるとのことですが問題なさそうですね。
Linkerd CLIのインストール
Mac(macOS Mojave バージョン10.14.6)を利用しているので、 brew でインストールしました。
brew install linkerd |
クラスタの事前チェック
To ensure that the control plane will install correctly, the Linkerd CLI can check and validate that everything is configured correctly.
Linkerd CLIを利用して事前にインストールの準備が完了しているか確認できるようです。
linkerd check --pre |
結構丁寧にチェックされている印象です。前述した互換性のあるKubernetesバージョン等についてもこのコマンドでチェックできるので、インストール時は常に実施しておくのが良いでしょう。
LinkerdをKubernetesクラスタへインストール
Linkerdインストール時に利用されるmanifestは以下のコマンドで作成されます。
linkerd install |
筆者の手元では3,160行のmanifestが出力されました。これをapplyしていきます。
linkerd install | kubectl apply -f - |
Linkerdのインストール状況をチェックできるコマンドが以下です。インストールコンポーネントが多いので、こういったステータスチェック用のコマンドが用意されているのはありがたい&安心感があります。
linkerd check |
Linkerdダッシュボードの確認
check コマンドが通ったのでダッシュボードを見てみます。
linkerd dashboard & |
画面までサクッとたどり着くことができました。 Installs in seconds with zero config と謳っているだけあって非常にスムーズです。
デモアプリを使ってLinkerdを見る
Linkerdのデモアプリとして emojivoto をインストールします。
curl -sL https://run.linkerd.io/emojivoto.yml | kubectl apply -f - |
emojivotoのnamespaceにPodがデプロイされていることが確認できました。
kubectl get po -n emojivoto |
実際にアプリにもアクセスしてみます。
kubectl -n emojivoto port-forward svc/web-svc 8080:80 |
http://localhost:8080 を開いた結果が下の画面。
気に入った絵文字を選んで投票すると、リーダーボートの順位に反映されるアプリのようです。
ちなみにドーナツの絵文字を選ぶと404エラーが返ってくるようにあえて仕込まれているようです。このあたりはさすがサービスメッシュ向けデモアプリといったところでしょうか。
Linkerdのinjection
ちなみにこのタイミングでLinkerdのダッシュボードを見ても、 emojivoto に関してのトラフィック情報は表示されません。Linkerdのinjectionが必要であり、 Meshed というカラムを見るとそれが分かります。
以下コマンドでlinkerdのinjectionを行います。
kubectl get -n emojivoto deploy -o yaml \ |
先程 emojivoto のPod群を参照したときは各Podでは1つのコンテナが稼働していましたが、sidecar injectionによりPodごとに2つのコンテナが稼働していることが確認できます。
kubectl get po -n emojivoto |
Linkerdのダッシュボードも見てみます。 Meshed のカラムが 1/1 となっていることが確認でき、各種メトリクスの値も連携されています。
本当はGrafanaの画面にてPrometheus経由で取得されたメトリクスも参照したかったのですが、 いくつか試してみても見られず。。悔しいのでここは改めてリベンジします。
さいごに
サービスメッシュのプロダクトであるということで気になって触ってみましたが、とても簡単に始めることができました。
サービスメッシュと言えばCNCFのGraduated projectsであるEnvoyをベースとしたIstioの名前をよく聞きますが、Linkerdのほうがより軽量で簡単に導入できる印象を受けました。ただ、機能としてはIstioのほうが充実していそうで、実際に利用する際はしっかりとした比較検証が必要だなと感じました。
さて、明日はCNCF連載の第4回目です! ぜひお楽しみに。