[和訳] HabitatとKubernetes — あのデモをいかにして作ったか #getchef #habitat #kubernetes
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿はHabitat and Kubernetes -- How We Made that Demo (2018/6/20) の和訳です。
ChefConfで私たちは、2018年のProduct Vision & Announcements (製品のビジョンとアナウンス)を発表しました。基調講演では皆さまに、Chef Automateをはじめ、Habitat、InSpec、そして新たにスタートした Chef WorkstationなどChefの最新製品のライブデモをご覧いただきました。今回は、それら各デモの内容を詳しく取り上げるシリーズの第一弾です。あなたの自動化を次の段階に導くためのインスピレーションをお届けすべく、Chefの最新にして最高のハンズオンデモをご紹介します。本日は、HabitatチームのSenior Software Development EngineerであるNell Shamrell-HarringtonがHabitat Kubernetes Operatorを使って、Google Kubernetes Engine (GKE)
へアプリのデプロイを開始するツアーにご案内します。それではご覧ください!
HabitatとKubernetesはピーナツバターとジャムのような関係です(訳注:ピーナツバターとジャムをサンドしたトーストは北米人の定番)。両者はそれぞれ独立してすばらしいものですが、組み合わせると、さらに魔法のように役立つものになります。ChefConfに参加するにあたって、HabitatチームはKubernetesとHabitatの統合がいかにすばらしいものかを自覚しており、基調講演にお越しいただいた皆さまにもぜひそのことをご理解いただきたいと思っています。基調講演を惜しくも聞き逃した人は、デモのプレゼンテーション動画をこちらからご覧ください。
元はChef社Customer Facingチームが作成したものから始まったHabitat National Parksのデモ(訳注:Habitatで全米の国立公園を地図にするアプリ)をご紹介します。このアプリは、JavaのアプリケーションのHabitatによるパッケージングに焦点を当てています(私たちのエンタープライズユーザの多くはJavaを多用しています)。またこのアプリは2つのHabitatサービスを実行しています。2つのサービスとは、Javaアプリ向けサービスと、このアプリが使用しているMongoDB データベース向けのサービスです。
では実際の手順を見ていきましょう!
デモを始めるための準備
デモ環境を用意するにあたって、まずGKEクラスタをGoogle Cloud上に作成しました。クラスタの起動後、Habitat Kubernetes Operatorをインストールする必要がありました。
Habitat Operatorをインスト―ルするもっとも簡単な方法は、Habitat Kubernetes Operatorのgithubリポジトリをクローンすることです:
$ git clone https://github.com/habitat-sh/habitat-operator
$ cd habitat-operator
このリポジトリには、Habitat Operatorをデプロイするためのいくつかのサンプルファイルもあります。
GKEでは、Role Based Access Control (RBAC) 権限を使用する必要があります。これによりGKEクラスタ内のリソースを管理する許可をHabitat Operatorに与えます。Habitat OperatorをGKEにデプロイするために、examples/rbacにある設定ファイルを使用しました。
$ ls examples/rbac/
README.md
habitat-operator.yml
minikube.yml
rbac.yml
そして次のコマンドでRBACを作成しました:
$ kubectl apply -f examples/rbac/rbac.yml
次にexamples/rbac/habitat-operator.ymlにあるファイルを使用して、Habitat Operatorをクラウドにデプロイしました。このファイルがDocker HubからHabitat OperatorのDockerコンテナイメージを取得し、それをGKEクラスタにデプロイします。
$ kubectl apply -f examples/rbac/habitat-operator.yml
Habitat Updaterもデプロイする必要がありました。これはHabitat Builder用の更新パッケージがあるかを監視し、自動でパッケージをプルして更新するためのものです(このデモにおける魔法の部分です)。
$ git clone git@github.com:habitat-sh/habitat-updater.git
$ cd habitat-updater
$ kubectl apply -f kubernetes/rbac/rbac.yml
$ kubectl apply -f kubernetes/rbac/updater.yml
この時点で私たちのGKEクラスタは次のようになっていました:
これでNational Parksアプリをクラスタにデプロイする準備が整いました!
アプリをデプロイする
このデモの目的を鑑み、私たち独自のリポジトリにNational Parksプロジェクトをフォークすることにしました。
そしてhabitat/operatorディレクトリ内の必要なKubernetes設定ファイルに追加しました。
$ git clone git@github.com:habitat-sh/national-parks.git
$ cd national-parks
$ ls habitat-operator
README.md
gke-service.yml
habitat.yml
gke-service.ymlファイルは外部ロードバランサ用の設定を含むので、次のコマンドでロードバランサを作成しました:
$ kubectl apply -f habitat-operator/gke-service.yml
そして実際のアプリケーションをhabitat.ymlでデプロイするときがきました。このファイルがMongo DBコンテナイメージおよびNational ParksアプリのコンテナイメージをDocker Hubからプルし、それらのイメージからコンテナを作成しました。
$ kubectl apply -f habitat-operator/habitat.yml
この時、私たちのGKEクラスタは次のようになっていました:
そしてGKEサービスのIPアドレスにアクセスすることでアプリの実行を確認することができました:
つまりこの時点で、National Parksアプリの新規デプロイの作成を簡単にデモンストレーションすることができました。しかし、真に魔法のようなことは、アプリに変更を行うと、それが全パイプラインをシームレスに流れていく様子です。
今回のデモに先立って、National Parksアプリにいくつかのスタイルの変更を作成し退避しておきました(プロジェクタのスクリーンにきれいに映っていたと思います)。
デモの間に、それらのファイルを退避から戻しておきました。
そしてこれらの変更をnational-parksのgithubレポジトリにコミットしました。
$ git add .
$ git commit -m 'new styles'
$ git push origin master
私たちはこのgithubリポジトリをパブリックHabitat Builderに接続しておきました。これにより、masterブランチにプッシュした変更はすべて、Habitat Builderの新規ビルドを開始します。
私たちはまた、Habitat BuilderリポジトリをDocker Hubにも接続しておきました。新規ビルドが完了次第、すぐにアプリの新しいDockerコンテナイメージをDocker Hubにプッシュします。
ほかにやるべきことは、Habitat BuilderのStableチャンネルに新規ビルドをプロモートすることのみです:
さあ、 Habitat Updaterが力を発揮する時です。Habitat Updaterの目的は、クラスタ内でデプロイしたHabitatパッケージの新しい安定版のために、Habitat Builderに問い合わせることです。60秒ごとにHabitat UpdaterはHabitat Builderに問い合わせ、もし更新パッケージがあれば、Docker Hubからそのパッケージに必要なDockerコンテナイメージをプルして、そのイメージを実行しているコンテナを再構築します。
そしてロードバランサのIPアドレスに再アクセスしさえすれば、変更が行われたことが確認できます!
このデモの目的はHabitatとKubernetesの魔法をご紹介することでした。ご覧になった方々の反応から察するに、その目的は大いに達成できたようです!
謝辞
このデモは私が代表して紹介させていただきましたが、このデモを作成した功績は、Habitatの中核を担うチームのメンバーであるFletcher NicholsとElliot Davisの2人とも共有したいと思います。1つのデモを作るには多くの人の協力が必要です。このチームと共に仕事ができたことは本当に幸運でした。
Habitatを始めよう
- 数分でHabitatをダウンロードしセットアップする
- クラウドネイティブな方法でHabitatがいかにして、あなたのすべてのレガシーアプリおよび新しいアプリの構築、デプロイ、管理のお手伝いをできるかを学ぶためのトピックはこちらからご覧ください。
- HabitatのコミュニティSlackに参加する