日本マイクロソフトは2018年11月5〜7日に「Microsoft Tech Summit 2018」を開催。MicrosoftでCloud Developer Advocateを務める寺田佳央氏は、Kubernetesを本番環境で活用する際のポイントや、今後のJavaについて語った。
日本マイクロソフトは2018年11月5〜7日に「Microsoft Tech Summit 2018」を開催した。本稿では、Microsoft Cloud Developer Advocateの寺田佳央氏の講演「Javaを活用したマイクロサービスのためのKubernetes活用」の内容を要約してお伝えする。
Kubernetesとは、コンテナ型仮想化技術を本番環境で活用するための管理(コンテナオーケストレーション)ツールだ。端的に言えば、コンテナ単体、または複数のコンテナを「Pod」と呼ばれるオブジェクトでまとめ、「クラスタ」として管理する。コンテナの負荷に応じたオートスケールなどの特長を持つ。
参考記事:「Kubernetes」とは何か――コンテナ型仮想化の本番利用に向けた課題
寺田氏は「Kubernetesは数カ月に1回バージョンが上がり、サードパーティー製ツールもどんどん公開されているため、キャッチアップが難しい。『アプリケーションをコンテナ化したい』という理由だけで安易にKubernetesを選択すると、予想以上に大変な思いをするだろう。頻繁にバージョンアップを行うようなアプリケーションのコンテナ化や、アプリケーションのマイクロサービス化をしたいなどの目的があれば、Kubernetesを検討してほしい」と述べる。
寺田氏は、本番環境でKubernetesを活用する際に気を付けるべきポイントとして、以下の3つを紹介した。それぞれ見ていこう。
Kubernetesでは、YAML形式で記述されたマニフェストファイルを基に、Podの実行や管理を実現する。寺田氏は、マニフェストファイルを最小構成で記述した場合の例を挙げて説明する。
apiVersion: apps/v1 kind: Deployment metadata: name: account-service spec: replicas: 1 selector: matchLabels: app: account-service template: metadata: labels: app: account-service version: v1 env: test spec: securityContext: runAsUser: 1000 containers: name: account-service image: yoshioeastreg.azurecr.io/tyoshio2002/account-service:1.0
「Kubernetesを試しに使ってみるというような“Hello Worldレベル”の記述は容易で、世の中にはそうした情報があふれている。しかし、このような情報をうのみにして、本番環境に使い回すのは避けるべきだろう。本番環境で運用するために必要な設定が記述できているのかどうかを理解する必要がある」
寺田氏は、設定として重要な「labels」の概念について説明する。labelsは、Podをグループ化するための機能だ。複数のPodをグループごとに操作、指定できる。上記のマニフェストファイルの最小構成例では、「labels」という項目の中に「app」「env」「version」というキー、そしてそれぞれに「account-service」「test」「v1」という値が設定されている。これにより「account-service」という名前が付くアプリケーションに対して、開発ステージ、もしくはバージョンごとにグループ化し、特定のバージョンのアプリケーションを開発用の環境(名前空間)にデプロイしたり、特定のバージョンにだけリクエストを転送したりするフィルタリング操作が行える。この動きを確認するには、「kubectl」というコマンドに対して、「--selector」と呼ばれるオプションでラベルのキーと値を指定する必要がある。
例えば、下図のように「versionがv1のPodに対して特定の操作を行う」ということが実現できるわけだ。
「リソースやネットワーク、パフォーマンス、死活監視などを考えてマニフェストファイルを作成することも重要だ。labels以外にも、さまざまな設定項目が用意されているため、本番環境ではどのような設定が必要なのかを十分理解する必要がある」
Copyright © ITmedia, Inc. All Rights Reserved.