元ネタはこちら
https://blah.cloud/kubernetes/creating-an-ubuntu-18-04-lts-cloud-image-for-cloning-on-vmware/
本人は、MACでやっている様子だが、自分はUbuntu Linux 18.04でやってみた。書いているのはMACなんだけどねぇ。
Ubuntu Linux 18.04で実行
以下をインストールして、使えるようにしておく。
Powershell
https://github.com/PowerShell/PowerShell
PowerCLI – pwsh then Install-Module -Name VMware.PowerCLI -Scope CurrentUser
https://code.vmware.com/web/dp/tool/vmware-powercli
govc
https://github.com/vmware/govmomi/tree/master/govc
自分の環境はgovcだけ入っていなかったので、以下の方法で入れてみた。
以下はrootで実行
sudo -i
URL_TO_BINARY =https://github.com/vmware/govmomi/releases/download/prerelease-v0.22.1-247-g770fcba2/govc_linux_amd64.gz
curl -L $URL_TO_BINARY | gunzip > /usr/local/bin/govc
chmod +x /usr/local/bin/govc
exit
以下から一般ユーザで実行
パラメータを入れる。
cat << ‘EOF’ > govcvars.sh
export GOVC_INSECURE=1 # Don’t verify SSL certs on vCenter
export GOVC_URL=VCのFQDN # vCenter IP/FQDN
export GOVC_USERNAME=administrator@vsphere.local # vCenter username
export GOVC_PASSWORD=Password # vCenter password
export GOVC_DATASTORE=データストア名# Default datastore to deploy to
export GOVC_NETWORK=”VM Network” # Default network to deploy to
export GOVC_RESOURCE_POOL=’*/Resources‘ # Default resource pool to deploy to
EOF
source govcvars.sh
リソースプールの場所は念のため、以下のコマンドで確かめておいて、govcvars.shのリソースプールを修正しておいたほうがいいかも。
govc find / -type p
/Datacenter/host/Compute/Resources
/Datacenter/host/192.168.1.121/Resources
govc about
Name: VMware vCenter Server
Vendor: VMware, Inc.
Version: 6.7.0
Build: 16046713
OS type: linux-x64
API type: VirtualCenter
API version: 6.7.3
Product ID: vpx
UUID: b4ef3c73-918e-4ea6-9f3c-0c8039eb4035
Ubuntu18.04のクラウドイメージをダウンロードしておく。ISOイメージではない。
curl -L -O https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.ova
govc import.spec ~/ubuntu-18.04-server-cloudimg-amd64.ova | python3 -m json.tool > ubuntu.json
hostname, public-keys, Password, Network and Nameを変更
public-keysを追加しないと初回起動にログインができない。
vi ubuntu.json
{
“DiskProvisioning”: “flat”,
“IPAllocationPolicy”: “dhcpPolicy”,
“IPProtocol”: “IPv4”,
“PropertyMapping”: [
{
“Key”: “instance-id”,
“Value”: “id-ovf”
},
{
“Key”: “hostname”,
“Value”: “Ubuntu1804Template“
},
{
“Key”: “seedfrom”,
“Value”: “”
},
{
“Key”: “public-keys”,
“Value”: “ssh-rsa AA[省略]AA user@example.com“
},
{
“Key”: “user-data”,
“Value”: “”
},
{
“Key”: “password”,
“Value”: “Password“
}
],
“NetworkMapping”: [
{
“Name”: “VM Network”,
“Network”: “VM Network“
}
],
“MarkAsTemplate”: false,
“PowerOn”: false,
“InjectOvfEnv”: false,
“WaitForIP”: false,
“Name”: “Ubuntu1804Template“
}
govc import.ova -options=ubuntu.json ~/ubuntu-18.04-server-cloudimg-amd64.ova
govc: path ‘*/Resources’ resolves to multiple resource poolsと表示されたらgovcvar.shのリソースプールの設定がおかしい
[31-05-20 06:47:55] Warning: Line 107: Unable to parse ‘enableMPTSupport’ for attribute ‘key’ on element ‘Config’.
[31-05-20 06:48:36] Uploading ubuntu-bionic-18.04-cloudimg.vmdk… OK
成功するとVMがインポートされているはず。
#k8sでは、disk.enableUUIDの設定が必要らしい。
govc vm.change -vm Ubuntu1804Template -c 4 -m 4096 -e=”disk.enableUUID=1″
# VM のサイズは4 vCPUs, 4GB RAM, 60GB disk k8sでは最低2vCPU 4GB 20GB以上必要
govc vm.disk.change -vm Ubuntu1804Template -disk.label “Hard disk 1” -size 60G
仮想マシンの電源をオン
govc vm.power -on=true Ubuntu1804Template
仮想マシンのIPが取れるまでwatchコマンドで確認
watch -n 10 govc vm.info Ubuntu1804Template
Every 10.0s: govc vm.info Ubuntu1804Template service: Sun May 31 06:50:37 2020
Name: Ubuntu1804Template
Path: /Datacenter/vm/Ubuntu1804Template
UUID: 42375c71-53aa-5ae7-b512-6d6dee49eef0
Guest name: Ubuntu Linux (64-bit)
Memory: 4096MB
CPU: 4 vCPU(s)
Power state: poweredOn
Boot time: 2020-05-31 06:49:37.473993 +0000 UTC
IP address: 192.168.1.99
Host: 192.168.1.121
IP addressが表示されたらCtrl-Cでwatchを終了する。
ssh ubuntu@192.168.1.99
初回ログイン時に、パスワードを変更させられる、ubuntu.jsonで指定したパスワードを入力した後、新しいパスワードを設定する。
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for ubuntu.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Connection to 192.168.1.99 closed.
再度ログイン
ssh ubuntu@192.168.1.99
今度はsshのキーでログインしているのでパスワードは聞かれない
sudo apt update
sudo apt install open-vm-tools -y
sudo apt upgrade -y
sudo apt autoremove -y
cloud-initの代わりにVMware Guest Customisationを使う
sudo cloud-init clean –logs
sudo touch /etc/cloud/cloud-init.disabled
sudo rm -rf /etc/netplan/50-cloud-init.yaml
sudo apt purge cloud-init -y
sudo apt autoremove -y
スタートアップスクリプトの修正とVMware Customisationが動くようにopen-vm-tools を調整
# /tmpをクリーンにしない
sudo sed -i ‘s/D \/tmp 1777 root root -/#D \/tmp 1777 root root -/g’ /usr/lib/tmpfiles.d/tmp.conf
# open-vm-toolsが依存するcloud-initとdbusを削除
sudo sed -i ‘s/Before=cloud-init-local.service/After=dbus.service/g’ /lib/systemd/system/open-vm-tools.service
テンプレートVMのクリーンナップ
# cleanup current ssh keys so templated VMs get fresh key
sudo rm -f /etc/ssh/ssh_host_*
# 再起動時にsshキーの存在を確認して、無いなら再作成。ヒアドキュメントなので、EOLまでコピペ。
sudo tee /etc/rc.local >/dev/null <<EOL
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will “” on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
test -f /etc/ssh/ssh_host_dsa_key || dpkg-reconfigure openssh-server
exit 0
EOL
# rc.localファイルに実行権限をつける
sudo chmod +x /etc/rc.local
# aptのクリーンナップ
sudo apt clean
# machine-idのリセット (18.04はDHCPリース時にはこれでmachine-idを再作成をする。MACアドレスではない。)
echo “” | sudo tee /etc/machine-id >/dev/null
# K8sを使う場合は、Swapをオフにする
sudo swapoff –all
sudo sed -ri ‘/\sswap\s/s/^#?/#/’ /etc/fstab
# historyをクリーンナップしてシャットダウン
history -c
history -w
sudo shutdown -h now
VMテンプレート化する
govc vm.markastemplate Ubuntu1804Template
VM Guest Customisationの定義
PowerCLIでvCenterに接続する
Connect-VIServer VCのFQDN -User administrator@vsphere.local -Password Password
Name Port User
—- —- —-
vc.hogehoge.exmaple.com 443 VSPHERE.LOCAL\Administrator
New-OSCustomizationSpec -Name Ubuntu -OSType Linux -DnsServer 192.168.8.1,192.168.10.1 -DnsSuffix lab.example.com -Domain lab.example.com -NamingScheme vm
Name Description Type OSType LastUpdate Server
—- ———– —- —— ———- ——
Ubuntu Persistent Linux 05/31/2020 07:15:27 vc.hogehoge.exmaple.com
exit
クローンしてみる
govc vm.clone -vm Ubuntu1804Template -customization=Ubuntu k8s-master
govc vm.clone -vm Ubuntu1804Template -customization=Ubuntu k8s-worker1
govc vm.clone -vm Ubuntu1804Template -customization=Ubuntu k8s-worker2
govc vm.clone -vm Ubuntu1804Template -customization=Ubuntu k8s-worker3
[31-05-20 07:20:54] Cloning /Datacenter/vm/Ubuntu1804Template to k8s-master…OKみたいなメッセージが出れば成功。vCenterの画面で確認。
VMの情報確認。IPアドレスを調べてSSHでログイン
govc vm.info k8s-master| grep “IP address”
IP address: 192.168.1.79
govc vm.info k8s-worker1| grep “IP address”
IP address: 192.168.1.86
govc vm.info k8s-worker2| grep “IP address”
IP address: 192.168.1.61
govc vm.info k8s-worker3| grep “IP address”
IP address: 192.168.1.87
sshでログインしてみる。証明書のログインができているからパスワードは聞かれない。VM名がホスト名になっているはず。
ssh ubuntu@192.168.1.79
ssh ubuntu@192.168.1.86
ssh ubuntu@192.168.1.61
ssh ubuntu@192.168.1.87