proxmoxでリベンジしました
はじめに
このエントリではESXi上にCentOS7(1810)を同一構成で多数展開する方法を記載 します したかったのですが、中途半端に終わりました。
テンプレートからのクローンや、vCenterがない場合の丸ごとコピーなど、仮想マシンの作成後にIPアドレス、ホスト名の修正箇所しても、ESXiホスト上やゲストOSの根っこのほうでインストール時のパラメータを持っててしまい、動作に影響がでるのかも?
と、おもったので、仮想マシンを新規作成してISOからインストールしたものを、省エネかつ同一環境の多数展開できるような力技を考えました。
が、あまり省力化できなかった。。。
対象機器および環境
- ESXi(6.5 Update1)
- Centos7(Ver18.10)
要件
テストなどの検証環境に利用したりするので、「まったく同一の環境」が欲しいとします。
最小インストールしたのでは、必要なパッケージが入りません。
かといってインストール作業時に必要なパッケージをポチポチするのも面倒。
だし、「あれ?さっきどれ入れたっけ?」病がでるので、再現性が重要。
本番も検証もサーバ用途になるので、IPは固定じゃなきゃダメ。
考え方
kickstart用にインストールISOファイルを修正 → これをkickstartのマスタISOにする。
マスタISOを修正して、展開ホスト用にパラメータ修正したインストールISOをマスタISOから生成する。
そのISOを利用してVMを作成→電源ONすれば、自動的にゲストが展開される。
構成要素
- CentOS7のインストールISO
- isolinux.cfg(自動起動用コンフィグ)
- ks.cfg(Kickstart用コンフィグ)
-
PowerCLI(コマンドラインでESXiを操作するため)← ライセンス(?)の関係でダメだった
インストール状態で、ある程度利用したいので、以下のパッケージも全自動でインストールできるようにする。
- open-vm-tools
- mlocate
- screen
- lftp
- tcpdump
- unzip
- vim
- wget
- epelリポジトリ
あと、firewallDはSSH以外のポリシーを消すのも、自動処理にいれました。
Kickstart用ISOファイルの作成
CentOSのインストールISOをまるごとコピーして作業する
近くのミラーからダウンロード
CentOS Mirror
下記の例では ftp.riken.jp
からダウンロードしています。
ダウンロードしたらマウントして中身を別ディレクトリに丸ごとコピーします。
ここでkickstartマスタイメージの作成を行います。
mkdir -p /root/work/kickstart/mnt
cd /root/work/kickstart/
wget http://ftp.riken.jp/Linux/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso
mount -t iso9660 -o loop ./CentOS-7-x86_64-Minimal-1810.iso ./mnt
cp -rp ./mnt ./ks
umount ./mnt
rm -f ./CentOS-7-x86_64-Minimal-1810.iso
マスター用Kickstartコンフィグ
ここでは、マスター用のkickstartコンフィグを作成します。
さいしょにマスター用KickstartのISOを作成しておき、展開時にアドレスやホスト名のみ修正したISOを作成し、利用するようにします。
以下のコンフィグでは、インストール完了後に自動的に yum update -y
を実行させています。
検証環境などで、いつ作成しても、常に同じパッケージのみが導入されている状態にしたい場合、そのあたりを除外したほうがよいかもです。
kickstartコンフィグ
# System authorization information
auth --enableshadow --passalgo=sha512
# Install OS instead of upgrade
install
# Use CDROM installation media
cdrom
# Use text mode install
text
firstboot --disable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=jp --xlayouts='jp'
# System language
lang ja_JP.UTF-8
# Network information
network --bootproto=static --device=ens192 --gateway=10.254.10.254 --hostname=VMinfraserv00.prosper2.net --ip=10.254.10.100 --nameserver=10.254.10.231,10.254.10.232 --netmask=255.255.255.0 --noipv6 --activate
# Reboot after installation
reboot --eject
# Root password
rootpw --iscrypted $6$mUcdnvhr0AoBlPsi$eZ5RAc/Y06s0eQna.S32UlByCvkjqj6LBg8fUB2QxNMpP.Na5HnnDp2TOGNtfuzE2i6k1.Hu7ktAi3WqEtc6U0
# SELinux configuration
selinux --disabled
# System services
services --enabled="chronyd,firewalld"
# Do not configure the X Window System
skipx
# System timezone
timezone Asia/Tokyo --isUtc
user --groups=wheel --name=nteam --password=$6$uKHSpxHoKWtyQTgG$cDSsLr462JXKZMLhHBBQwW6kPo0CCKzeJAhZJ2Yx5Fp78TdfD3kR88r5Jy5jg9pT644bjWFIldODGgpU1mwXj/ --iscrypted --gecos="nteam"
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --none --initlabel
%post --logfile=/root/ks.post.log
yum update -y
yum install epel-release -y
yum install net-snmp net-snmp-utils screen lftp tcpdump unzip vim wget open-vm-tools mlocate -y
updatedb
firewall-offline-cmd --remove-service=dhcpv6-client
firewall-offline-cmd --add-service=snmp
cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig
cat <<EOF >>/etc/snmp/snmpd.conf
com2sec p2user default rocommunity
group p2group v2c p2user
view p2view included .1
access p2group "" any noauth exact p2view none none
EOF
systemctl enable snmpd
systemctl start snmpd
%end
%packages
@^minimal
@core
chrony
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
起動時メニュー表示用のisolinux.cfg
もとISOに isolinux.cfg
があるが、中身は削除して以下に置き換える。
timeout 600
default setup
label setup
menu default
kernel vmlinuz
append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img text
ISOファイルの生成
作業用フォルダからISOファイルを作成してマスタとして保管しておきます。
マスターを作成した作業用フォルダはまぎらわしいので、いったん削除しておきます。
mkisofs -J -r -o ./centos7ksmaster.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./ks
rm -rf ./ks
実機用のインストーラを作成
一度マスタのISOを作成しておけば、展開するたびにアドレスとホスト名を修正したISOを生成すればよいです。
実機パラメータ
以下の実機用に修正するものとします。
項目 | 値 |
---|---|
FQDN | VMinfraserv01.prosper2.net |
IF | ens192 |
IP | 10.254.10.101 |
Mask | 255.255.255.0 |
GW | 10.254.10.254 |
DNS Pri | 10.254.10.231 |
DNS Sec | 10.254.10.232 |
domain | prosper2.net |
IPv6 | 無効 |
マスタを作業フォルダにコピー
cd /root/work/kickstart/
mount -t iso9660 -o loop ./centos7ksmaster.iso ./mnt
cp -rp mnt ksmod
umount ./mnt
パラメーラ修正
sed -i -e 's/VMinfraserv00/VMinfraserv01/' ./ksmod/isolinux/ks.cfg
sed -i -e 's/10.254.10.100/10.254.10.101/' ./ksmod/isolinux/ks.cfg
ISOを生成してESXiに転送する。
mkisofs -J -r -o ./VMinfraserv01_10.254.10.101.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./ksmod
scp ./VMinfraserv01_10.254.10.101.iso esxi01:/vmfs/volumes/local_ds01/images/
rm -f ./VMinfraserv01_10.254.10.101.iso
rm -rf ./ksmod
ESXiで仮想マシンを展開(失敗編)
コマンドラインで操作するため、PowerCLIをインストールする。
PowerCLIはMSのPowerShellが必要らしい
# curl https://packages.microsoft.com/config/rhel/7/prod.repo tee | /etc/yum.repos.d/microsoft.repo
# yum install powershell
# pwsh
(で、PowerShellになる)
PS /root> Install-Module -Name VMware.PowerCLI
PS /root> Set-PowerCLIConfiguration -InvalidCertificateAction Ignore
インストール時に、「信頼されていないリポジトリからモジュールをインストールしようとしています。」とかでるので、許可してあげる。
PowerCLIでESXiに接続
PS /root> Connect-VIServer [-Server] <String[]> [-User <String>] [-Password <String>]
Name Port User
---- ---- ----
esxi01 443 root
PS /root> get-vm
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
VMwin01 PoweredOff 4 4.000
vMA PoweredOff 1 0.500
VMwinserv02 PoweredOn 4 2.000
vGNS3 PoweredOff 4 4.000
VMwinserv01 PoweredOn 2 2.000
VMwindows01 PoweredOn 4 4.000
VMwlc01 PoweredOn 2 8.000
VMcheck01 PoweredOn 2 2.000
VMnetserv01 PoweredOn 1 1.000
PS /root> new-vm -name VMinfraserv01 -vmhost esxi01 -Datastore local_ds01 -NumCpu 8 -DiskGB 8 -MemoryGB 1 -DiskStorageFormat thin -CD -GuestId centos7_64Guest -NetworkName PG_GuestOS_V0010
new-vm : 2019/01/12 20:19:50 New-VM Current license or ESXi version prohibits execution of the requested operation.
At line:1 char:1
+ new-vm -name VMinfraserv01 -vmhost esxi01 -Datastore local_ds01 -Num ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-VM], RestrictedVersion
+ FullyQualifiedErrorId : Client20_VmServiceImpl_NewVM_ViError,VMware.VimAutomation.ViCore.Cmdlets.Commands.NewVM
ま、まじか。
ライセンスがないとだめってこと?
ESXiで仮想マシンを展開(妥協編)
いたしかたない。
無事にインストールできていました。
なんども中途半端。。。
おわりに
感想
最後までコマンドラインでやりたかったのですが、ESXiのライセンス(?)が無く全自動まではこぎつけられませんでした。
あぁ、残念。
vim-cmd で VMXファイル自動生成して~ という方法がありそうですが、ちょっと自分にはハードルが高いです。。。
出典
https://www.certdepot.net/rhel7-get-started-firewalld/
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/installation_guide/sect-kickstart-syntax
https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-6#centos-7
https://code.vmware.com/doc/preview?id=5975#/doc/New-VM.html