目次


YAML の基礎と Kubernetes 内でのその使用方法

Kubernetes 内での YAML の具体的な使い方を探る

Comments

このチュートリアルでは、YAML の基本構造と YAML ファイルの作成方法の基礎を学びます。また、サンプル・ファイルを基に、Kubernetes 内での YAML ファイルの使い方を具体的に説明します。

目標

このチュートリアルでは、次のことを学びます。

  • YAML ファイルの定義
  • YAML を使用する理由
  • YAML と JSON / XML との関係
  • YAML ファイルの基本構造
  • Kubernetes 内での YAML ファイルの使用方法

前提条件

このチュートリアルでは、読者がすでにデータの保管および転送に使用する XML や JSON などの言語の基礎知識を身に付けていることを前提としています。

YAML ファイルの定義

本題に入る前に、YAML が何であるのかを理解しておきましょう。www.yaml.org での定義によると、「YAML は人間が読んで簡単に理解できるようにデータをシリアル化するための標準であり、すべてのプログラミング言語に対応します」。

YAML は次のような一般的な使用ケースを対象に作成されました。

  • 構成ファイル
  • ログ・ファイル
  • プロセス間メッセージング
  • 言語間データ共有
  • オブジェクト・パーシスタンス
  • 複雑なデータ構造

YAML を使用すべき理由

YAML ファイルを使用することには次のメリットがあります。

  1. YAML ファイルは表現力に優れているため、人間が読んで簡単に理解できます。また、拡張することもできます。
  2. 実装するのも使用するのも簡単です。
  3. プログラミング言語の間で簡単に移植できます。
  4. アジャイル言語のネイティブ・データ構造に適合します。
  5. YAML ファイルは一貫したモデルに従っているため、汎用のツールを使用できます。
  6. ワンパス処理をサポートします。
  7. 使い勝手に優れています。コマンド・ラインに追加する必要のあるパラメーターは限定されるようになりました。
  8. 保守可能です。YAML ファイルをソース管理に追加して、変更を追跡できます。
  9. 柔軟性に優れています。YAML を使用すれば、コマンド・ラインで使用できる構造よりも遥かに複雑な構造を作成できます。

JSON および XML との関係

xml json yaml
xml json yaml

XML は、さまざまな分野における先駆的な存在です。XML は当初、汎用マークアップ言語 (SGML) との後方互換性を持つ言語として設計されました。SGML は構造化された文書をサポートするために設計された言語であることから、XML の使用には多くの設計上の制約が課せられます。

JSON の設計目標は単純さと普遍性です。これは生成および解析という点での目標であるため、人間にとっての理解しやすさは多少損なわれますが、JSON データは最新式のあらゆるプログラミング環境で簡単に処理できます。

YAML の設計目標は、人間が読んで理解しやすいものにすること、そしてより完全な情報モデルを確立することです。YAML は JSON よりも生成、解析しにくいことから、JSON のスーパーセットとしてとらえることができます。すべての JSON ファイルは例外なく、有効な YAML ファイルでもあります。

要は、追加の機能が必要になった場合は、いつでも簡単に JSON を YAML に移行できるということです。YAML は、XML で学んだ教訓が形となった言語と言えます。

YAML ファイルの構造

YAML ファイルの構成要素は次のとおりです。

  1. Key-Value ペア - YAML ファイル内の基本的なエントリー・タイプです。キーとコロンの後にスペース、その後に値が続きます。
  2. 配列/リスト - リスト名の後に、多数の項目を続けることができます。リストの構成要素は - で始まります。n 個のリストを使用できますが、配列に含まれるさまざまな要素のインデントが非常に重要になります。
  3. 辞書/マップ - 複雑なタイプの YAML ファイルになってくると、辞書とマップが使われます。
YAML の構成要素
YAML の構成要素

YAML ファイルを作成する際の一般的なガイドライン

YAML ファイルを作成するときは、次のガイドラインを念頭に置いてください。

インデントとタブの重要性

以下の図は、「バナナ」の詳細を示しています。バナナには次の 3 つの属性があります。

  1. Calories (カロリー) = 200
  2. Fat (脂質) = 0.5g
  3. Carbs (炭水化物) = 30g
バナナの栄養素
バナナの栄養素

