BOSHの紹介

GoogleのBorgをルーツとするBOSHというOSSを簡単に紹介します。 日本語の情報が少ないですが、システムの構築と運用をいい感じするためのよくできたOSSです。

BOSHとは

公式サイトには『分散システムのリリースエンジニアリング・構築・ライフサイクル管理をするもの』と紹介されています。

抽象的な表現でピンとこないでしょうか。 次の項目で具体的にどんなことができるか説明します。

主な特徴

BOSHは分散システムの初期構築を自動化するだけでなく、その後の運用にも対応しているという特徴があります。 Kubernetesをご存知の方にBOSHをひとことで説明するなら、Kubernetesはコンテナを管理するのに対し、BOSHはVMを管理するものと言えるでしょう。Kubernetesとできることも似ています。

  • Day1運用に対応(Chef/Puppet/Dockerなどはここがメイン)

    • 分散システムの構築の自動化
  • Day2運用に対応(BOSH/Kubernetesはここまで対応)

    • 分散システムのアップデート・構成変更・廃棄の自動化
    • ローリングアップデート・カナリアリリース
    • スケールアップ・スケールアウト
    • VMやプロセスの死活監視・自動復旧
    • バックアップ・リストア
  • マルチクラウドに対応

    • AWS
    • GCP
    • Microsoft Azure
    • OpenStack
    • SoftLayer
    • VirtualBox
    • VMWare vCloud
    • VMWare vSphere

参考:https://bosh.io/docs/

BOSHが目指すこと

BOSHを使うと分散システムをより簡単にバージョン管理・パッケージ化・構築できます。 この背景にある『現代のリリースエンジニアリングにおける4つの原則』(公式サイトを拙訳)を紹介します。

  • 識別可能性
    • ソフトウェアを構成するソースコード・バイナリ・設定などをパッケージ化・バージョン管理できる
    • ソフトウェアだけでなくOSもバージョン管理できる
    • これにより特定のリリースを追跡できる
  • 再現性
    • 特定のリリースを構築(デプロイ)できる
    • 例えば、構築したタイミングの最新OS・パッケージ・ライブラリが導入され、構築したタイミングによりバージョンが異なるのはNG
    • ソフトウェアだけでなくOS・永続データ・システム構成を管理できる
    • これにより、開発環境でテストしたシステムを本番環境で再現できるといった運用の安定性を確保できる
  • 一貫性
    • システムをパッケージ化・バージョン管理・構築するための統一された枠組みを提供できる
    • これにより構築されたシステムに加えられた変更を追跡できる
  • 機敏性
    • 自動化された方法でソフトウェアリリースを作成できる
    • 簡単なコマンドで複雑なシステムの構築・変更ができる
    • これにより継続的インテグレーションと統合できる

参考:https://bosh.io/docs/problems/

BOSHによる分散システム構築のワークフロー

ここではBOSH自身とBOSHが制御する分散システムを構築する流れを説明します。BOSH CLIを利用して自動構築できます。

bosh-deploy

上図とBOSH CLIの関係は次の通りです。

  • PCからの各矢印はBOSH CLIの1コマンド(1手順)に相当
  • 上図では省略しているが、CLIの引数にはシステムの構築に必要な設定情報を指定
  • 設定情報はYAML形式のファイルに記載可能
  • CLIの詳細はhttps://bosh.io/docs/cli-v2/を参照

それではステップバイステップで構築の流れ説明します。

  1. BOSH自身の構築 bosh create-envコマンドにより、BOSH自身を作成します。設定内容にはBOSHをデプロイするためのIaaS情報が含まれます。
  2. IaaSの設定 bosh update-cloud-configコマンドにより、Cloud Configと呼ばれる分散システムのIaaS固有情報を設定します。主な設定内容には利用するAZ/NW/VM/DISKの仕様が含まれます。それぞれの仕様に名前をつけておき、その名前を後述するDeployment Manifestで利用します。これによりDeployment ManifestはIaaS非依存で設定できます。筆者が利用したAWSでは、インスタンスタイプ・セキュリティグループ・キーペア・IAMインスタンスプロファイル・スポットインスタンス・所属するELBなどの細かな仕様を設定できます。
  3. OSイメージの送信 bosh upload-stemcellコマンドにより、Stemcellと呼ばれる分散システムのOSイメージをBOSHへ送信します。Cloud Foundry BOSHチームにより公式にメンテナンスされているものを利用できます。アップロード方法は2つあり、OSイメージの実体を送信する方法と、IaaSの公開先を送信する方法があります。公式OSイメージのIaaS公開先を送信するのが手軽です。
  4. 分散システムの構築 bosh deployコマンドにより、Deployment Manifestと呼ばれる分散システムの構成情報の宣言を引き渡します。BOSHはこれに基づいて分散システムを構築します。Deployment Manifestの主な内容には利用するStemcellとRelease・VMの構成・アップデート方法があります。VMの構成にはAZ/NW/VM/DISKの仕様(Cloud Configの名前)やVMの台数・配置するJobなどが含まれます。SWはReleaseと呼ばれる単位で配布します。すでに公開されているReleaseを利用する場合は、構築時に自動でダウンロードおよびコンパイルされます。