Kubernetesで初めてのアプリを作ろう」パート4: 設定 #docker #kubernetes #k8s
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
このブログシリーズのパート1では、Kubernetesでの初めてのアプリ構築の基本をご紹介しました。パート2では、PodとControllerとしてのプロセスについて議論しました。そしてパート3では、Pod同士の通信を確実とするための、Kubernetesにおけるネットワーキングの設定方法をご紹介しました。今回は、アプリケーションが環境間での可搬性を保つための、各環境特有の設定をどのように特定し管理するかについてご紹介します。
設定を取り外す
あらゆるコンテナ化アプリのデザイン原則の中心にあるものは、可搬性です。それぞれの環境に合わせてコンテナや、コンテナを管理するControllerを再構築する事態は絶対に避けたいものです。アプリケーションが、1つの環境ではうまく動作するのに、別の環境では動作しない理由の代表格として、アプリに必要な各環境ごとの 設定 に関わる問題があります。
よく設計されたアプリケーションは、設定をコンテナ自身とは切り離した独立したオブジェクトとして扱います。また設定はコンテナの実行時にプロビジョニングされます。この場合、アプリをある環境から別の環境へ移すとき、コンテナやControllerの書き直す必要はありません。そのため新しい環境に対しては、その環境に適した設定オブジェクトを提供するだけで、他のことは何もせずにそのまま残しておくことができます。
アプリケーションを設計するときは、このようにプラガブルとしたい設定がどれであるかを特定する必要があります。通常、これらは各環境ごとに変更される環境変数または設定ファイルになります。例えば、ステージング環境と本番環境で異なるサービス用のアクセストークンや、異なるポート設定などです。
判断ポイント その4: どのアプリケーション設定が、環境ごとに変更が必要か?
私たちのウェブアプリの例では、典型的な設定群としてデータベースやAPI用のアクセス認証情報(開発と本番環境では当然異なる認証情報を使用します)や、ウェブのフロントエンドの前にコンテナ化プロキシを使用する選択をした場合はプロキシ設定ファイルが含まれます。
アプリケーション内でプラガブルな設定を特定したら、Kubernetesのシステムである VolumeとconfigMap を使って、望みの動作をさせることができます。
Kubernetesでは、Volumeはファイルシステムの断片として考えられています。 VolumeはPodに対してプロビジョニングし、Podによって所有されます。Volumeのファイル内容は、Podのコンテナ内の任意のファイルシステムのパスにマウントできます。
Volumeの宣言は、環境特有の設定オブジェクトと、可搬性があり普遍的なアプリケーション定義の間を取り持つインターフェイスとして考えるとよいでしょう。Volumeの宣言は、コンテナ内の適切な場所に対して、外部設定群をマッピングするための手順を含むでしょう。
ConfigMapは、PodのVolumeや環境変数を形成する実際の内容を有します。 ファイルとファイルコンテンツのいずれかを記述するキーと値のペア、または環境変数とその値も含まれます。ConfigMapは通常、環境ごとに異なります。例えば、開発環境用にconfigMapを1つ持ち、もう1つを本番環境用に持つとします。それぞれに、正しい変数と設定ファイルを持ちます。
configMapとVolumeは、コンテナの設定を提供するための働きをします。
チェックポイント その4: 各環境に適切なconfigMapを作成する
開発環境のconfigMapオブジェクトは、前述のとおり特定した環境固有の設定を開発環境に適切な値で取り込んでいるはずです。コンテナ内に必要に応じて適切な設定ファイルを形成するconfigMapを使用するVolumeを、Podの定義に含むようにしましょう。一度、開発環境用に前述の設定をしてしまえば、新たなconfigMapオブジェクトを下流の各環境用に作成し、交換することは簡単です。その際、アプリケーションの他の部分には変更を加える必要はありません。
高度なトピックス
基本的なconfigMapは設定のモジュール化のための強力な機能です。しかし若干異なるアプローチが必要な場合もあります。
- KubernetesのSecretはconfigMapのようなもので、Podにプロビジョニングするためのファイル群やキーと値のペアをひとまとめにします。configMapと異なり、Secretは暗号データ管理における追加的なセキュリティの保証を提供します。Secretは、パスワードやアクセストークンのようなオブジェクトなど、あらゆる機微情報に最も適切な選択です。
次は本シリーズをしめくくる、Kubernetesアプリケーション向けのストレージ設定についての記事です。
Kubernetesの設定と関連トピックスについてもっと読みたい人は:
- Docker社によるPlay with Kubernetesもご覧ください。
- VolumeについてKubernetesドキュメントを読む
- ConfigMapについてKubernetesドキュメントを読む
2020年はじめには、Kubernetesトレーニングも開始する予定です。トレーニングでは、より詳細な事例とハンズオン演習を提供します。トレーニングを受講可能な時期についてお知らせを受け取るには、こちらにサインアップしてください: トレーニングについてお知らせを受け取る
原文: Designing Your First Application in Kubernetes, Part 4: Configuration