Skip to content

Instantly share code, notes, and snippets.

@ozzozz
Last active March 16, 2018 12:30
Show Gist options
  • Save ozzozz/d85bf4a47534b0ad41050e16c1c894c5 to your computer and use it in GitHub Desktop.
Save ozzozz/d85bf4a47534b0ad41050e16c1c894c5 to your computer and use it in GitHub Desktop.
docker-cf-jumpboxについて

docker-cf-jumpboxについて

Cloud Foundry Advent Calendar 2017の2日目の記事です。

はじめに、ポエムを少々

こんにちは。

私も、会社で私が所属しているチームも、貧乏です。会社自体はリッチかもしれませんが。

そんな中、日本Cloud Foundryグループ会長というパッと見立派な肩書をいただき、オープンソースソフトウェアとしてのCloud Foundryやこれを活用した様々なプロダクトやサービスの日本国内での技術紹介や普及を担うことになっております。

Cloud Foundryは、クラウドアプリケーションプラットフォームとして技術面ではすでに成熟の域に達した感があり、最近は欧米を中心に広く普及が進んでおります。しかし、クラウドをうまく活用するプラクティスは日々新たなものが出てきていますし、様々なユースケースで揉まれてもいることから、そういった知見をどんどん盛り込みつつ、Cloud Foundry自体も日々進化を続けています。

私は肩書に負けたくない。Cloud Foundryに関し、なるべく新鮮な情報を皆さまにお届けしたい。その一心で、なるべく最新のCloud Foundryをデプロイし、新しく実装された機能を試用し続けなければならないと思っております。

一方、私の手元には、AWSやらGCPやらAzureやら何やらをふんだんに使えるアカウントは残念ながらありません。しかし幸い、その代わりに会社から自由に使っていいって言ってくれている(というか、ゴミ扱いされて使うあてのない)ベアメタルマシンが大小合わせて計約50台ほどございます。また、インターネットに比較的自由にアクセス可能な回線、ルーターやスイッチなどのネットワーク機器(安物ですが)も幸い確保されています。 というわけで、そいつらを使ってOpenStackクラスタを自前で構築し、オープンソースなCloud Foundryの技術検証に使っております。

その技術検証の成果の一つが、このへんのスライドだったりします。

ただ、毎年ゴールデンウィークの電気設備定期点検による停電対応がめちゃくちゃ大変で、ディスク故障とかCMOS電池切れでブートしないマシンが毎回数台・・・(以下、愚痴につき略)

よろしい、ではBOSHでCloud Foundryをデプロイだ

OpenStack上にCloud Foundryをデプロイするための準備手順において、まず大きな関門となるのが、Cloud FoundryをデプロイするためのツールであるBOSHのデプロイです。

ふむ。よろしい、ではOpenStackにBOSHをデプロイだ

BOSHのデプロイにあたっては、少なくとも

  1. 仮想プライベートネットワーク・サブネット・仮想ルータの作成
  2. SSH鍵ペアの登録
  3. セキュリティグループ設定
  4. Floating IPアドレスの確保

というOpenStack IaaS上の事前準備手順が必要です。 これを、OpenStack上にCLIまたはダッシュボードGUIを使って手動でチクチクとやることもできますが、そこは自動化大好きCloud Foundryコミュニティ、Terraformを使用したInfrastructure as Codeのテンプレートを用意してくれています。とは言え、手元の環境にはTerraformに加えてcurl、wget、gitくらいはインストールしてないといけなさそうですね。

ふむ。よろしい、Terraformを手元環境にインストールだ

TerraformはGo言語で書かれており、様々なOS向けにスタティックリンクされたバイナリが配布されているので、まあインストールは簡単です。

・・・ではOpenStackにBOSHをデプロイだ

BOSHのデプロイにはBOSH CLI v2を使います。 BOSH CLI v2もGo言語で書かれており、様々なOS向けにスタティックリンクされたバイナリが配布されているので、まあインストールは簡単です。 ただし、BOSH CLI v2を使ってBOSHをデプロイするにあたっては、インストールする環境に依存して、Ruby周りをインストールするための各種パッケージもインストールする必要があります

これはどういうことかというと、BOSHというVMのデプロイは、BOSH CLI v2からBOSH CPIというものを介してIaaS APIを叩くことによって行われるのですが、このBOSH CPIがRubyによって実装されているからなのです。

さて、そんなこんなで、BOSHのデプロイにも、なんとCloud Foundryのデプロイにも成功しました。 そんなこんながめちゃくちゃいろいろあるというのはさておき・・・

よし、Cloud Foundry使うぞ

オープンソース版のCloud Foundryには、素敵なGUIなどは標準装備されていません。APIしかありません。しかたがない、ここはcurlでがんばるか・・・ というのは冗談で、ちゃんとCF CLIというものがあります。

CF CLIもご多分に漏れずGo言語で実装されており、様々なOS向けにスタティックリンクされたバイナリが配布されているので、まあインストールは簡単です。

・・・結局、手元環境にもっさりと色々インストールさせられたではないか!

そうなんですよねえ。 Cloud Foundryの構築・運用・利用にはいろいろ要るのです。

Terraform、BOSH CLI v2、CF CLIくらいなら、バイナリをダウンロードして解凍して/usr/local/binに置くくらいなのでまあよいのですが、問題はRuby周りのインストールのためのパッケージも必要だったりするところなのです。 Linux入りのVMとかだといろんなパッケージ入れて少々環境が汚れたとしても最悪VMごと作り直せば済む話ですが、我が愛しのMacとかを手元作業環境にした日にゃ、CFまで使えるようになってヤッターと喜んでふと振り返ると大変なことになっていたりするわけです。

そこでDockerですよ

そんなこともあろうかと、作っておきましたよ。 https://github.com/ozzozz/docker-cf-jumpbox https://hub.docker.com/r/ozzozz/cf-jumpbox/

使い方

DockerホストとかDocker for MacとかDocker for Windowsとかお持ちでしたら、あとはとっても簡単。

$ docker run -it --rm ozzozz/cf-jumpbox
root@2823fbf5e687:/work#

最近だと、「とりあえずサンプルのdeployment manifestをくれ」とおっしゃる皆さまにお応えして、bosh-deploymentやらcf-deploymentやらのリポジトリも登場してきており、こういうのをgit cloneしてきたうえで

$ docker run -it --rm -v $PWD:/work ozzozz/cf-jumpbox

などとすると、さらにオツだったりするわけです。

このDockerイメージ、なんか他にもいっぱい入ってるじゃん

はい。ついでなのでいろいろと放り込んでおきました。

  • Cloud Foundryにおける認証サーバであるUAAクライアントCLIである uaac
  • 素敵なCIツール Concourse のCLIである fly
  • Concourseからも使えたりする秘密情報管理ツールであるVault
  • BOSHやらCloud Foundryが使うRDBをBOSHからのデプロイの対象外とした場合に、RDBに論理DB作ったりユーザ作ったり権限付与したり、場合によってはテーブル覗いてみたりバックアップやリストアしたりするのに使えるかもしれない、MOONGIFTさんで最近紹介された usql
  • BOSHやらCloud Foundryが使うblobstoreをBOSHからのデプロイの対象外とするが、貧乏なのでAmazonS3とか使えない我々の強い味方であるMinioCLI mc
  • これについては後日改めてたっぷり語りたい、我らが@yudai氏がお送りする名作 gotty

というわけで、お楽しみください。

めでたしめでたし。おしまい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment