システム管理者メモ:テンプレート-クラウドへの移行の最初のステップ

クラウドに移行しますが、どこから始めればいいのかわかりませんか? この重要な一歩を踏み出す準備はできていますか、それとも仮想環境への移行を考えていますか?







「Windows、RHEL、Suseのライセンスを既に購入している場合はどうすればよいでしょうか?」または「クラウドから提供したい機能を効果的にテストする方法は?」



独自のオペレーティングシステムを個別にインストールし、それらから参照サーバー構成からテンプレートを準備する必要があります



テンプレートの準備の利点



  1. 最初はクイックスタートです。 無人インストールサーバーまたは中央構成管理システムを使用できますが、テンプレートからサーバーをインストールする方がはるかに高速です。
  2. 第二に、テンプレートは安定した制御された構成を提供します。 新しい機能をデバッグまたはテストするには、変更のないサーバー構成とソフトウェアバージョンが非常に役立ちます。 これは、独自のソフトウェアの積極的な開発が進行中のプロジェクトに特に役立ちます。
  3. 第三に、テンプレートを使用すると、必要な数の同じタイプの新しいサーバーを起動するだけで、迅速にスケーリングできます。
  4. 第4に、物理サーバーをクラウド環境またはその他の仮想環境に移動するプロセスでテンプレートがよく使用されます。




最初のLinuxテンプレートを作成する



以下は、Linuxテンプレート、自動パスワード生成、OSのロード時のコンソールへの出力、およびクラウドインフラストラクチャに新しい仮想サーバーを展開する際に他の自動アクションを進める方法です。 Windowsソリューションについては、もし興味があれば、後で説明します。



たとえば、当社のクラウド(CROC)が使用されていますが、メカニズムはすべてのAmazon互換クラウドで機能します。



1.独自のディスクからオペレーティングシステムをインストールします。



