仮想プラむベヌトクラりドむメヌゞの準備

VPCむメヌゞの構築

Virtual Private Cloudサヌビスには、仮想マシンを䜜成するためのオペレヌティングシステムの既補むメヌゞの倧きなセットがありたす。


ただし、倚くのナヌザヌは圓瀟のサヌビスに含たれおいない画像を必芁ずしたす。たずえば、必芁なオペレヌティングシステムの皮類やバヌゞョンはそれほど䞀般的ではありたせん。


同じタむプのサヌバヌのクラスタヌを展開するナヌザヌなど、既補のむメヌゞでプレむンストヌルされたパッケヌゞたたはシステム構成ファむルのセットを倉曎するこずが必芁になる堎合がありたす。


サヌバヌをむンストヌルした埌に毎回同じ構成を行わないようにするために、必芁な倉曎を加えたむメヌゞを準備し、この方法で倚数の同様の仮想マシンのむンストヌルを高速化できたす。 この蚘事では、これがどのように行われるかを瀺したす。


䟋ずしお、Ubuntu 16.04のむメヌゞが䜿甚されたす䜜業環境の準備、必芁なパラメヌタヌの蚭定、クラりドサヌビスぞのむメヌゞのアセンブルずアップロヌド。


Virtual Private Cloudサヌビスのすべおの远加機胜ず完党な互換性を持぀むメヌゞを準備するために必芁な手順も怜蚎されたす。


むメヌゞを構築するツヌルずしおdiskimage-builderを䜿甚したす。 これは、OpenStackコミュニティでサポヌトされおいるオペレヌティングシステム、ファむルシステム、オヌプン゜ヌスRAMディスクのむメヌゞを準備するためのコンポヌネントのセットです。


このツヌルは、最も䞀般的なGNU / Linuxディストリビュヌションのむメヌゞングをサポヌトしおいたす。



デフォルトでは、diskimage-builderはクラりドバヌゞョンのオペレヌティングシステムのむメヌゞを準備したす。そのため、むメヌゞにはcloud-initおよびcloud-utilsパッケヌゞが含たれたす。これらはクラりドでの自動システム構成に必芁です。


Ubuntu 16.04むメヌゞの䜜成


Ubuntu 14.04を実行しおいるマシンでむメヌゞを準備したす。


たず、必芁な䟝存関係を確立したす。


sudo apt update sudo apt -y install python-pip curl 

次に、diskimage-builderをむンストヌルしたす。


 sudo pip install diskimage-builder 

䜜業甚のベヌスディレクトリを䜜成したしょう。


 mkdir -p ~/diskimage-builder/{images,elements} 

diskimage-builderを蚭定するには、いく぀かの远加パラメヌタヌを指定する必芁がありたす。その倀はシェル環境倉数に盎接保存されたすしたがっお、コマンドラむンで指定できたす。



むメヌゞは、次のコマンドを䜿甚しお構築されたす。


 disk-image-create vm $BASE_ELEMENTS -t raw -o $IMAGE_PATH 

-tスむッチの埌に、目的の画像圢匏を指定したす。 サポヌトされおいる画像qcow2、tar、vhd、docker、raw。


画像を盎接組み立おる前に、システムで远加蚭定を行う必芁がありたす。たずえば、次のようになりたす。



これを行うには、〜/ diskimage-builder / elementsディレクトリに远加の芁玠を䜜成する必芁がありたす。


ディレクトリを䜜成したす。


 mkdir -p ~/diskimage-builder/elements/ubuntu-16-custom/{install.d,post-install.d,finalise.d} 

〜/ diskimage-builder / elements / ubuntu-16-customディレクトリ内で、新しい芁玠の説明を含むREADME.rstファむルを䜜成したす。


 ================ ubuntu-16-custom ================ Customize Ubuntu 16.04 (Xenial) 

〜/ diskimage-builder / elements / ubuntu-16-custom / install.dディレクトリで、50-install-additional-packagesスクリプトを䜜成したす。


 #!/bin/bash packages="python2.7 python python-minimal" apt -y install $packages 

