前書き
CoreOSは、Dockerコンテナーとサービスディスカバリーを利用して、クラスター環境を迅速にスピンアップすることに重点を置いたLinuxディストリビューションです。 CoreOSを初めて使用する場合は、このGetting Started with CoreOSのチュートリアルシリーズを確認してください。
ただし、Dockerイメージは、Dockerホスト上で非常に多くのディスク容量を占有する可能性があります。 ベースイメージのサイズは数百MBで、カスタムイメージは1 GBに簡単に到達できます。 アプリ用の新しいDockerイメージのリリースが多数ある場合、サーバーストレージに簡単に蓄積できます。古い画像や未使用の画像を時々消去しないと、サーバーのディスク容量が不足する可能性があります。
CloudSlangは、ワークフローまたは略してフローを使用してプロセスを簡単に自動化できるオープンソースのオーケストレーションソリューションです。 フローには、タスクとナビゲーションロジックのリストが含まれます。 タスクは、Pythonスクリプト、Javaメソッド、または別のフローを実行するアクションを含む操作を呼び出すことができます。 CloudSlang言語では、テキストで再利用可能な方法でフローを定義できます。また、既存のコンテンツ(Docker、OpenStack、およびユーティリティ)を使用して、デプロイされたアプリケーションを管理するか、独自のカスタムフローを作成できます。
このチュートリアルでは、CloudSlangを使用してCoreOSクラスターにデプロイされた各マシンのDocker環境をクリーンアップします。 既存のコンテンツを使用するため、CloudSlangファイルを編集する必要はありません。
前提条件
開始する前に、次のものが必要です。
-
CloudSlangサーバーとなるa sudo non-root userを含むUbuntu14.04ドロップレット。
-
CloudSlangサーバー上のJava (version 7 or later) installed。 JREのみをインストールし、JDKをインストールする必要はありません。
-
3つのCoreOSマシンのクラスター。 まだお持ちでない場合は、this tutorialに従って設定できます。
[[step-1 -—- installing-unzip]] ==ステップ1—unzipのインストール
このステップでは、CloudSlangサーバーにunzip
をインストールします。
まず、パッケージリストが最新であることを確認します。
sudo apt-get update
次に、解凍をインストールします。
sudo apt-get install unzip
[[step-2 -—- downloading-cloudslang]] ==ステップ2—CloudSlangのダウンロード
このセクションでは、CloudSlang CLIツールと利用可能なコンテンツ(定義済みの操作とフロー)をダウンロードします。 CloudSlang CLIは、フローの実行に使用できるコマンドラインインターフェイスツールです。
まず、CloudSlang CLIアーカイブをダウンロードします。
wget https://github.com/CloudSlang/cloud-slang/releases/download/cloudslang-0.7.29/cslang-cli-with-content.zip
アーカイブを解凍します。
unzip cslang-cli-with-content.zip
これにより、cslang
ディレクトリが作成されます。 そのディレクトリの内容をリストする場合、
ls ~/cslang
次の3つのディレクトリがあります。
-
python-lib
。外部Pythonライブラリに使用されます。 -
cslang
。CloudSlangCLIファイルが含まれています。cslang/bin
フォルダーには、CLIの起動に使用されるcslang
という名前のファイルが含まれています。cslang/lib
には、アプリケーションに必要な依存関係が含まれています。 -
content
。既製のCloudSlangコンテンツが含まれています。 実行するフローはcontent/io/cloudslang/coreos
にあり、cluster_docker_images_maintenance.sl
と呼ばれます。 このフローは、クラスター内のすべてのマシンで繰り返され、未使用のDockerイメージを削除します。
[[step-3 -—- adding-the-private-key]] ==ステップ3—秘密鍵の追加
CloudSlangには、CoreOSクラスターへのSSHキーアクセスが必要です。 この手順では、CloudSlangサーバーで新しいキーペアを作成し、公開キーをCoreOSクラスターに追加することでこれを追加します。
まず、this tutorialの手順1と2に従って、パスフレーズなしでキーペアを作成します。 キーペアを取得したら、CoreOSクラスター内の各マシンに公開キーを追加する必要があります。
まず、CloudSlangサーバーで公開キーを取得します。
cat ~/.ssh/id_rsa.pub
ssh-rsa
で始まり、username@hostname
で終わる長い出力が表示されます。 これをコピーして、次のコマンドで使用します。
CoreOSサーバーの1つ(デフォルトのユーザー名はcore
)にSSHで接続し、次のコマンドを実行して公開鍵を追加します。
echo "your_public_key" >> ~/.ssh/authorized_keys
CoreOSクラスター内のサーバーごとにこれを行う必要があります。
[[step-4 -—- running-the-flow]] ==ステップ4—フローの実行
このセクションでは、フローを実行し、その動作を確認します。
フローを実行するには、CloudSlangサーバーで、最初に/cslang/bin
ディレクトリに移動します。
cd ~/cslang/cslang/bin/
CLIを起動するには、cslang
という実行可能ファイルを実行します。
./cslang
しばらくすると、CloudSlangのようこそ画面が表示されます。
0.7.26-SNAPSHOT
Welcome to CloudSlang. For assistance type help.
CLIで次のコマンドを入力し、your_coreos_server_ip
をクラスター内のCoreOSサーバーの1つのIPアドレスに置き換えます。
custom_prefix(cslang>)
run --f ../../content/io/cloudslang/coreos/cluster_docker_images_maintenance.sl --i coreos_host=your_coreos_server_ip,coreos_username=core,private_key_file=~/.ssh/id_rsa --cp ../../content/
run
コマンドはフローをトリガーします。 --f
は、フローへのパスを指定します。 --i
は、フロー入力(CoreOSホストとユーザー名、および関連する秘密SSHキー)を指定します。 --cp
は、フローが他の操作やフローに依存する場合のクラスパスを指定します。 このフローにはさまざまな依存関係があるため、親のcontent
フォルダーを指定できます。スキャンは再帰的であるため、サブディレクトリもスキャンされます。
制御ロジックは、最初にクラスターからマシンのIPアドレスを取得してから、マシンを反復処理し、未使用のイメージをクリアします。 まず、すべてのイメージを取得し、実行中/停止中のコンテナーをチェックして未使用のイメージのみを残します。 次に、未使用のイメージを削除します。 最後に、ぶら下がり画像に対しても同じことを行います。
フローの実行中、CLIは実行されるタスク名を表示します。 フローが終了すると、CLIはフロー出力やフロー結果などの有用な情報を出力します。
この場合、フローの結果はSUCCESS(クラスターで未使用のDockerイメージがクリアされたことを意味します)またはFAILURE(問題が発生したことを意味します)のいずれかになります。 このフローには、number_of_deleted_images_per_host
という1つの出力があります。これは、クラスター内のすべてのホストで削除されたイメージの数です。
すべてがうまくいった場合、次のような出力が表示されるはずです。
...
Flow : cluster_docker_images_maintenance finished with result : SUCCESS
Execution id: 101600001, duration: 0:02:06.180
実行の詳細が必要な場合は、CLIによってbin
フォルダーに作成されたexecution.log
ファイルを調べてください。
結論
これで、CoreOSクラスター内のすべての未使用のDockerイメージが削除されました!
このチュートリアルでは、UbuntuマシンでCloudSlangを実行する方法と、CloudSlang CLIを使用してフローをトリガーする方法を見てきました。 また、既製のワークフローを使用してDocker環境をクリーンアップしました。
Copyright 2015年6月9日、Hewlett-Packard Development Company、L.P。 許可を得て複製。