狠狠撸
Submit Search
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
?
Download as PPTX, PDF
?
0 likes
?
495 views
Satoshi Yazawa
Follow
NIIクラウド担当内でおこなっているdodai勉強会の資料です。 dodaiがどのようにしてBare Metal Provisioningを実現しているかの概説。
Read less
Read more
1 of 26
Download now
Download to read offline
More Related Content
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
1.
dodai勉強会 #4 2016/3/28 やざわ
2.
今回のお題 ? マシンのProvisioning,起動周辺をより詳しく追跡 ? 全体の流れ ?
PXE Bootによる起動 ? IPMI制御 ? OSのProvisioning ? https://github.com/dodai-compute- v2/nova/blob/dodai-compute- v2/nova/virt/baremetal/dodai_pxe.py
3.
マシンの起動 ? 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
4.
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()
5.
おさらい: Model ? 本日の登場人物
… bm_node ? http://www.slideshare.net/shingo78/dodai3/shingo78/dodai3
6.
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
7.
全体の流れ ? 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
8.
おさらい: 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
9.
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
10.
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
11.
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
12.
Provisioning(2) ? 設定の実施 Baremetal Nodenova-compute
host IPMI: power off dodai-instance-agent: put keypair dodai-instance-agent: put fixed IP IPMI: power on
13.
PXE Bootによる制御 ? AIC
… dnsmasqで実現 ? DHCP, TFTP Server ? nova-computeの /etc/dnsmasq.d/dnsmasq.conf enable-tftp tftp-root=/tftpboot dhcp-boot=pxelinux.0
14.
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ファイルの作成?リンク
15.
イメージ用の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を設定
16.
常に起動している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処理の説明で…
17.
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
18.
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)'}
19.
pxelinux.cfgファイルのリンク ? 対象物理マシンでの pxelinux.0
実行時にconfigが 読みだされるように… ? /tftpboot/pxelinux.cfg/01-(prov_mac_address) → /tftpboot/(instance_uuid)/config
20.
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コマンド
21.
Deploy scriptの起動 ? PXEによるboot ?
deploy_kernel, deploy_ramdiskでマシンがboot ? rsyncを使ってscriptsを取得 ? injection_scripts_path パラメータが使われる
22.
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"
23.
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
24.
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
25.
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
26.
再起動 ? IPMIでpower off/power
onする ? Local diskからbootしてくれる
Download