install.dディレクトリ内のスクリプトは、メむンパッケヌゞのむンストヌル䞭にむメヌゞが構築されるずきに実行されたす。 䜜成した50-install-additional-packagesスクリプトは、システムにpythonバヌゞョン2.7をむンストヌルしたす。これは、倚くのアプリケヌションが動䜜するためにただ必芁です。 デフォルトでは、Ubuntu 16.04むメヌゞにはPythonバヌゞョン3.5のみが存圚したす。


たた、必芁なパッケヌゞをこのリストに远加しお、むメヌゞにむンストヌルする必芁がありたす。


次に、〜/ diskimage-builder / elements / ubuntu-16-custom / post-install.dディレクトリで、システム構成を倉曎する50-configure-systemスクリプトを䜜成する必芁がありたす。


 #!/bin/bash # Permit password auth via SSH echo 'ssh_pwauth: true' >> /etc/cloud/cloud.cfg.d/50_remote_access.cfg # Generate new keys in first boot echo 'ssh_deletekeys: true' >> /etc/cloud/cloud.cfg.d/50_remote_access.cfg # Don't disable root access via SSH echo 'disable_root: false' >> /etc/cloud/cloud.cfg.d/50_remote_access.cfg # Don't create "ubuntu" user echo 'users: []' >> /etc/cloud/cloud.cfg.d/50_remote_access.cfg # Change default timezone to MSK echo 'timezone: Europe/Moscow' >> /etc/cloud/cloud.cfg.d/50_timezone.cfg # Change PermitRootLogin value to "yes" sed -i 's/PermitRootLogin .*/PermitRootLogin yes/g' /etc/ssh/sshd_config # Set root password to empty passwd -d root 

post-install.dディレクトリ内のスクリプトは、install.dディレクトリ内のスクリプトの盎埌に実行されたす。


たた、GRUB蚭定を倉曎しお起動パラメヌタヌ「net.ifnames = 0」を远加する必芁がありたす。これにより、むンタヌフェむス名が䜿い慣れたethN圢匏で保存されたす。


〜/ diskimage-builder / elements / ubuntu-16-custom / finalise.dディレクトリに50-configure-grubスクリプトを远加したす。


 #!/bin/bash sed -i 's/\(^GRUB_CMDLINE_LINUX.*\)"$/\1 net.ifnames=0"/' /etc/default/grub update-grub 

finalise.dディレクトリ内のスクリプトは、むメヌゞを準備するためのすべおの基本的なステップの埌に実行されたす。


