IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

CoreOS のVMware+CloudStack対応イメージ作成手順の紹介

f:id:toshimi727:20160225170400p:plain

前回の記事「IDCFクラウド対応CoreOSテンプレートをリリース」で、IDCFクラウド対応CoreOSテンプレートのリリースと基本的な使い方を紹介いたしました。

今回は、IDCFクラウド対応(VMwareとCloudStackに対応)CoreOSテンプレートの作成手順を紹介します。CoreOSテンプレートのカスタマイズ方法のヒントになればと思います。

 

 

以下、CoreOSの公式ドキュメントを参考に実際の手順を解説します。

1. VMDKの編集ができるLinux環境の準備

本手順の後半で仮想ハードディスクファイル(VMDKファイル)のマウントやサイズ変更などを行うので、事前にVMDKの編集ができるLinux環境を準備します。

1-1. VDDK for vSphere 5.5のインストール

VMDKを編集するためのツールとして、「** Virtual Disk Development Kit (VDDK)**」が公開されています。VDDKの利用条件として、64ビットOSが必要なので、64ビット版のLinuxサーバーを事前に用意します。VMware社のDeveloper Centerサイトから、VDDKの最新版(執筆時点での最新版は5.5.2)をLinuxサーバーにダウンロードします。なお、ダウンロードのためにはMy VMwareへの登録が必要となります。

次に、ダウンロードしたパッケージを展開、インストールしていきます。


# tar xvzf VMware-vix-disklib-*.tar.gz    (*はバージョン番号)
# cd vmware-vix-disklib-distrib
# ./vmware-install.pl
(VDDKインストールウィザードが開始される)

インストールが完了したら、のちに利用することになるコマンドへのパスが通っているか確認します。


# which vmware-mount
/usr/bin/vmware-mount
# which vmware-vdiskmanager
/usr/bin/vmware-vdiskmanager

1-2. OVF Toolのインストール

IDCFクラウドのテンプレートとして登録するためにはOVA形式でUploadする必要があります。VMDKからOVAファイルを作成するために、OVF Toolをインストールします。

まずOVF Tool配布サイトからLinux 64bit向けのインストールファイルをダウンロードします。ダウンロード後、以下のようにしてインストールを行います。ここではVersion 3.5.0を例にコマンド例を記載します。


# chmod 755 VMware-ovftool-3.5.0-1274719-lin.x86_64.bundle
# ./VMware-ovftool-3.5.0-1274719-lin.x86_64.bundle
(インストールが行われる)
# which ovftool
/usr/bin/ovftool

以上で環境準備が整いました。

2. CoreOS本家のビルド済み仮想マシンイメージの取得

CoreOS開発元では、各種IaaS向けのビルド済み仮想マシンイメージを配布しています。IDCFクラウドはHypervisorとしてVMware ESXiを利用しているので、以下のファイル名のファイルを下記の配布先からダウンロードします。

** ダウンロードするファイル **

  • coreos_production_vmware.vmx
  • coreos_production_vmware_image.vmdk.bz2

** 配布サイト **

配布サイトの最新情報はCoreOSドキュメントのページをご確認ください。

ダウンロードしたファイルはハッシュを念のため確認し、その後vmdkファイルを展開します。


# bunzip2 coreos_production_vmware_image.vmdk.bz2

3. CloudStack対応OEMスクリプトの追加

3-1. CloudStack対応OEMスクリプトのダウンロード

CloudStackのUser DataやSSH Key取得のためのスクリプトはGitHubのこちらの場所に公開されています。 これらのファイルすべてをLinuxサーバー上にダウンロードします。ファイルの役割は以下の通りです。

ファイル名 役割
cloud-config.yml CoreOS起動時にCloudStack対応スクリプトを実行するための設定ファイル
cloudstack-coreos-cloudinit CloudStackのUser Dataからcloud-config.ymlを取得して設定を実行するスクリプト
cloudstack-dhcp User Dataなどの取得先IP(DHCPサーバーのIP)を取得するスクリプト
cloudstack-ssh-key DHCPサーバーからCloudStackで設定されたSSHキーを取得し、coreユーザーのキーとして設定するスクリプト
coreos-setup-environment CoreOSのEnvironment変数(/etc/environment)を設定するスクリプト

3-2. CoreOSのVMDKイメージへのOEMスクリプト追加

まず、CoreOSのイメージをLoopback Mountします。VMDKの保存先に合わせて/path/to/vmdk/は適切に変更してください。


#  vmware-mount /path/to/vmdk/coreos_production_vmware_image.vmdk 6 /mnt

重要なポイントは、OEMスクリプトを保存する場所はVMDKファイルの中の6番目のパーティション(CoreOS上では/usr/share/oem)であるという点です。

次に、マウントしたディレクトリの下にファイルを適切に配置します。CloudStack対応スクリプトの保存先に合わせて/path/to/script/は適切に変更してください。


# cp /path/to/script/cloudstack-* /mnt/bin/
# chmod 755 /mnt/bin/cloudstack-*
# cp /path/to/script/coreos-setup-environment /mnt/bin/
# chmod 755 /mnt/bin/coreos-setup-environment

