0%

Project Atomic First Steps- Part1: Atomic Hostのビルド

OpenShift Origin 3とKubernetesを試していると、同じRedHatのProject Atomicも気になりAtomic Host上で動かしたくなります。イメージはGet Started with Atomicからダウンロードできるので、VirtualBoxですぐに試すことができます。

Atomic HostはCoreOSと比較され、SELinuxとrpm-ostreegeard特徴です。Fedoraはほとんど使ったことがないのでCoreOS vs. Project Atomic: A Reviewを読みながら勉強していきます。

rpm-ostreeをちょっと調べた

rpm-ostreeは、RPMパッケージで構成されたOSをgit fetchgit mergeのように管理できる仕組みです。
中央リポジトリからアップグレードをfetch && mergeして、reboot後は新しい/rootで起動する感じです。
Gitのように新しいOSの複製と配布がとても簡単になり、この辺りがatomicらしいです。

Fedora20の準備

CentOS 7でもAtomic Hostのビルドができるようになったそうですが、手順通りにFedora20で作業することにします。

IDCFクラウドの標準テンプレートにはFedora20がないので、ISOをアップロードしてからインスタンスを作成します。

SELinuxをdisabled

イメージのビルド作業のために、SELinuxをdisabledにします。

/etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled

一度rebootします。

# reboot

パッケージのダウンロード

Atomic Hostビルド用リポジトリをgit cloneし、必要なパッケージをインストールします。

# yum install -y git
# git clone https://github.com/jasonbrooks/byo-atomic.git
# mv byo-atomic/walters-rpm-ostree-fedora-20-i386.repo /etc/yum.repos.d/
# yum install -y rpm-ostree rpm-ostree-toolbox nss-altfiles yum-plugin-protectbase httpd

設定ファイルの編集

/etc/nsswitch.confのバックアップをします。

# cp /etc/nsswitch.conf{,.orig}

passwd:group:の行を編集します。

/etc/nsswitch.conf
#passwd:     files
passwd: files altfiles
shadow: files
#group: files
group: files altfiles

/etc/libvirt/qemu.confのバックアップをします。

# cp /etc/libvirt/qemu.conf{,.orig}

user = "root"の行をアンコメントします。

/etc/libvirt/qemu.conf
user = "root"

libvirtdをrestartします。

# systemctl restart libvirtd

rpm-ostreeのリポジトリ

Atomic HostのRPMをアップデートするため、rpm-ostreeのリポジトリを作成します。

# mkdir -p /srv/rpm-ostree/repo && cd /srv/rpm-ostree/ && sudo ostree --repo=repo init --mode=archive-z2
# cat > /etc/httpd/conf.d/rpm-ostree.conf <<EOF
DocumentRoot /srv/rpm-ostree
<Directory "/srv/rpm-ostree">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
EOF
# systemctl daemon-reload && \
systemctl enable httpd && \
systemctl start httpd && \
systemctl reload httpd && \
firewall-cmd --add-service=http && \
firewall-cmd --add-service=http --permanent

Atomic Hostイメージビルド

Atomic Hostイメージをビルドします。rpm-ostree-toolboxを使いqcow2ファイルを作成します。

# cd /root/byo-atomic/f20
# rpm-ostree compose tree --repo=/srv/rpm-ostree/repo fedora-atomic-server-docker-host.json
# rpm-ostree-toolbox create-vm-disk /srv/rpm-ostree/repo fedora-atomic-host fedora-atomic/20/x86_64/server/docker-host f20-atomic.qcow2
...
Started child process 'guestunmount' '-v' '/tmp/rpmostreetoolbox.YG4AMX/mnt': pid=24463
Awaiting termination of guestmount, watching: /tmp/rpmostreetoolbox.YG4AMX/mnt.guestmount-pid
guestmount pid file successfully deleted
Created: /root/byo-atomic/f20/f20-atomic.qcow2

vmdkファイルにコンバート

qemu-imgコマンドを使い、qcow2ファイルをvmdkファイルにコンバートします。

# qemu-img convert -f qcow2 /root/byo-atomic/f20/f20-atomic.qcow2 -O vmdk c7-atomic.vmdk

config-driveの作成

config-driveは仮想マシン起動時に読み込んで利用する、OSの設定情報を格納したISOファイルです。
ISOファイルを仮想マシン起動時に接続すると、meta-datauser-dataを読み込み設定をしてくれます。

Atomic Hostはrootのパスワードや公開鍵を記述します。この辺りはCoreOSと同じです。

meta-dataにはホスト名を指定します。

meta-data
instance-id: Atomic0
local-hostname: atomic-00

user-dataにはパスワードと公開鍵を指定します。

user-data
#cloud-config
password: atomic
chpasswd: {expire: False}
ssh_pwauth: True
ssh_authorized_keys
- ssh-rsa AAAAB3NzaC1yc...

genisoimageコマンドを使いISOファイルを作成します。

$ genisoimage -output atomic0-cidata.iso -volid cidata -joliet -rock -input-charset utf-8 user-data meta-data
Total translation table size: 0
Total rockridge attributes bytes: 331
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 0
183 extents written (0 MB)

VMware Playerでvmdkをアタッチして起動

Fedora20で作成したc7-atomic.vmdkファイルを、Window7の作業マシンにダウンロードします。
以下の手順で仮想マシンを作成します。ディスクイメージを作成したvmdkファイルと入れ替えます。

  1. VMware Playerを起動
  2. 新規仮想マシンの作成
  3. 後でOSをインストールを選択
  4. Linux, 他のLinux 3.xカーネル 64ビットを選択
  5. 仮想マシン名に、AtomicHost
  6. 1GBで、仮想ディスクを単一ファイルとして格納
  7. c7-atomic.vmdkをVirtual MachinesのAtomicHostフォルダにコピー
  8. 仮想マシンの設定の編集
  9. 既存のハードディスクを削除
  10. 既存の仮想ディスクを使用からc7-atomic.vmdkを選択、既存の形式を保持
  11. config-driveのISOファイルをCD/DVD(IDE)にセットし、起動時に接続にチェックを入れる
  12. 仮想マシンを起動

VMware Playerコンソール

VMware PlayerコンソールからAtomic Hostの仮想マシンにログインします。

  • login: fedora
  • passwd: atomic

パスワードはconfig-driveに設定した値を使います。

IDCFクラウドではconfig-driveが使えない

ovftoolを使いOVAにコンバートしてからIDCFクラウドのテンプレートに登録します。
OVAテンプレートからVMを作成するときに、config-driveのISOファイルをマウントします。

残念ながらIDCFクラウドでは仮想マシンの起動時にconfig-driveを読み込んでくれません。
user-dataを取得できずにOSの設定が完了しないためログインできなくなります。

まとめ

Atomic Hostをビルドしながらrpm-ostreeの役割やrpm-ostree-toolboxコマンドを使ったディスクイメージの作り方など勉強することができました。

config-driveも便利な仕組みです。仮想マシン起動時にuser-dataを渡してOSの構成管理を初回で終わらせてしまう方法はCoreOSと同じです。
cloud-configでOSを作成した後のパッケージ管理は中央リポジトリと同期され、個別に設定ファイルの書き換えやパッケージの追加ができなくなります。Project Atomicではyumの廃止やそれに伴いPythonもインストールしないことも検討されているようです。

Webスケールで使い捨て可能なインフラが必要な環境では、ChefなどのCMツールを使わずにcloud-configを使った構成管理が今後主流になると思うので慣れておきたいです。

次回はビルド済みのAtomic Hostのダウンロードを使ってIDCFクラウドにデプロイしてみます。