最近、Nginx イングレス コントローラーを使用して k8s クラスター内にいくつかのマイクロサービスを構築しましたが、それらは正常に動作しています。
マイクロサービス間の通信を扱うときに、gRPC を試してみましたが、うまくいきました。次に、マイクロサービス A -> gRPC -> マイクロサービス B の場合、すべてのリクエストがマイクロサービス B の 1 つのポッドでのみ発生したことを発見しました (たとえば、マイクロサービス B で使用できる合計 10 のポッド)。リクエストをマイクロサービス B のすべてのポッドに負荷分散するために、linkerd を試してみましたが、うまくいきました。しかし、gRPC が内部エラー (例: 100 件のリクエストのうち 1 件のエラー) を生成することがあることに気づき、k8s DNS の方法 (例: my-svc.my-namespace.svc.cluster-domain.example) を使用するように変更しました。その後、リクエストは決して失敗しません。gRPC と linkerd を保持し始めました。
その後、istioに興味を持ちました。クラスターに正常にデプロイしました。ただし、常に独自のロード バランサーが作成されることがわかりました。これは、既存の Nginx イングレス コントローラーとはあまり一致しません。
さらに、プロメテウスとグラファナ、そしてk9sも試してみました。これらのツールを使用すると、ポッドの CPU とメモリの使用状況をよりよく理解できます。
ここで、理解したいいくつかの質問があります:-
- クラスター リソースを監視する必要がある場合は、prometheus、grafana、および k9s を使用します。それらはサービス メッシュ (linkerd、istio など) と同じ監視の役割を果たしていますか?
- k8s DNS がすでにロード バランシングを達成できる場合、サービス メッシュはまだ必要ですか?
- サービス メッシュなしで k8s を使用している場合、通常のプラクティスより遅れていますか?
実は私もサービスメッシュを毎日使いたいと思っています。