設置したスクリプトをOS起動時に実行するよう、/mnt/cloud-config.ymlの内容にCloudStack用cloud-config.ymlの内容を追記します。追記結果については、次のNTP設定の結果と合わせて後程記載します。

3-3. IDCFクラウド用のNTP設定追加

IDCFクラウドではNTPサーバーも提供しているので、NTP参照先を変更します。そのために、write_files:セクションを/mnt/cloud-config.ymlに追記して/etc/ntp.confを作成するようにします。また、coreos>unitsセクションでNTPサービスを再起動するようにします。

また、TimeZoneをJSTに変更するためにcoreos>units配下にTimeZone設定コマンドを実行するよう記述します。

ここまでの手順をすべて行った結果、/mnt/cloud-config.ymlは以下の通りとなります。


#cloud-config

coreos:
  units:
    - name: settimezone.service
      command: start
      content: |
        [Unit]
        Description=Set the timezone

        [Service]
        ExecStart=/usr/bin/timedatectl set-timezone Asia/Tokyo
        RemainAfterExit=yes
        Type=oneshot
    - name: vmtoolsd.service
      command: start
      content: |
        [Unit]
        Description=VMware Tools Agent
        Documentation=http://open-vm-tools.sourceforge.net/
        ConditionVirtualization=vmware

        [Service]
        ExecStartPre=/usr/bin/ln -sfT /usr/share/oem/vmware-tools /etc/vmware-tools
        ExecStart=/usr/share/oem/bin/vmtoolsd
        TimeoutStopSec=5
    - name: cloudstack-ssh-key.service
      command: restart
      runtime: yes
      content: |
        [Unit]
        Description=Sets SSH key from metadata

        [Service]
        Type=oneshot
        StandardOutput=journal+console
        ExecStart=/usr/share/oem/bin/cloudstack-ssh-key
    - name: cloudstack-cloudinit.service
      command: restart
      runtime: yes
      content: |
        [Unit]
        Description=Cloudinit from CloudStack-style metadata
        Requires=coreos-setup-environment.service
        After=coreos-setup-environment.service

        [Service]
        Type=oneshot
        EnvironmentFile=/etc/environment
        ExecStart=/usr/share/oem/bin/cloudstack-coreos-cloudinit
    - name: ntpd.service
      command: restart

  oem:
    id: cloudstack
    name: CloudStack
    version-id: 0.1
    home-url: http://cloudstack.apache.org/
    bug-report-url: https://github.com/coreos/coreos-overlay

write_files:
  - path: /etc/ntp.conf
    content: |
      tinker panic 0
      # Common pool
      server -4 ntp1.noah.idc.jp burst iburst
      server -4 ntp2.noah.idc.jp burst iburst

      # - Allow only time queries, at a limited rate.
      # - Allow all local queries (IPv4, IPv6)
      restrict default ignore
      restrict -6 default ignore
      restrict 127.0.0.1
      restrict ::1
      restrict ntp1.noah.idc.jp nomodify notrap noquery
      restrict ntp2.noah.idc.jp nomodify notrap noquery

3-4. VMDKファイルの編集完了

VMDKの編集が完了したら、アンマウントとロック解除を行います。


# umount /mnt
# df
(/mntがマウントされていないことを確認)
#  vmware-mount /path/to/vmdk/coreos_production_vmware_image.vmdk -d
(VMDKへのロックを解除)

4. VMDKサイズ拡張とOVAテンプレート化

VMDKサイズはダウンロード当初は約8GB程度に設定されています。これをIDCFクラウド標準テンプレートのサイズである15GBに拡張します。


# vmware-vdiskmanager -x 15GB /path/to/vmdk/coreos_production_vmware_image.vmdk
  Grow: 100% done.
Disk expansion completed successfully.

WARNING: If the virtual disk is partitioned, you must use a third-party
         utility in the virtual machine to expand the size of the
         partitions. For more information, see:
         http://www.vmware.com/support/kb/enduser/std_adp.php?p_faqid=1647

次に、OVA形式に変換するため、ovftoolコマンドを実行します。/path/to/ova/はOVA保存先パスに適宜読み替えてください。


# ovftool coreos_production_vmware.vmx /path/to/ova/CoreOS_494.1.0_beta_64-bit.ova
Opening VMX source: coreos_production_vmware.vmx
Opening OVA target: /path/to/ova/CoreOS_494.1.0_beta_64-bit.ova
Writing OVA package: /path/to/ova/CoreOS_494.1.0_beta_64-bit.ova
Transfer Completed
Completed successfully

以上でOVAテンプレートファイルが完成しました。あとはIDCFクラウドのTemplateアップロード手順に従ってテンプレートの登録を行うことで、利用が可能になります。

今回、弊社提供CoreOSテンプレートの作成手順を解説しましたが、上記の手順を使えば、自分好みのカスタマイズも可能になります。ぜひお試しください。

Copyright © IDC Frontier Inc.