プロジェクト推進室エンジニアで「Be Docker Day」を開催しました

こんにちは。最近Railsに浮気しているiOSエンジニアの飯田@iida-hayatoです。

先日プロジェクト推進室(以下PJD)*1エンジニアの新しい取り組みとして「Be Docker Day」を開催しましたので紹介させて頂きます。

f:id:tei1988:20170906101457j:plain

Be Docker Dayとは

Be Professional Dayに触発されて「とにかくシステムをDocker化する日」を開催しました。

  • 一日業務を忘れてDockerに取り組む
  • 通称「Dockerになる日」

背景

  • プロジェクト推進室エンジニアはそれぞれ複数のシステムを管理している状態
    • インフラ運用を共通化して引継ぎやすくしたい
  • 管理している中には物理サーバで動いているようなレガシーなシステムもある
    • とりあえず仮想化したい
    • その前にまずはインフラアズコードを実現したい
  • Docker化は優先度が低くなりがち
    • すぐに改善の影響が出ることでも無い
    • まとまった時間が無いと作業できない
    • インフラエンジニアでないととっつきにくい

以上のような諸々の理由でDocker化したいけれど中々時間が取れないですねーという雑談から出た

それならみんなで一緒に一日かけてやればいいんじゃね

という案を元にいろいろ業務調整して実現しました。

目標

  • メンバーが他のプロジェクトへ入った際に、既存システムのDocker化を議論、推進できるようになる
    • Docker化のメリット、デメリットを理解する
    • 作業のボリューム感をつかんで見積もりができるようになる

実施するにあたって何も目標が無いのも微妙なので、上記のような目標を立てて実施することにしました。

ゴール、マイルストーン

  • Docker,Kubernetesの基礎知識
  • 現行システムのKubernetesの設計をする
  • 現行システムのDockerImageを作成する
  • 作成したDockerImageからGCPでシステムを立ち上げてみる
  • Kubernetesで運用のシミュレーションをしてみる
    • インスタインスの追加、削除、Imageの更新

当日にシステム入れ替えまではとても無理なので、目標達成のための糸口を作るという方針です。

また、お互い仕事の机もすぐ近くなので、マイルストーンが最後まで終わらなくても持ち帰って後でフォローアップしていきましょう、という具合のゆるさにしました。

当日やらないこと

  • 実際に環境への適用

プロジェクト推進室のシステムは、各プロジェクトによって業務の繁忙期が違うので 実際の本番環境の入れ替えは個別に調整してやりましょうという方針で進めました。

一日の流れ

Docker,Kubernetesの基礎知識

実際にKubernetesを使ってシステムを構築しているメンバーから説明 f:id:tei1988:20170904141420j:plain 写真は、Dockerの仮想化の仕組みから、Kubernetesの仕組みまで、一通り説明してもらっている様子です。

現行システムのKubernetesの設計をする

実際に稼働しているシステムをどう再設計するかを議論しながら決めていきました。 f:id:tei1988:20170904141448j:plain 写真は、Container毎に複数のPodを作る場合や、複数のContainerを1つのPodにまとめる場合、GCPのCloudSQLを使う場合などの議論している様子です。

現行システムのDockerImageを作成する

設計方針が固まったので各自もくもくと作業。

当日は設計の議論が長引いてしまったので、今回はここで終了しました。

続きは持ち帰ってPull Requestや自席で相談しながら進めています。

効果、課題など

集中して時間を取ることで一気にキャッチアップすることが出来ました。

また、議論を通して自分の担当していないシステムのインフラ構成も知ること出来たので、Pull Requestでレビューできる範囲や深さが大きく改善しました。

本番への適用は徐々に進めていく予定ですが、現実的に実現可能な目処が出来て良かったと思います。

さいごに

株式会社 Speee は新しい技術を使って世の中を変えたい エンジニア やSpeeeKaigiのようなイベントを企画運営するエンジニア組織推進室メンバーを募集しております。ぜひ遊びに来てください。

(記事 @iida-hayato / 写真 @Tei1988)

*1:プロジェクト推進室:Speee内で直接業務に紐付かない全社的なシステム(勤怠、日報、経理支援等)の開発/運用を担っている部署です。