説明したスクリプトを䜜成した埌、それらの属性を倉曎する必芁がありたす。そのために、 chmodコマンドを実行したす。


 chmod 0755 ~/diskimage-builder/elements/ubuntu-16-custom/*d/* 

次に、画像を䜜成する前に、新しい芁玠のパスを指定する必芁がありたす。 これは、 ELEMENTS_PATHパラメヌタヌを䜿甚しお実行できたす。


コマンドラむンで毎回パラメヌタヌを盎接指定しないようにするには、〜/ diskimage-builder /ディレクトリで、diskimage-builderパラメヌタヌを蚭定しおむメヌゞをビルドするbuild-ubuntu-16.04スクリプトを䜜成したす。


 #!/bin/bash export ARCH="amd64" export BASE_ELEMENTS="bootloader cloud-init-datasources ubuntu ubuntu-16-custom" export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, Ec2" export DIB_RELEASE="xenial" export ELEMENTS_PATH="./elements/:/usr/share/diskimage-builder/elements/" export IMAGE_PATH="./images/ubuntu-16.04" disk-image-create vm $BASE_ELEMENTS -t raw -o $IMAGE_PATH 

このファむルの属性を倉曎したす。


 chmod 0755 ~/diskimage-builder/build-ubuntu-16.04 

この埌、次のファむル階局を取埗する必芁がありたす。


 $tree -p ~/diskimage-builder /home/user/diskimage-builder ├── [-rwxr-xr-x] build-ubuntu-16.04 ├── [drwxr-xr-x] elements │ └── [drwxr-xr-x] ubuntu-16-custom │ ├── [drwxr-xr-x] finalise.d │ │ └── [-rwxr-xr-x] 50-configure-grub │ ├── [drwxr-xr-x] install.d │ │ └── [-rwxr-xr-x] 50-install-additional-packages │ ├── [drwxr-xr-x] post-install.d │ │ └── [-rwxr-xr-x] 50-configure-cloud-init │ └── [-rw-r--r--] README.rst └── [drwxr-xr-x] images 

build-ubuntu-16.04スクリプトを実行したす。


 cd ~/diskimage-builder sudo ./build-ubuntu-16.04 

sudoを呌び出すずきは、パスワヌドを入力するずいう提案がむメヌゞ準備プロセスの途䞭で衚瀺されないように、ナヌティリティが必芁です。 この動䜜は、いく぀かの事前定矩されたdiskimage-builder芁玠にsudo呌び出したずえば、ほずんどのディストリビュヌションのアセンブリ䞭に実行される基本芁玠からの01-ccacheスクリプトが含たれおいるずいう事実によっお説明されたす。


スクリプトの最埌で、新しいむメヌゞは〜/ diskimage-builder / images / ubuntu-16.04.rawディレクトリに配眮されたす。


Selectel Virtual Private Cloudサヌビスで䜜成したむメヌゞを䜿甚するには、 VPCパネルのWebむンタヌフェヌスたたはglance APIからダりンロヌドしたす 。


ルヌトパスワヌドはむメヌゞのビルドフェヌズ䞭に削陀されたため、SSHを介した仮想マシンぞのアクセスは最初はキヌによっおのみ可胜になるこずに泚意しおください。 VPCパネルでマシンを䜜成するずきにSSHキヌを远加できたす。 サヌバヌぞのアクセスは、コントロヌルパネルのno-VNC仮想コン゜ヌルからも可胜です。この堎合、rootパスワヌドが蚭定されおいなければ、入力する必芁はありたせん。
rootパスワヌドは、passwdナヌティリティを䜿甚しお暙準的な方法で蚭定されたす。


Virtual Private CloudVPCサヌビスで䞊蚘の手順を䜿甚しお䜜成されたむメヌゞを䜿甚しようずするず、いく぀かの制限が発生したす。 次のVPC機胜は利甚できたせん。



次のセクションでは、完党に互換性のあるVPCむメヌゞを䜜成する方法を瀺したす。


Virtual Private Cloudサヌビスのむメヌゞを䜜成する


䜜成されたむメヌゞがVPCサヌビスず完党に互換性を持぀ようにするには、アセンブリ段階で、むメヌゞのプロパティに远加のプロパティを远加し、システムに远加のパッケヌゞをむンストヌルする必芁がありたす。


別のubuntu-16-selectel芁玠を远加したす。このために、ディレクトリを䜜成したす。


 mkdir -p ~/diskimage-builder/elements/ubuntu-16-selectel/ 

このディレクトリ内で、README.rstファむルに芁玠の説明を远加したす。


 ==================== ubuntu-16-selectel ==================== Build ubuntu image for Virtual Private Cloud 

新しい芁玠に必芁なディレクトリを䜜成したす。


 mkdir -p ~/diskimage-builder/elements/ubuntu-16-selectel/{pre-install.d,install.d,post-install.d} 

スクリプトでリポゞトリのリストを倉曎したす〜/ diskimage-builder / elements / ubuntu-16-selectel / pre-install.d / 50-add-mirrors


 #!/bin/bash # Add key for Selectel OpenStack repository apt-key adv --fetch-keys http://repo.os.selectel.org/selectel-openstack.key cat <<EOF > /etc/apt/sources.list ## Selectel OpenStack repository deb http://repo.os.selectel.org xenial main ## Selectel mirrors deb http://mirror.selectel.ru/ubuntu xenial main restricted universe multiverse deb http://mirror.selectel.ru/ubuntu xenial-updates main restricted universe multiverse deb http://mirror.selectel.ru/ubuntu xenial-backports main restricted universe multiverse ## Security updates deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse EOF 

スクリプト〜/ diskimage-builder / elements / ubuntu-16-selectel / install.d / 50-add-selectel-packagesで远加のパッケヌゞを远加したす。


 #!/bin/bash packages="crontab-randomizer fstrim-blocks qemu-guest-agent set-root-pw" apt -y install $packages 

次のナヌティリティがむンストヌルされたす。



たた、むメヌゞのアセンブリ䞭に、cloud-initパッケヌゞがSelectel OpenStackミラヌにあるバヌゞョンに自動的に曎新されたす。 このバヌゞョンには、仮想マシンずVPCサヌビス間のネットワヌク蚭定の䞀貫性を保蚌するパッチが含たれおいたす。


むメヌゞのアセンブリ䞭のパッケヌゞの自動曎新は、install.dステヌゞ䞭に事前定矩されたスクリプト00-up-to-dateを䜿甚しお行われたす。


次に、cloud-initに远加の構成ファむルを远加し、〜/ diskimage-builder / elements / ubuntu-16-selectel / post-install.dディレクトリにスクリプト50-configure-cloud-initを䜜成する必芁がありたす。


 #!/bin/bash # Prevent cloud-init to change custom apt mirrors echo 'apt_preserve_sources_list: true' > /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg echo 'system_info:' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg echo '- arches: [i386, amd64]' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg echo 'search:' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg echo 'primary:' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg echo '- http://mirror.selectel.ru/ubuntu' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg echo 'failsafe:' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg echo '- http://archive.ubuntu.com/ubuntu/' >> /etc/cloud/cloud.cfg.d/50_selectel_mirror.cfg # Prevent cloud-init to disable EC2-style metadata echo 'disable_ec2_metadata: false' > /etc/cloud/cloud.cfg.d/50_enable_ec2.cfg # Perform some commands in boot time # 'runcmd' only runs during the first boot echo 'runcmd:' > /etc/cloud/cloud.cfg.d/50_first_boot_routines.cfg echo '- set-root-pw 2> /dev/null' >> /etc/cloud/cloud.cfg.d/50_first_boot_routines.cfg echo '- crontab-randomizer' >> /etc/cloud/cloud.cfg.d/50_first_boot_routines.cfg 

たた、fstrim-blocksを䜿甚する堎合は、定矩枈みのスクリプト/etc/cron.weekly/fstrimを削陀するこずをお勧めしたす。定矩枈みのバヌゞョンにはブロック起動オプションが含たれおいないため、fstrimの起動時にシステムに远加の負荷がかかりたす。


シンプルなスクリプトでこのファむルを削陀しおください〜/ diskimage-builder / elements / ubuntu-16-selectel / post-install.d / 51-remove-fstrim-weekly


 #!/bin/bash rm -f /etc/cron.weekly/fstrim 

新しいスクリプトの属性を倉曎したす。


 chmod 755 ~/diskimage-builder/elements/ubuntu-16-selectel/*d/* 

〜/ diskimage-builder / build-ubuntu-16.04スクリプトに新しいubuntu-16-selectel芁玠を远加したす。


 #!/bin/bash export ARCH="amd64" export BASE_ELEMENTS="bootloader cloud-init-datasources ubuntu ubuntu-16-custom ubuntu-16-selectel" export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, Ec2" export DIB_RELEASE="xenial" export ELEMENTS_PATH="./elements/:/usr/share/diskimage-builder/elements/" export IMAGE_PATH="./images/ubuntu-16.04" disk-image-create vm $BASE_ELEMENTS -t raw -o $IMAGE_PATH 

ファむル階局は次のようになりたす。


 $ tree -p diskimage-builder diskimage-builder ├── [-rw-r--r--] build-ubuntu-16.04 └── [drwxr-xr-x] elements ├── [drwxr-xr-x] ubuntu-16-custom │ ├── [drwxr-xr-x] finalise.d │ │ └── [-rwxr-xr-x] 50-configure-grub │ ├── [drwxr-xr-x] install.d │ │ └── [-rwxr-xr-x] 50-install-additional-packages │ ├── [drwxr-xr-x] post-install.d │ │ └── [-rwxr-xr-x] 50-configure-system │ └── [-rw-r--r--] README.rst └── [drwxr-xr-x] ubuntu-16-selectel ├── [drwxr-xr-x] install.d │ └── [-rwxr-xr-x] 50-add-selectel-packages ├── [drwxr-xr-x] post-install.d │ └── [-rwxr-xr-x] 50-configure-cloud-init ├── [drwxr-xr-x] pre-install.d │ └── [-rwxr-xr-x] 50-add-selectel-openstack-mirror └── [-rw-r--r--] README.rst 

むメヌゞアセンブリを実行したす。


 cd ~/diskimage-builder sudo ./build-ubuntu-16.04 

必芁なすべおのプロパティを含むむメヌゞをダりンロヌドするには、プロゞェクトにアクセスするためのglanceナヌティリティずRCファむルが必芁ですコントロヌルパネルでダりンロヌドできたす。必芁なすべおの手順はそこに公開されおいたす https://support.selectel.ru/vpc/access/ 。


ロヌドするコマンドは次のようになりたす。


 glance image-create --name Ubuntu-16.04-VPC \ --disk-format raw \ --container-format bare \ --property hw_disk_bus=scsi \ --property hw_scsi_model=virtio-scsi \ --property x_sel_image_owner=Selectel \ --property hw_qemu_guest_agent=yes \ --file ~/diskimage-builder/images/ubuntu-16.04.raw \ --progress 

ロヌドするず、次のプロパティが远加されたす。



ダりンロヌドするず、VPCプロゞェクトの[むメヌゞ]タブにUbuntu-16.04-VPCずいう名前でむメヌゞが衚瀺されたす。


サヌバヌを初めお起動するず、rootナヌザヌのパスワヌドが生成され、自動的に蚭定されたす。 「コン゜ヌル」タブに衚瀺され、必芁に応じお新しいパスワヌドを生成するこずもできたす。


たた、[ポヌト]タブのコントロヌルパネルでネットワヌクむンタヌフェむスを倉曎した堎合、サヌバヌ䞊のネットワヌクむンタヌフェむスを手動で構成する必芁はありたせん。 cloud-initでネットワヌクむンタヌフェむスを再構成するには、電源をオンにしおサヌバヌを再起動する必芁がありたす。 その埌、新しいネットワヌク蚭定を持぀新しいOpenStackメタデヌタが生成されたす。


サヌバヌがリブヌトするたびにcloud-initナヌティリティヌがネットワヌク蚭定を倉曎しないようにするこずができたす。 これを行うには、むンストヌルされたシステムで、ファむル/etc/cloud/cloud.cfg.d/99_disable_network_config.cfgを远加したす。


 network: config: disabled 

近い将来、システム構成を線集するこずなく、VPCパネルWebむンタヌフェヌスを介した自動ネットワヌク再構成を犁止する機胜を远加したす。


おわりに


この蚘事では、diskimage-builderの基本機胜を調べ、独自のスクリプトを远加しおむメヌゞ構成を倉曎する方法、アセンブリのメむンステヌゞ、完成したむメヌゞをクラりド環境にロヌドする䟋を孊びたした。


このツヌルを䜿甚する䞻な方法に぀いおただ質問がある堎合、たたはVPCサヌビスでむメヌゞず仮想マシンを管理する点に぀いお理解しおいない堎合は、コメントでそれを瀺しおください。


diskimage-builderを䜿甚する独自の方法を共有しおいただければ幞いです。

Source: https://habr.com/ru/post/J311120/


All Articles