サーバー構築の自動化で利用される技術、自動化ツールとして「Kickstart」「Puppet」を紹介し、構築から運用まで、システムライフサイクル全体にわたる運用管理の自動化についても解説する連載。
サーバー構築・運用の担当に配属された新人R子さん。今日から上司であるK男さんの下で仕事することになりました。
R子 今日から担当に配属されたR子と申します。よろしくお願いします。
K男 こちらこそよろしく。ところで、R子さんは今までサーバー構築の経験はあるのかな?
R子 入社時の研修でちょっとだけ……。
K男 R子さんも明日からばりばり構築してもらうよ。1日最低10台がノルマね。
R子 えぇ!? 不安だなぁ…… ちゃんと家に帰れます? うぇ〜ん。
さて、R子さんは一体どうなるのでしょうか。1日10台がノルマといわれていますが、サーバー構成が同じ場合、一度構築してしまえば似たような単純作業の繰り返しになります。この単純作業を自動化することにより、効率的にサーバーを構築できるようになります。自動化できれば、10台であろうが、100台であろうが怖くありません。
本連載では、こんなときに役立つサーバー構築の自動化技術について紹介していきます。
サーバー構築の自動化が、DevOpsやクラウドによる大規模システムの分野で注目を浴びています。サーバー構築の自動化といっても、簡単にできるわけではなく、自動化するレイヤーによってさまざまなツールが必要です。
またサーバー構築を自動化した場合でも、運用フェーズに環境の変更やアプリケーションのパッチインストール、バージョンアップが必要な場合があり、構築して終わりというわけにはいきません。
本連載では、サーバー構築の自動化で利用される技術を俯瞰しつつ、サーバー構築の自動化を実現するツールとして「Kickstart」「Puppet」を紹介します。加えて、サーバー構築から運用まで、システムのライフサイクル全体にわたる運用管理の自動化、省力化についても紹介します。
昨今「DevOps」という言葉を耳にすることが多くなってきました。「DevOps」とは開発(Development)と運用(Operations)を組み合わせた造語で、開発の担当者と運用の担当者が連携して、より柔軟で迅速な対応を実現するためのシステム開発手法です。
DevOpsでは、立場や役割の違いから衝突しがちな開発と運用の双方が協力して同じゴールを目指せる環境を整えることに重きを置き、実現に必要なツールやカルチャーが重要だと考えています。
ところで、開発と運用が衝突してしまうのは、なぜでしょうか。原因の1つに、サービスインしているシステムの場合、一般的にどんなにわずかな作業でも決まったルールにのっとって運用側に依頼を出して、運用側の人員を割いてもらって作業してもらわなければならないことがあります。
そこで問題を解決する手段として、自動化できる作業は自動化してしまおうという考えが出てきます。自動化することで人手不足を解消し、作業者のスキルに依存する問題(作業品質など)の解決を容易にします。さらに人員の問題だけではなくヒューマンエラーからも解放され、限られたリソースの有効活用も実現します。
限られた人員で無理をして大量の依頼を消化しようとすれば、疲れや集中力の欠如によって操作ミスを犯したり、思い込みによる誤りを犯したりしてしまいがちです。さらに人間は単調な繰り返し作業、“似ているけどちょっとだけ違う”作業を繰り返すのがとても苦手です。
自動化すると、作業するのは機械ですから人間ならミスしがちな作業でもミスをすることなく行えます。また処理完了までの待ち時間で作業者が何もせず拘束されるというような時間の無駄もなくなります。
このような特徴から、自動化はクラウドシステムに代表される大量サーバーの構築、運用の効率化において特に力を発揮しており、注目されています。
それでは実際にサーバー構築をどのように自動化していくのか見ていきましょう。本連載では、CentOSを例に紹介しますが、他のRed Hat系OSでもそのまま利用できます。また、Red Hat系以外のOSでも基本的な考え方は同じですので、参考にしてください。
環境構築を自動化するツールがいろいろありますが、今回は後ほど紹介する「Kickstart」と「Puppet」というツールを利用して自動化を実現します。KickstartとPuppetを利用したときのイメージは図のようになります。
サーバーの構築には、大きく分けて2つのステップがあります。1つはOSそのもののインストール作業です。もう1つはシステムに必要なミドルウェアやアプリケーションのインストールや設定などの作業です。
まずはOSのインストールから考えてみましょう。
皆さんが普段OSをインストールする時はDVDなどのメディアからブートして、GUI画面で必要な情報を入力してインストールというケースが多いと思います。この「DVDなどのメディアからブートして、GUI画面で必要な情報を入力してインストール」という一連の流れを自動化する場合は、「ネットワークブートを利用してOSのインストーラーを起動し、Kickstartによって必要な情報を入力する」ことで自動化できます。
次に、システムに必要なミドルウェアやアプリケーションのインストールや設定を考えてみましょう。
皆さんは、これらの作業を実施する場合、OSのインストールが終わった後に手順書などを参照しながら人手で作業を実施していると思います。このような作業はPuppetを利用すると自動化できます。
今回のネットワークブートを利用し、Kickstartで自動構築していく処理は図3の上から順に流れます。
それでは、インストールするために必要な処理やサーバーを、上から順番に詳しく見てみましょう。
一般的なx86アーキテクチャのPCやサーバー製品でネットワークブートする場合によく使われるのは、インテル社が策定したPreboot Execution Environment(以下「PXE」)です。PXEブートする際にDHCPによりIPアドレスを取得するため、DHCPサーバーが必要になります。
通常のOSの起動では、ブートローダーとしてGRUBがディスクから読み込まれます。PXEブートでは、PXEブート用のブートローダーをネットワーク経由でTFTPと呼ばれるプロトコルで読み込みます。そのときに、次のステップで必要となるKickstartファイルのURLやOSリソース(CD/DVD)のURLなど、インストールに必要な情報も一緒に読み込みます。
通常、OSをインストールする際にGUI画面が立ち上がり、担当者がGUIに必要情報を入力しながらインストールを進めていきますが、Kickstartという仕組みを利用することにより、OSのインストールを自動化することができます。Kickstartを利用すれば、Kickstartの設定ファイルにインストールの設定を記述するだけで、OSのインストールを自動化できます。
なおインストーラーが起動した際、DHCPサーバーから再度IPアドレスを取得することに注意してください。【1】の処理ではBIOS(PXE)が取得していましたが、ここではインストーラーのOSが取得しています。
KickstartではOSインストール完了後、あらかじめ用意したスクリプトを実行する事ができます。このスクリプトの中でOSやミドルウェアを設定することも可能です。ただし、全ての操作をシェルスクリプトで記述する必要があり、全てを記述するのはかなり大変です。
ここで、今回紹介するPuppetやChefのようなサーバー構築を自動化するツールを用いることで、サーバー個別の複雑な設定や、Kickstartの範疇外であるアプリケーション設定など、シェルスクリプトだけで実現するのは難しい高度な作業も自動化できます。必要に応じてOSリソースをダウンロードしてインストールすることもできます。
サーバー構築を自動化するツールは、クライアントサーバーモデルで利用しますが、スタンドアロンでも利用できます。図3では、Puppetをクライアント/サーバーモデルで利用した例を紹介しています。
ここまで紹介しました、さまざまな仕組みを融合させることで「サーバー構築の自動化」が実現できます。必要なサーバーの種類が多いので、以下にまとめます。
ここで紹介した自動構築のために必要なサーバーを構築する方法については、次回以降に詳しく説明します。
Copyright © ITmedia, Inc. All Rights Reserved.