狠狠撸

狠狠撸Share a Scribd company logo
dodai勉強会 #4
2016/3/28 やざわ
今回のお題
? マシンのProvisioning,起動周辺をより詳しく追跡
? 全体の流れ
? PXE Bootによる起動
? IPMI制御
? OSのProvisioning
? https://github.com/dodai-compute-
v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/dodai_pxe.py
マシンの起動
? DodaiBareMetalDriver.spawn()
? http://www.slideshare.net/taka400k/dodai2-58750606
? https://github.com/dodai-compute-
v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/driver.py#L564-L662
DodaiBareMetalDriver.spawn
? 特に、以下のコードを追う
? https://github.com/dodai-compute-
v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/driver.py#L627-L636
self.driver.activate_bootloader(context, node, instance)
pm = get_power_manager(node=node, instance=instance)
pm.reboot_node()
self.driver.activate_node(context, node, instance)
self.driver.deactivate_node(context, node, instance)
self._put_keypair(node, instance)
self._set_fixed_ip(node, network_info)
pm.reboot_node()
おさらい: Model
? 本日の登場人物 … bm_node
? http://www.slideshare.net/shingo78/dodai3/shingo78/dodai3
Lifecycle
? bm_nodeの状態遷移
task_state:
NULL
resource_pool: 0
task_state:
active
resource_pool: 1
task_state:
active
resource_pool: 0
task_state:
deleted
resource_pool: 0
Add to resource pool
(by admin user)
Run an instance
(by non-admin user)
Delete an instance
(by non-admin user)
Reclaim deleted
nodes to
resource pool
(by periodic task)
Register a baremetal node
task_state:
error
resource_pool: 0
全体の流れ
? bm_nodeの状態遷移
task_state:
NULL
resource_pool: 0
task_state:
active
resource_pool: 1
task_state:
active
resource_pool: 0
task_state:
deleted
resource_pool: 0
Add to resource pool
(by admin user)
Run an instance
(by non-admin user)
Delete an instance
(by non-admin user)
Reclaim deleted
nodes to
resource pool
(by periodic task)
Register a baremetal node
task_state:
error
resource_pool: 0
おさらい: ComputeDriver
? DodaiBareMetalDriverを使用
? nova-computeの /etc/nova/nova.conf にて
ComputeDriverを指定
nova.virt.baremetal.driver.
DodaiBareMetalDriver
[DEFAULT]
…
compute_driver=nova.virt.baremetal.driver.DodaiBare
MetalDriver
nova.virt.driver.
ComputeDriver
nova.virt.baremetal.driver.
BareMetalDriver
DodaiBareMetalDriverから利用
? Provisioning方式もPluggable
? https://github.com/dodai-compute-v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/base.py
? nova-computeの/etc/nova/nova.conf
[baremetal]
…
power_manager = nova.virt.baremetal.ipmi.DodaiIPMI
driver = nova.virt.baremetal.dodai_pxe.PXE
nova.virt.baremetal.dodai_pxe.
PXE
nova.virt.baremetal.driver.
DodaiBareMetalDriver
nova.virt.baremetal.ipmi.
DodaiIPMI
nova.virt.baremetal.base.
NodeDriver
nova.virt.baremetal.base.
PowerManager
DodaiBareMetalDriverから利用
? つまり…
self.driver.activate_bootloader(context, node, instance)
pm = get_power_manager(node=node, instance=instance)
pm.reboot_node()
self.driver.activate_node(context, node, instance)
self.driver.deactivate_node(context, node, instance)
self._put_keypair(node, instance)
self._set_fixed_ip(node, network_info)
pm.reboot_node()
https://github.com/dodai-compute-v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/dodai_pxe.py#L343
https://github.com/dodai-compute-
v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/ipmi.py#L210
Provisioning(1)
? ざっくりとシーケンスを … リソースのダウンロード
Baremetal Nodenova-compute host
IPMI: power on
DHCP: discover
IP address, Path for pxelinux.0
TFTP: download pxelinux.0, config
TFTP: download deploy_kernel, deploy_ramdisk
rsync: scripts
PXE images and configurations
deploy_kernel, deploy_ramdisk
ami-deploy.sh, dodai-instance-agent, …
rsync: files for image
Root FS
Provisioning(2)
? 設定の実施
Baremetal Nodenova-compute host
IPMI: power off
dodai-instance-agent: put keypair
dodai-instance-agent: put fixed IP
IPMI: power on
PXE Bootによる制御
? AIC … dnsmasqで実現
? DHCP, TFTP Server
? nova-computeの /etc/dnsmasq.d/dnsmasq.conf
enable-tftp
tftp-root=/tftpboot
dhcp-boot=pxelinux.0
pxelinux.cfgファイルの準備
? PXE.activate_bootloader
? https://github.com/dodai-compute-
v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/dodai_pxe.py#L343-L389
? 主な処理
? イメージ転送用rsyncの準備
? pxelinux.cfgファイルの作成?リンク
イメージ用のrsyncの準備
? DodaiOSInstallManagerが担当
? https://github.com/dodai-compute-v2/nova/blob/dodai-
compute-
v2/nova/virt/baremetal/dodai_os_install_manager.py#L126-
L130
? 主な処理
? イメージファイルをマウント …
/var/lib/nova/baremetal/rsync/images/(image_uuid)
? マウントしたディレクトリを提供するrsyncを起動
? ポートは nova.confで指定したポート範囲から割り当て
? rsync config …
/var/lib/nova/baremetal/rsync/conf/(image_uuid).conf
? このイメージを使用する物理マシンにのみアクセスを許可するよ
うrsyncを設定
常に起動しているrsync
? Deploy script/Deletion scriptの供給用rsync
? /var/lib/nova/baremetal/rsync/scripts を提供
? /var/lib/nova/baremetal/rsync/scripts の構成
? ami-deploy.sh
? deletion-script
? linux
? centos
? 6.7
? etc
? mnt
? service
? usr
? 7.1.1503
? …
? rhel
? Ubuntu
? 詳細はProvisioning処理の説明で…
pxelinux.cfgファイルの作成
? 設定ファイル
? /tftpboot/(instance_uuid)
? config
? deploy_kernel … deploy_kernelへのsymlink
? deploy_ramdisk … deploy_ramdiskへのsymlink
? image_ref … イメージへのsymlink
? configの中身(例)
default deploy
label deploy
kernel /tftpboot/(instance_uuid)/deploy_kernel
append initrd=/tftpboot/(instance_uuid)/deploy_ramdisk … root_size=xxxx
swap_size=xxxx ephemeral_size=0 … ami_path=rsync://(nova-
compute):16385/(image_uuid) prov_ip_address=xx.xx.xx.xx action=deploy
injection_scripts_path=rsync://(nova-compute):873/scripts/
deletion_scripts_path=
ipappend 3
label boot
localboot -1
deploy_kernelとdeploy_ramdisk
? Flavorのextra_specsで指定する
? マシンタイプによりdeploy用OSイメージ自体を変えるこ
とができる
{u'baremetal:deploy_kernel_id': u'(deploy_kernel_uuid)',
u'cpu-arch': u'x86_64',
u'baremetal:kdump_gb': u'128',
u'baremetal:deploy_ramdisk_id': u'(deploy_ramdisk_uuid)',
u'baremetal:default_image': u'(image_uuid)'}
pxelinux.cfgファイルのリンク
? 対象物理マシンでの pxelinux.0 実行時にconfigが
読みだされるように…
? /tftpboot/pxelinux.cfg/01-(prov_mac_address) →
/tftpboot/(instance_uuid)/config
IPMI制御
? IPMI制御
? https://github.com/dodai-compute-
v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/ipmi.py#L210-L215
? https://github.com/dodai-compute-
v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/ipmi.py#L280-L300
? IPMI制御
? powerコマンド
? chassis bootdev pxeコマンド
Deploy scriptの起動
? PXEによるboot
? deploy_kernel, deploy_ramdiskでマシンがboot
? rsyncを使ってscriptsを取得
? injection_scripts_path パラメータが使われる
Deploy script
? /var/lib/nova/baremetal/rsync/scripts/ami-deploy.sh
? ざっくりとした流れ … 今後、改めて追うとよいかも
env_check || except "env_check"
sync_time || except "sync_time"
partition_and_format || except "partition_and_format"
rsync || except "rsync"
distro_check || except "distro_check"
create_json || except "create_json"
. /mnt/sda2/mnt/.dodai/bin/dodai-common.sh
set_hostname || except "set_hostname"
grub_install || except "grub_install"
setup_network || except "setup_network"
sync_target_machine_time || except "sync_target_machine_time"
$SED -i -e 's/deploying/deploy
complete/‘ "/mnt/sda2${agent_config}/dodai.json"
file_umount || except "file_umount"
$SED -i -e 's/deploying/deploy complete/'
"$agent_config/dodai.json"
dodai-instance-agentによる設定
? Deploy中???dodai-instance-agentが起動したかど
うかをnova-computeからPolling
? https://github.com/dodai-compute-
v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/dodai_pxe.py#L526-L552
PXE bootの設定変更
? dodai-instance-agentがDEPLOYDONEを報告すると…
? https://github.com/dodai-compute-v2/nova/blob/dodai-
compute-v2/nova/virt/baremetal/dodai_pxe.py#L504-L524
default boot
label deploy
kernel /tftpboot/(instance_uuid)/deploy_kernel
append initrd=/tftpboot/(instance_uuid)/deploy_ramdisk … root_size=xxxx
swap_size=xxxx ephemeral_size=0 … ami_path=rsync://(nova-
compute):16385/(image_uuid) prov_ip_address=xx.xx.xx.xx action=deploy
injection_scripts_path=rsync://(nova-compute):873/scripts/
deletion_scripts_path=
ipappend 3
label boot
localboot -1
Keypair, Fixed IP
? nova-computeからdodai-instance-agentに指示
? https://github.com/dodai-compute-
v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/driver.py#L633-L634
? Keypairのput … シンプルなApplication Server
? https://github.com/dodai-compute-
v2/nova/blob/dodai-compute-
v2/nova/virt/baremetal/driver.py#L720-L742
? https://github.com/dodai-compute-v2/dodai-instance-
agent/blob/dodai-compute-v2/bin/dodai-instance-
agent.rb#L698-L715
再起動
? IPMIでpower off/power onする
? Local diskからbootしてくれる

More Related Content

dodaiのProvisioning周辺探訪 - dodai勉強会 #4