この年度末に控えているサーバ群の更新に備えて,ESXi 6.7.0 Update 1 (Build 10764712) と vMA 6.5.0 (Build 4569350) と apcupsd の組み合わせを検証してみました.
1. Install vMA
MyVMware から .zip を Download して Hash を確認してから unzip します.
$ shasum -a 256 vMA-6.5.0.0-4569350.zip 1bc25ed3f562f1c222838161cc94dec2b3b9ef0f1bbd7c9cac9860326b6a9501 vMA-6.5.0.0-4569350.zip $ unzip vMA-6.5.0.0-4569350.zip Archive: vMA-6.5.0.0-4569350.zip inflating: vMA-6.5.0.0-4569350-system.vmdk inflating: vMA-6.5.0.0-4569350_OVF10.ovf inflating: vMA-6.5.0.0-4569350_OVF10.mf inflating: vMA-6.5.0.0-4569350_OVF10.cert
ESXi Host Client から Deploy します.4 Files を D&D すると .mf と .cert は表示されませんが進めていきます.
( .mf は .ovf と .vmdk の sha1 Hash 値,.cert には証明書が入っています.)
Deploy 先の Storage を選択,使用許諾契約書に同意して進めると Deploy Option の画面になります.
ここで Network と Disk の Provisioning 種別を選択して次に進みます.
Network 設定画面が表示されるので,環境に合わせて設定します.
設定を確認して Deploy します.
Deploy が完了すると Console から接続できるので Main Menu から設定を確認してみます.
すると,.ovf の Deploy 時に設定した筈の Network 設定がなぜか全て空になっているので,この Menu から再度設定します.
Menu の 6) で IP Address を設定します.今回は IPv4 のみを Static で設定しました.
同様に 2) で Default G/W, 4) で DNS Server を設定します.3) の Hostname はここで設定できます.
完了したら再度 0) で確認します.
1) で Main Menu から抜ける際に vi-admin のパスワード変更を求められるので変更しましょう.
( 初期パスワードは "vmware" です.)
パスワード変更が完了すると Login 画面が表示されるので Login してみましょう.
これで vMA の準備は完了です!
Web UI にも Login してみましょう.
https://サーバ IP or FQDN:5480/ で接続できます.
Web UI では CLI の Menu に無かった Timezone の変更が可能です.
2. UPS の接続
ESXi Host と UPS を USB ケーブルで接続後,vMA に UPS を追加します.
[ その他のデバイスの追加 ] で [ USB デバイス ] を選択します.
[ 新規 USB デバイス ] として Smart-UPS が認識されているので,設定を保存します.
3. apcupsd
vMA の ssh は default 有効なので接続して SuSE のバージョンを確認します.
vi-admin@vma40:~> cat /etc/SuSE-release SUSE Linux Enterprise Server 11 (x86_64) VERSION = 11 PATCHLEVEL = 3
SuSE 11.x 用の .rpm はここから入手できます.
sftp で vMA に upload して Install します.
vi-admin@vma40:/tmp> sudo rpm -ivh /tmp/apcupsd-3.14.8-1.su110.x86_64.rpm vi-admin's password: warning: /tmp/apcupsd-3.14.8-1.su110.x86_64.rpm: Header V4 DSA signature: NOKEY, key ID a81af992 Preparing... ########################################### [100%] 1:apcupsd ########################################### [100%] insserv: warning: script 'S01vmware-vma' missing LSB tags insserv: warning: script 'S01vmware-vifpd' missing LSB tags insserv: warning: script 'vmware-vma' missing LSB tags insserv: warning: script 'vmware-vifpd' missing LSB tags insserv: Service network is missed in the runlevels 4 to use service vmware-studio-provagent apcupsd 0:off 1:off 2:on 3:on 4:off 5:on 6:off
/etc/apcupsd/aapcupsd.conf を編集します.
rpm で install された apcupsd.conf では usb cable が default 値となっているので,とりあえず UPSNAME だけ変更します.
UPSNAME "UPS名"
apcupsd の自動起動設定を確認し,UPS を認識させるために vMA を再起動します.
vi-admin@vma40:/etc/apcupsd> chkconfig --list | grep apcupsd apcupsd 0:off 1:off 2:on 3:on 4:off 5:on 6:off
apcupsd が正しく起動すると apcaccess コマンドで status を確認できます.
vi-admin@vma40:~> sudo /sbin/apcaccess status APC : 001,024,0599 DATE : 2019-01-23 13:12:33 +0900 HOSTNAME : vma40 VERSION : 3.14.8 (16 January 2010) suse UPSNAME : UPS 名 CABLE : USB Cable MODEL : Smart-UPS 3000 UPSMODE : Stand Alone STARTTIME: 2019-01-23 13:12:32 +0900 STATUS : ONLINE BCHARGE : 100.0 Percent TIMELEFT : 75.0 Minutes MBATTCHG : 5 Percent MINTIMEL : 3 Minutes MAXTIME : 0 Seconds ALARMDEL : Always NUMXFERS : 0 TONBATT : 0 seconds CUMONBATT: 0 seconds XOFFBATT : N/A STATFLAG : 0x07000008 Status Flag SERIALNO : J11813110464 FIRMWARE : UPS 09.3 / ID=18 APCMODEL : Smart-UPS 3000 END APC : 2019-01-23 13:12:35 +0900
4. ESXi Shutdown Script
仮想マシンを Shutdown し,メンテナンスモードに変更してから Host を Shutdown する Script を作成します.
VMTN の script shutdown vms and host.sh |VMware Communities が参考になります.
なお,ESXi が再起動しても Script が残るように今回は Datastore 中に作成しています.
Script を Host 上から実行して Shutdown の動作を確認しておきます.
[root@hostname:~] /vmfs/volumes/DatastoreNVMe/apcupsd_shutdown.sh
5. 公開鍵認証で ssh させる
vMA から Shutdown Script を実行させるため ESXi 側で鍵ペアを passphrase 無しで作成します.
(Host 再起動すると .ssh ディレクトリごと消えてしまうので注意してください.)
(参考)https://kb.vmware.com/s/article/1002866
[root@hostname:~] /usr/lib/vmware/openssh/bin/ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (//.ssh/id_rsa): Created directory '//.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in //.ssh/id_rsa. Your public key has been saved in //.ssh/id_rsa.pub. The key fingerprint is: SHA256:+waMBF4l5WfDBMGFdd8eB/327ghT+rzLeR_SAMPLE_1WZM root@hostname The key's randomart image is: +---[RSA 2048]----+ | .+=*+ . .. | | . .ooo . . o.| | . o . = ..+| | . . o . o*| | . oS .o*| | . o. ooE+| | .. ++ ++| | .. +*.++| | ..o O=.| +----[SHA256]-----+
公開キーを /etc/ssh/keys-root/authorized_keys として配置します.
[root@hostname:/.ssh] pwd /.ssh [root@hostname:/.ssh] ls -al total 16 drwx------ 1 root root 512 Jan 24 05:41 . drwxr-xr-x 1 root root 512 Jan 24 05:41 .. -rw------- 1 root root 1704 Jan 24 05:41 id_rsa -rw-r--r-- 1 root root 395 Jan 24 05:41 id_rsa.pub [root@hostname:/.ssh] cp -p ./id_rsa.pub /etc/ssh/keys-root/authorized_keys [root@hostname:/.ssh] ls -al /etc/ssh/keys-root/ total 12 drwxr-xr-x 1 root root 512 Jan 24 05:51 . --w------- 1 root root 0 Nov 8 07:20 .#authorized_keys drwxr-xr-x 1 root root 512 Jan 24 04:02 .. -rw-r--r-- 1 root root 395 Jan 24 05:41 authorized_keys
root の read のみ許可にしておきます.
[root@hostname:/etc/ssh/keys-root] chmod 400 authorized_keys
次に秘密鍵を使って vMA から ESXi に接続してみます.vi-admin の home に .ssh ディレクトリを作成して Host の秘密鍵を esxi_id_rsa として保存しました.
vi-admin@vma40:~> ssh -i /home/vi-admin/.ssh/esxi_id_rsa root@FQDN The authenticity of host 'FQDN (IP Address)' can't be established. RSA key fingerprint is be:e2:eb:26:b7:e6:XX:d1:56:b1:8b:79:bc:37:8c:4b [MD5]. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'FQDN,IP Address' (RSA) to the list of known hosts. The time and date of this login have been sent to the system logs. WARNING: All commands run on the ESXi shell are logged and may be included in support bundles. Do not provide passwords directly on the command line. Most tools can prompt for secrets or accept them from standard input. VMware offers supported, powerful system administration tools. Please see www.vmware.com/go/sysadmintools for details. The ESXi Shell can be disabled by an administrative user. See the vSphere Security documentation for more information. [root@hostname:~]
うまく接続できているので,Host 上の Script を実行してみます.
vi-admin@vma40:~> ssh -i /home/vi-admin/.ssh/esxi_id_rsa root@FQDN /vmfs/volumes/DatastoreNVMe/apcupsd_shutdown.sh Shutdown VM 4 Broadcast message from root (Thu Jan 24 15:43:42 2019): The system is going down for system halt NOW! Connection to "vMA IP Address" closed by remote host. Connection to "vMA IP Address" closed.
最後に vMA 上の /etc/apcupsd/apccontrol を編集します.
105 doshutdown) 106 echo "UPS ${2} initiated Shutdown Sequence" | ${WALL} 107 /usr/bin/ssh -i /home/vi-admin/.ssh/esxi_id_rsa root@FQDN /vmfs/volumes/DatastoreNVMe/apcupsd_shutdown.sh 108 ${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown" 109 ;;
6. 動作確認
apcupsd.conf で MINUTES の値を実際の TIMELEFT 値より大きく設定し,UPS に給電停止したらすぐ shutdown するようにして動作確認します.
今回ここで嵌りました.
まず,apcupsd の process owner は root なので,/home/vi-admin/.ssh/esxi_id_rsa を 0440 にしたのですが,ESXi 側の ssh 接続で失敗します.
直接コマンド実行すると,Permission が緩いと警告が出ているので,これが阻害要因だったようです.
vi-admin@vma40:/etc/apcupsd> /usr/bin/ssh -i /home/vi-admin/.ssh/esxi_id_rsa root@FQDN /vmfs/volumes/DatastoreNVMe/apcupsd_shutdown.sh @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0440 for '/home/vi-admin/.ssh/esxi_id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: /home/vi-admin/.ssh/esxi_id_rsa
そこで,/root/.ssh 配下に esxi_id_rsa を配置して Permission 0400 に変更したのですが,これも失敗.
vi-admin ユーザで ssh 接続テストしていたので, root の known hosts に ESXi Host が追加されていないのが原因でした.
これでやっと成功です!
ちなみに,最終的な /etc/apcupsd/apccontrol はこんな感じです.
105 doshutdown) 106 echo "UPS ${2} initiated Shutdown Sequence" | ${WALL} 107 /usr/bin/ssh -i /root/.ssh/esxi_id_rsa root@FQDN /vmfs/volumes/DatastoreNVMe/apcupsd_shutdown.sh 108 ${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown" 109 ;;