【レポート】k8s 疲れの方へ送る、k8s ベースのらくらくマイクロサービス動作基盤のご紹介 #jjug_ccc #jjug_ccc_c

2022.06.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンサル部のとばち(@toda_kk)です。

本記事は、2022年6月19日に開催されたオンラインカンファレンス JJUG CCC 2022 Spring にて行われたセッション「k8s 疲れの方へ送る、k8s ベースのらくらくマイクロサービス動作基盤のご紹介〜 Dapr ベースのマイクロサービス開発から GitHub Action を利用した CI/CD 〜」のレポートです。

JJUG CCCは、例年2回、春と秋に開催する日本最大のJavaコミュニティイベントです。Java関連の技術や事例に関する良質なセッションが行われ、また異なる分野で活躍するJava技術者が一堂に会する場ともなっています。

このセッションでは、Java Champion 兼 Microsoft社Sr. Cloud Advocateである 寺田佳央さん によって、主に Dapr というOSSツールや、Microsoft Azureから提供されているコンテナサービスである Azure Container Apps について解説してくれる内容になっています。

セッション概要

近年 IT 業界においてコンテナを活用したサービスの提供や、マイクロサービスの動作基盤として Kubernetes (k8s) が注目をあび様々な企業で活用されています。k8s はとても素晴らしい技術で、上手く活用すると、クラウド・ネィティブなシステムをより効果的に活用する事ができます。

一方で、k8s を正しく利用して活用していくのも難しく、幅広い技術的知見や高度な技術力も必要になります。こうした技術者不足で苦労している企業も少なからずあります。

こうした背景から、ここ数年で k8s のエコシステムに新しい潮流が生まれてきています。それは、k8s の便利な機能をより簡単に扱う事ができる、k8s 隠蔽化技術の登場です。

具体的には Microsoft では Azure Spring Cloud や Azure Container Apps といった k8s ベースのサービスを提供しています。これらは、難しく面倒な作業が不要です。例えば YAML を操作したり、ノードに対するパッチ適用などのインフラ・メンテナンスは利用者がしなくてもよくなります。そして開発者は、よりサービスの開発集中できるようになっています。

本セッションでは、Microsoft が昨年発表した新しい k8s ベースの技術 Azure Container Apps (プレビュー版) を紹介します。

このサービスは、マイクロサービスの開発基盤 Dapr (Distributed Application Runtime) を統合している他、GitHub Action を利用した CI/CD も簡単にできるようになっています。

こうした Azure Container Apps の魅力をデモを交えながらわかりやすく紹介します。

k8s の運用にお疲れの方もどうぞご覧ください。

スピーカー

てらだ よしお さん

セッション動画

セッションレポート

Kubernetesについて

  • 最近では、マイクロサービスや大規模システムの開発で利用される事例が多く出てきている。
  • このセッションでは、決してKubernetesを否定するつもりはない。
    • KubernetesはEnterprise Javaによく似ている。
  • しかし、Kubernetesは銀の弾丸ではない。
    • なんでもかんでもKubernetesに移行すれば良いわけではない。
    • 開発するサービスの数、エンジニアの人数や、ビジネスの方向性に依存する。
  • 本番環境で動かすためには、運用・監視も含めていろいろなことを考えなければいけない。

本当にやりたいことは何か?

  • Kubernetesを使うことがゴールなのか?
  • インフラのことはあまり考えずにサービスを素早く開発して提供したい?
  • Kubernetesの難しい部分を隠蔽して、より簡単に使えるようにしたサービスが出てきている。
    • Microsoftでは2つのサービスを提供している。
      • Azure Container Apps
      • Azure Spring Apps

Azure Spring Apps

  • 以前は、Azure Spring Cloudという名前だったが、2022年5月24日に変更になった。
  • 裏側ではKubernetesで動いている。
  • ソースコードさえあれば、コンテナを作成して実行するところまでやってくれる。
    • 自分でコンテナを用意する必要がない。

Azure Container Apps

  • 2022年5月24日に正式リリースされた。
  • マイクロサービスの動作基盤として、サーバーレスとして提供する。
    • サーバーのメンテナンスはMicrosoftに任せられる。
  • 任意のプログラミング言語で利用可能。
  • コンテナとしてアプリケーションを実行するため、他の動作基盤に移行することも容易。
    • Azure Kubernetes Service
    • Azure Web App for Container
    • Azure Container Instances
  • デフォルトでリビジョン管理できる。カナリアデプロイなども可能。
  • Azureポータル画面からGitHub ActionsのWorkflowを作成できる。

Azure Container Appsの裏側の仕組み

  • KEDA(Kubernetes-based Event Driven Autoscaler)
    • イベント駆動のアプリケーションのオートスケール。
  • Dapr(Distributed Application Runtime)
    • 分散マイクロサービスフレームワーク。
      • マイクロサービスを開発する際に必要となる機能を提供してくれる。
      • 状態管理の機能もあり、ステートフルなアプリケーションを簡単に開発できる。

デモ

  • yoshioterada/Quarkus-run-on-Azure-Container-Apps-with-Dapr
    • コンテンツが充実していて、すごい(感想)
    • デモではQuarkusを使っているが、Spring Bootなど他のフレームワークでも利用可能。
  • az containerapp createコマンドに--enable-daprを付け加えるだけで、Daprを利用できる。
    • 実際には、Sidecarが追加されることになる。
    • 通常は、Kubernetes上にDaprをインストールしておく必要があるが、Azure Container Appsではビルドインされている。
  • --ingressを付け加えると、外部からアクセス可能なエンドポイントが作成される。
  • KubernetesマニフェストなどYAMLファイル不要で、コマンドを実行するだけでアプリケーションを起動できる。
  • リビジョンモードを指定することで、複数のバージョンを同時に実行することが可能。
    • リクエストの振り分けの重みづけ(バージョン1:バージョン2 = 8:2 など)を設定できる。
  • Azureポータルやaz containerappコマンドから、コンテナから出力されるログを確認したり、コンテナのコンソールにログインしてコマンドを実行したりできる。
  • Daprを利用した名前解決とサービス呼び出し。
    • Daprでは機能の一つとして、サービスメッシュが提供される。
    • サービス間のリクエストは、Sidecarとして起動しているDaprを経由して通信される。

Azure Container Appsは東日本リージョンでも利用可能

  • Javaでマイクロサービスを開発する際に、ぜひ使って欲しい。

Azure Container AppsとDaprが気になる

個人的な感想としては、Azure Container Appsもそうですが、Daprを実際に触ってみたいなと思いました。

また、Azure Container Appsの裏側の仕組みがいろいろと気になりました。実行されるコンテナがVMレベルで分離されているのであれば、AWSの Firecracker と似たような仕組みなのかな、と思ったりしました。

また、Azureには他にもコンテナ関連のサービスがいろいろとありますが、特色や使い分けなどは下記のドキュメントにまとまっていそうです。

Azure Container Appsでは、裏側で動くKubernetesの管理が隠蔽されており意識しなくて済む反面、Kubernetes APIに直接アクセスできない点が大きな制約になるかなと思います。ビルドインで提供されているDaprやKEDAなど以外にも、OSSのツールをインストールしたいといった場合には、Azure Kubernetes Serviceを使うのが良さそうです。

以上、コンサル部のとばち(@toda_kk)でした。