特集
» 2019年01月21日 05時00分 公開

キャッチアップが大切:「Kubernetesで運用する」その前に Kubernetesを本番環境で利用する際のポイント (1/3)

日本マイクロソフトは2018年11月5〜7日に「Microsoft Tech Summit 2018」を開催。MicrosoftでCloud Developer Advocateを務める寺田佳央氏は、Kubernetesを本番環境で活用する際のポイントや、今後のJavaについて語った。

[石川俊明,@IT]

 日本マイクロソフトは2018年11月5〜7日に「Microsoft Tech Summit 2018」を開催した。本稿では、Microsoft Cloud Developer Advocateの寺田佳央氏の講演「Javaを活用したマイクロサービスのためのKubernetes活用」の内容を要約してお伝えする。

本番環境で「Kubernetes」を活用する際の注意点

Microsoft Cloud Developer Advocate 寺田佳央氏 Microsoft Cloud Developer Advocate 寺田佳央氏

 Kubernetesとは、コンテナ型仮想化技術を本番環境で活用するための管理(コンテナオーケストレーション)ツールだ。端的に言えば、コンテナ単体、または複数のコンテナを「Pod」と呼ばれるオブジェクトでまとめ、「クラスタ」として管理する。コンテナの負荷に応じたオートスケールなどの特長を持つ。

参考記事:「Kubernetes」とは何か――コンテナ型仮想化の本番利用に向けた課題

 寺田氏は「Kubernetesは数カ月に1回バージョンが上がり、サードパーティー製ツールもどんどん公開されているため、キャッチアップが難しい。『アプリケーションをコンテナ化したい』という理由だけで安易にKubernetesを選択すると、予想以上に大変な思いをするだろう。頻繁にバージョンアップを行うようなアプリケーションのコンテナ化や、アプリケーションのマイクロサービス化をしたいなどの目的があれば、Kubernetesを検討してほしい」と述べる。

Kubernetesには2000を超える関連サービスがあるという Kubernetesには2000を超える関連サービスがあるという

 寺田氏は、本番環境でKubernetesを活用する際に気を付けるべきポイントとして、以下の3つを紹介した。それぞれ見ていこう。

  • Kubernetesのマニフェストファイルの仕様を正しく理解する
  • Kubernetesをバージョンアップした後にコンテナが動く保証はない
  • Kubernetesの「Persistent Volumes」の利用を極力避ける

Kubernetesのマニフェストファイルの仕様を正しく理解する

 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と --selectorオプションの活用例 講演中のデモで示されたlabelsと--selectorオプションの活用例

 「リソースやネットワーク、パフォーマンス、死活監視などを考えてマニフェストファイルを作成することも重要だ。labels以外にも、さまざまな設定項目が用意されているため、本番環境ではどのような設定が必要なのかを十分理解する必要がある」

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。