必要なLinuxディストリビューションをインストールする前に、ファイルストレージにインストールディスクのisoイメージをダウンロードする必要があります。 これを行うには、特別なc2-s3curlスクリプト(http://storage.cloud.croc.ru/tools/c2-s3curl)を使用します。これは、S3互換ストレージで基本的なファイル操作を実行するように設計されています。



root@c-jenkins:~# c2-s3curl --put my-bucket/rhel-server-6.1-x86_64-dvd.iso rhel-server-6.1-x86_64-dvd.iso

Uploading object: my-bucket/rhel-server-6.1-x86_64-dvd.iso

######################################################################## 100.0%

OK








ファイルストレージにロードされたRedHat Enterprise Linux 6.1ディストリビューションイメージの例を使用して、インストールプロセスを示します。 isoファイルをダウンロードしたら、インストールに使用するディスクイメージを作成する必要があります。







新しい仮想サーバーのインストールは、インストールディスクのイメージとシステムディスクのサイズの選択、および仮想サーバーとネットワークのパラメーターの選択という2つの手順で構成されます。 最初のステップでは、新しいインスタンスを作成することを選択します。







2番目のステップでは、新しい仮想サーバーの環境とパラメーターが構成されます。 インストールを高速化するためにサーバーにいくつかのリソースを追加するよりも、インスタンスのタイプのみを変更して、すべてデフォルト設定のままにします。







新しいインスタンスを開始した後、リモートコンソールを使用してインストールプロセスを実行します(仮想ネットワークの名前とサーバーに関するIP情報は図から削除されています)。







OSをインストールします(詳細は説明しません)。







インストールが完了したら、インストール中に指定したユーザー名とパスワードを使用してシステムにログインできます。その後、テンプレートに必要なすべてのオペレーティングシステム設定を完了する必要があります。



独自のLinuxテンプレートを作成する



ネットワークインターフェイスを作成するためのルールをudevから削除します。

root@localhost:~# rm -Rf /etc/udev/rules.d/70-persistent-net.rules







この手順は、テンプレートから新しい仮想サーバーを起動した後、オペレーティングシステムがネットワークインターフェイスを再作成し、ハイパーバイザーからMACアドレスに関する新しい情報を受信するために必要です。



次に、通常DHCPサーバーが動作する仮想ネットワークに接続する最初のネットワークインターフェイスに関する情報を編集する必要があります。



[root@ i-F98949C2 ~]# cat >> /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF

DEVICE="eth0"

NM_CONTROLLED="no"

ONBOOT="yes"

TYPE=Ethernet

BOOTPROTO=dhcp

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

EOF








この手順がないと、テンプレートから作成されたサーバーはクラウドからネットワーク設定を受信できず、クラウドに接続できません。



オペレーティングシステムの起動時にSSHサーバーが起動することを確認します。



[root@@ i-F98949C2~]# chkconfig --list | grep ssh

sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off








次に-オペレーティングシステムのファイアウォールがSSHサーバーへの接続をスキップすること。 場合によっては、クラウド内の各仮想ネットワークに対して、すべての着信トラフィックを完全にブロックするファイアウォールが既にあるため、完全に無効にすることができます。



次の手順では、新しいサーバーが起動するたびに管理者パスワードが自動的に生成されるように設定します。



[root@ i-F98949C2 ~]# cat >> /etc/rc.local << EOF

sh /usr/sbin/set-ssh-key.sh

EOF








ファイル/usr/sbin/set-ssh-key.shの内容



#!/bin/sh

if [ -f /etc/.ssh_done ]; then

exit 0

fi

getpw()

{

echo `pwqgen`

}

if [ $? -eq 0 ]; then

PWRES=1

while [ $PWRES -eq 1 ];

do

ROOT_PW=$(getpw)

echo $ROOT_PW | passwd root --stdin > /dev/null 2>&1

PWRES=$?

done

echo ""

echo "$ROOT_PW" > /dev/ttyS0

fi

touch /etc/.ssh_done








この手順により、テンプレートから新しい各サーバーを作成して、rootユーザーのパスワードを生成し、サーバーのシリアルコンソールに発行できます。







追加のパラメーターを仮想サーバーに渡す



3番目の図(新しい仮想サーバーを作成する段階)の「ユーザーデータ」フィールドは、新しい仮想サーバーを作成する段階で、追加のパラメーター、指示、またはその他の情報をサーバーに送信するためのものです。 このフィールドから情報を取得したり、仮想サーバーのライフサイクル全体にわたってそこに情報を書き込んだりできます。 これを行うには、クラウドのAmazon互換APIにアクセスできるユーティリティを使用する必要があります。 この記事では、 botoユーティリティと、これらの目的でクラウドAPIを使用した作業を示す小さなスクリプトを使用します。



#!/usr/bin/env python



import sys

import os

from boto.ec2.connection import EC2Connection

import boto

import boto.ec2

from operator import attrgetter

from optparse import OptionParser

from boto.ec2.blockdevicemapping import BlockDeviceType

from boto.ec2.blockdevicemapping import BlockDeviceMapping

from pprint import pprint

import time

import base64

import logging



global region

global conn

AWS_ACCESS_KEY_ID = os.environ['EC2_ACCESS_KEY']

AWS_SECRET_ACCESS_KEY = os.environ['EC2_SECRET_KEY']

logging.basicConfig(filename="boto.log", level=logging.DEBUG)



region = boto.ec2.regioninfo.RegionInfo(name="ru-msk-vol51", endpoint="console.cloud.croc.ru")



conn = boto.connect_ec2(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,

is_secure=False,

region=region,

path="/services/cloud")



def getInstanceUserData(ami):

reservations = conn.get_all_instances()

instances = [i for r in reservations for i in r.instances]

for i in instances:

if (i.__dict__['id'] == ami):

return base64.b64decode(i.get_attribute('userData')['userData'])

return ''



def setInstanceUserData(ami, userData=''):

conn.modify_instance_attribute(ami, 'userData', base64.b64encode(userData))



''' '''

setInstanceUserData('i-9A4D0DDF','test!!!!')

print getInstanceUserData('i-9A4D0DDF')








このフィールドを使用するための追加オプションは、パスワードが何らかの理由で忘れられたり失われたりした場合に管理アカウントのパスワードを変更する機能、および追加のソフトウェアまたはテンプレートの他の設定をインストールする機能です。 興味がある場合、トピックは非常に大きいので、詳細を個別に検討できます。



まとめ



雲は快適です。 利便性は、参照インストール-テンプレートから始まります。 毎回サーバーを手動で構成せず、ライセンスで配布を使用し、時間を節約し、エラーから保護し、プロセスを一般的に標準化するために、テンプレートが必要です。 このようなテンプレートを1つ作成しました。



コメントでは、クラウドでの作業のこの部分に関する質問に喜んでお答えします。



All Articles