次の図を見るとわかるように、インデントまたはタブを 1 つ追加しただけで、YAML オブジェクトの意味が変わってきます。このことから、YAML ファイルを扱う際は、インデントとタブをくれぐれも慎重に使用しなければなりません。

インデントとタブの重要性
インデントとタブの重要性

YAML の基礎に関する重要な側面

YAML の基礎
YAML の基礎

YAML ファイルを作成する際は、次の側面にも注意が必要です。

  • SCALAR - date を「YYYY-MM-DD」形式で記述して、その値を date 変数に代入できます。
  • COLLECTIONS - 例えば、請求先住所を記述するとします。その住所が配送先住所と同じであれば、& の後に ID、その後に請求先住所を続けることができます。同じ住所を配送先にコピーする必要がある場合、請求先住所で使用されている ID と * 記号を使って同じ住所を表すことができます。このようにして重複を避けることで、データを簡潔にすることができます。
  • MULTI-LINE COLLECTIONS - 例えば、住所の行があり、その行に複数の行が含まれているとします。これらの複数の行の形式を統一させるには、I 記号を使用します。
  • LISTS/DICTIONARIES - 前のセクションで説明したとおりです。
  • MULTI-LINE FORMATTING - 例えば、多数の文字からなる長い文字列値があるとします。その値を複数の行に分けて、すべて統一した形式で記述するには、上述のように > 記号を使用します。

Kubernetes 内での YAML の使用方法

YAML ファイルのメリットと基本的な構成要素を説明したので、次は、Kubernetes 内での YAML の使用方法を見ていきましょう。 Kubernetes リソースは宣言型で作成されます。宣言型にすることで、YAML ファイルを利用します。ポッド、サービス、デプロイメントなどの Kubernetes リソースは、YAML ファイルを使用して作成します。

以下に示しているのは、デプロイメント・リソースを作成するサンプル YAML ファイルです。このサンプルを基に、Kubernetes 内での YAML の使い方を具体的に説明します。 注: このサンプルには基本的な仕様と高度な仕様の両方が含まれています。

kubernetes 内で使用される YAML の例
kubernetes 内で使用される YAML の例

以下に、各種のフィールドについて簡単に説明します。

  • replicas - Kubernetes に対し、デプロイ時に作成するポッドの数を指示します。このフィールドの値を変更することで、コンテナー化されたアプリケーションを簡単にスケーリングできます。
  • spec.strategy.type - アプリケーションの別のバージョンをデプロイしなければならないとします。デプロイのフェーズでは、サービス停止を伴わずにバージョンを更新しなければなりません。その場合、ローリング・アップデート戦略を使用できます。ローリング・アップデートでは、Kubernetes が一度に 1 つずつポッドを更新するため、サービスを停止せずにバージョンを更新できます。
  • spec.strategy.rollingUpdate.maxUnavailable - ローリング・アップデート時に使用不可にできるポッドの最大数。
  • spec.strategy.rollingUpdate.maxSurge - ローリング・アップデート時に超過して作成できるポッドの最大数。
  • spec.minReadySeconds - 新しく作成されたポッドで、コンテナーがクラッシュしないようになって準備ができ、利用可能とみなされるまでの最小時間を指定する整数値。省略可能です。
  • spec.revisionHistoryLimit - この整数値の属性を使用して、Kubernetes に対し、常に維持する古い ReplicaSet の数を明示的に指定できます。これは省略可能です。
  • spec.template.metadata.labels - デプロイメント仕様にラベルを追加します。
  • spec.selector - Kubernetes デプロイメント・コントローラーに対し、指定のラベルと一致するポッドだけをターゲットにするよう指示するオブジェクト。省略可能です。例えば、「app」ラベルまたは「deployer」ラベルが付けられたポッドだけをターゲットにする場合、このオブジェクトを使用してデプロイメント YAML を変更します。

上記のサンプルを見るとわかるように、Kubernetes リソースを宣言型で保守、制御するには YAML ファイルが実に役立ちます。 このことから、YAML は構成ファイルの事実上の標準とみなされつつあります。

次のステップ

学習を続けるには、このリンク先の Kubernetes ワークショップに用意されている資料にアクセスしてください。


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=1066318
ArticleTitle=YAML の基礎と Kubernetes 内でのその使用方法
publish-date=07252019