OpenVZ on Debian: インストール

先日 OpenVZ プロジェクト よりアナウンスされていた 公式の Debian wheezy 向けパッケージ について、 先日の記事 でぜひ使ってみたいと書いてしまったので、実際に使ってみました。

これからしばらく、Debian squeeze 時代の OpenVZ では使えなかった新しい vzctl 4.5 とか ploopVSwap といった新機能の使い方や感想をまとめていきたいと思います。

ということで最初はインストールとコンテナの作成についてです。

インストール

基本的にはこちらのページの手順に沿って進めます。

Debian wheezy のインストール

まず最初に Debian wheezy をインストールします。アーキテクチャは amd64 にしてください。 i386 でもパッケージは用意されているようですが、サポートされていないようなので気をつけてください。

OpenVZ のコンテナ仮想化は軽量なので KVM や VirtualBox といった仮想マシンの上で使うことをおすすめします。 さくらの VPS のような商用サービスにインストールするのもよいと思います (参考: さくらの VPS で OpenVZ を使う )。

本気で使う気になったら、パフォーマンスを追求するために物理サーバに直接インストールしてもいいでしょう。その場合は RHEL6 カーネルがサポートするハードウェアについて調べてください。

パーティション設定について: Debian の OpenVZ はデフォルトでは /var/lib/vz にコンテナのファイルシステムを格納します。実運用ではこの領域はシステムとは異なるパーティションに置いたほうがいいでしょう。その場合パーティションは ext4 ファイルシステムを使い /srv/vz にマウントすることをおすすめします。

この記事では筆者が KVM の仮想マシンに新規インストールした Debian wheezy ホストを実行例の環境としています。ホスト名は kvz02 で IP アドレスは 10.10.0.237/24 です。またコンテナ領域として /srv/vz を使用しています。

パッケージのインストール

最初に /etc/apt/sources.list.d/openvz.list というファイルを作り OpenVZ リポジトリの apt-line を追加します。

# deb http://download.openvz.org/debian wheezy main
deb http://download.openvz.org/debian wheezy-test main

OpenVZ プロジェクトのリポジトリには wheezy と wheezy-test の 2 つがありますので、そのどちらかを選択します。

wheezy には安定版の RHEL6 カーネルパッケージしか入っていません。 wheezy の vzctl 3.0.30 パッケージ を使い、これまでの squeeze の OpenVZ と変わらない運用をしたい場合はこちらを使えばいいでしょう。

wheezy-test にはより新しいカーネルや vzctl 4.5、 ploop などのユーザ空間ツールを含むリポジトリです。OpenVZ の最新機能を試したい場合はこちらを選択してください。

次にリポジトリの公開鍵をインストールし、カーネルとユーザ空間ツールのパッケージをインストールします。

root@kvz02:~# wget http://ftp.openvz.org/debian/archive.key
root@kvz02:~# apt-key add archive.key
root@kvz02:~# apt-get update
root@kvz02:~# apt-get install linux-image-openvz-amd64
root@kvz02:~# apt-get install vzctl
root@kvz02:~# apt-get install ploop parted vzstats  (wheezy-test のみ)

parted パッケージは ploop が正しく動作するために必要です。

vzstats パッケージは http://stats.openvz.org/ にホストの情報を送るものです。統計に参加したくない場合はインストールしないでください。

コンテナ領域の設定

/var/lib/vz ではなく /srv/vz などのディレクトリにコンテナを格納する場合、
/var/lib/vz の中身を /srv/vz にそのままコピーしておきます。

root@kvz02:~# cp -a /var/lib/vz/* /srv/vz

その後 /etc/vz/vz.conf を編集して 5 箇所の /var/lib/vz/.../srv/vz/... に書き換えます。編集を間違えると正しく動作しなくなりますので注意してください。

sysctl の設定

/etc/sysctl.d/local.conf というファイルを作り OpenVZ に必要な設定を書きます。

# On Hardware Node we generally need
# packet forwarding enabled and proxy arp disabled
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0

# Enables source route verification
net.ipv4.conf.all.rp_filter = 1

# Enables the magic-sysrq key
kernel.sysrq = 1

# We do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

ブートローダ (GRUB) の設定

最後にブートローダ (GRUB) の設定をします。カーネルパッケージをインストールしたままでは OpenVZ の RHEL6 2.6.32 カーネルではなく wheezy の 3.2.0 カーネルで起動してしまうので、事前に /etc/default/grubGRUB_DEFAULT を次のように設定しておきます。

GRUB_DEFAULT=saved

編集したら次のコマンドを実行して /boot/grub/grub.cfg を再生成します。

root@kvz02:~# update-grub

ここでシステムをリブートします。 GRUB のメニューでは次のような 2.6.32-openvz カーネルを選んで起動してください。

Debian GNU/Linux, with Linux 2.6.32-openvz-042stab082.6-amd64

ここで選択したカーネルがデフォルトになりますので、次回以降の起動では明示的にカーネルを選択する必要はなくなります。

コンテナの基本操作

参考: http://openvz.org/Basic_operations_in_OpenVZ_environment

概要

OpenVZ コンテナの操作には root 権限で vzctl コマンドを使います。基本的な構文は次のとおりです。

CTID はコンテナを識別する整数値です。 CTID 100 まではシステムに予約されていますので 101 以降の任意の数字を選んでください。

また vzctl による設定では、コンテナの IP アドレスおよびネームサーバは静的に与える必要があります。他のホストからもアクセス可能にするには、同じサブネットに属する IP アドレスを指定してください。

OSTEMPLATE にはコンテナのファイルシステムに展開するテンプレートの名前を指定します。テンプレートの実体は /etc/vz/vz.conf で指定した $TEMPLATE ディレクトリ (既定は /var/lib/vz/template/cached/) の .tar.gz ファイルです。

新しい vzctl にはテンプレートの自動ダウンロード機能があり、初期設定では http://download.openvz.org/template/precreated/ にあるテンプレートが自動ダウンロードできるようになっています。使えるテンプレートの一覧は vztmpl-dl コマンドにより調べられます。

root@kvz02:~# vztmpl-dl --list-remote
centos-5-x86_64-devel
centos-5-x86_64
centos-5-x86-devel
centos-5-x86
centos-6-x86_64-devel
centos-6-x86_64
centos-6-x86-devel
centos-6-x86
debian-6.0-x86_64
debian-6.0-x86
debian-7.0-x86_64
debian-7.0-x86
fedora-18-x86_64
fedora-18-x86
fedora-19-x86_64
fedora-19-x86
scientific-6-x86_64
scientific-6-x86
suse-12.2-x86_64
suse-12.2-x86
suse-12.3-x86_64
suse-12.3-x86
ubuntu-10.04-x86_64
ubuntu-10.04-x86
ubuntu-12.04-x86_64
ubuntu-12.04-x86
ubuntu-12.10-x86_64
ubuntu-12.10-x86
ubuntu-13.04-x86_64
ubuntu-13.04-x86

操作例

ということで、テンプレートのひとつを選んでコンテナを作り、ホスト名とネットワークの設定をしてみましょう。

root@kvz02:~# vzctl create 1100 --ostemplate ubuntu-13.04-x86_64
...
Creating container private area (ubuntu-13.04-x86_64)
Performing postcreate actions
CT configuration saved to /etc/vz/conf/1100.conf
Container private area was created

root@kvz02:~# vzctl set 1100 --save --hostname raring64 --ipadd 10.10.0.100 --nameserver 10.10.0.1
CT configuration saved to /etc/vz/conf/1100.conf

コンテナの作成と設定ができたら vzctl start でコンテナを起動します。

root@kvz02:~# vzctl start 1100
Starting container...
Container is mounted
Adding IP address(es): 10.10.0.100
Setting CPU units: 1000
Container start in progress...

コンテナの稼働状況は vzlist で確認できます。

root@kvz02:~# vzlist -a
      CTID      NPROC STATUS    IP_ADDR         HOSTNAME
      1100         22 running   10.10.0.100     raring64

vzctl enter でコンテナ内の root ユーザのシェルが起動できますので、インストールされているパッケージやネットワークの確認をしてください。

ついでに ssh でリモートログインするためのユーザを作り、あとはそれを使って作業するのがいいと思います。

root@kvz02:~# vzctl enter 1100
entered into CT 1100
root@raring64:/# adduser yaegashi
root@raring64:/# adduser yaegashi sudo
root@raring64:/# exit
logout
exited from CT 1100
root@kvz02:~# ssh yaegashi@10.10.0.100

コンテナを止めるには vzctl stop とします。

root@kvz02:~# vzctl stop 1100
Stopping container ...
Container was stopped
Container is unmounted

次のようにすると、ホストシステムの起動時に自動的にコンテナも起動するようになります。

root@kvz02:~# vzctl set 1100 --save --onboot yes
CT configuration saved to /etc/vz/conf/1100.conf

コンテナが不要になったら、コンテナを停止させた上で vzctl destroy で消去できます。このとき一切確認は出ませんので注意してください。

root@kvz02:~# vzctl destroy 1100
Destroying container private area: /srv/vz/private/1100
Container private area was destroyed

vzctl によるコンテナ設定は /etc/vz/conf/1100.conf のようなファイルに保存されており、直接編集してもかまいませんが、通常は vzctl を使うほうがよいと思います。詳しくはマニュアルページ vzctlctid を参照してください。

まとめ

この記事では Debian wheezy で OpenVZ のインストールからコンテナの起動までをやってみました。

インストール手順は OpenVZ プロジェクトの apt-line を加える手順が増えたことを除けば、 Debian squeeze 時代から変わりがありませんでした。これなら既存の Debian squeeze システムからの移行もすんなりいけそうですが、実際にはコンテナのバックアップをとった上で慎重に進める必要があるでしょう。

コンテナ作成は vzctl 4.5 のテンプレートダウンロード機能によって事前にテンプレートをダウンロードしておく手間がなくなり、非常に手軽に始められるようになっています。ダウンロード元は /etc/vz/download.conf で設定できるので、自分のサイト用のテンプレートを作って web サーバに置いておくとよさそうです。

次回は注目の新機能 ploop や vswap について調べてみたいと思います。

2013/10/27 22:25:00 JST