Wanneer u naar vSphere implementeert, vereist een statisch IP-adres dat vRealize Automation Cloud Assembly een vSphere-aanpassingsspecificatie genereert, die de cloud-init-opdrachten kan verstoren.
Probleem
- Een vRealize Automation Cloud Assembly-blueprint bevat
assignment: static
om een statisch IP-adres toe te passen op een virtuele vSphere-machine. - De blueprint bevat ook een sectie cloudConfig, die initialisatiecommando's bevat die worden uitgevoerd met cloud-init.
- Om de virtuele machine een statisch IP-adres te geven, genereert vRealize Automation Cloud Assembly dynamisch een vSphere-aanpassingsspecificatie die moet worden toegepast.
- Telkens wanneer een aanpassingsspecificatie wordt toegepast, wordt de virtuele machine opnieuw gestart door de laatste bewerking.
- De aanpassingsspecificatie weet niet dat cloud-init-opdrachten worden uitgevoerd, zodat het opnieuw opstarten wordt onderbroken.
- De cloud-init-opdrachten worden alleen uitgevoerd na de eerste keer opstarten en worden niet automatisch hersteld wanneer ze worden onderbroken.
- De resulterende virtuele machine blijft slechts gedeeltelijk geconfigureerd.
Tijdelijke oplossing
Maak een machinesjabloon die een getimed uitschakelen van cloud-init bevat. Implementeer vervolgens machines op basis van de sjabloon zodat de aanpassingsspecificatie en herstart kunnen plaatsvinden vóór cloud-init.
Voorbeeldprocedure—Ubuntu 18.04
De volgende stappen zijn van toepassing op Ubuntu 18.04. Mogelijk moet u aanpassingen aanbrengen en de ideeën die hier worden weergegeven aanpassen voor andere Linux-versies of -aanbiedingen.
- Maak de virtuele machine en werk deze bij met de gewenste versie-updates en -pakketten.
Houd er rekening mee dat op andere Linux-aanbiedingen cloud-init mogelijk niet vooraf is geïnstalleerd, maar op Ubuntu 18.04 wel.
- Configureer cloud-init opnieuw en stel de gegevensbron in op OVF.
sudo dpkg-reconfigure cloud-init
- Bewerk het volgende bestand.
/etc/cloud/cloud.cfg
- Schakel de traditionele aanpassing van het gastbesturingssysteem (GOSC) in door de volgende regel toe te voegen.
disable_vmware_customization: true
- Zorg ervoor dat de netwerkconfiguratie is ingeschakeld. Verwijder, of maak een opmerking van, de instelling, indien deze bestaat.
network: # config: disabled
U kunt ook alle configuratiebestanden in de volgende directory controleren.
/etc/cloud/cloud.cfg.d/*
Verwijder alle bestanden die een
network: {config: disabled}
-instelling bevatten.
- Schakel de traditionele aanpassing van het gastbesturingssysteem (GOSC) in door de volgende regel toe te voegen.
- Bewerk het volgende bestand.
/usr/lib/tmpfiles.d/tmp.conf
- Voorkom dat de tijdelijke directory wordt gewist door een opmerking te maken van de instelling.
# D /tmp 1777 root root –
- Voorkom dat de tijdelijke directory wordt gewist door een opmerking te maken van de instelling.
- Bewerk het volgende bestand.
/lib/systemd/system/open-vmtools.service
- Configureer open-vmtools om te starten na dbus.service door de volgende regel toe te voegen onder de sectie
[Unit]
.After=dbus.service
- Configureer open-vmtools om te starten na dbus.service door de volgende regel toe te voegen onder de sectie
- Maak een nieuw, leeg bestand dat cloud-init uitschakelt.
sudo touch /etc/cloud/cloud-init.disabled
- Maak een re_init.sh-script. Na een cron-taakvertraging die de aanpassingsspecificatie onderbreekt, schakelt het script cloud-init opnieuw in en initialiseert het deze.
sudo rm -rf /etc/cloud/cloud-init.disabled sudo cloud-init init sleep 20 sudo cloud-init modules --mode config sleep 20 sudo cloud-init modules --mode final
- Voeg het uitvoeringsrecht voor het script toe.
sudo chmod +x re_init.sh
- Maak de cron-taak die na 90 seconden slaapstand wordt uitgevoerd bij het opstarten. Typ
crontab -e
en voer het volgende in:@reboot ( sleep 90 ; sh /script_path/delay_init.sh )
U kunt meer dan 90 seconden toepassen als de aanpassingsspecificaties en het opnieuw opstarten langer duren.
- Maak een cleaner.sh-script dat de sjabloon wist. Vervang
cloudadmin
door uw eigen gebruiker die u instelt tijdens de installatie van het besturingssysteem.Het voorbeeldscript is specifiek voor Ubuntu. Als u een script voor andere Linux-aanbiedingen wilt maken, moet u ervoor zorgen dat u de gemarkeerde, verplichte secties toevoegt.
#!/bin/bash # Add usernames to add to /etc/sudoers for passwordless sudo users=("ubuntu" "cloudadmin") for user in "${users[@]}" do cat /etc/sudoers | grep ^$user RC=$? if [ $RC != 0 ]; then bash -c "echo \"$user ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers" fi done #grab Ubuntu Codename codename="$(lsb_release -c | awk {'print $2}')" #Stop services for cleanup service rsyslog stop #clear audit logs if [ -f /var/log/audit/audit.log ]; then cat /dev/null > /var/log/audit/audit.log fi if [ -f /var/log/wtmp ]; then cat /dev/null > /var/log/wtmp fi if [ -f /var/log/lastlog ]; then cat /dev/null > /var/log/lastlog fi #cleanup persistent udev rules if [ -f /etc/udev/rules.d/70-persistent-net.rules ]; then rm /etc/udev/rules.d/70-persistent-net.rules fi #cleanup /tmp directories rm -rf /tmp/* rm -rf /var/tmp/* #cleanup current ssh keys #rm -f /etc/ssh/ssh_host_* #cat /dev/null > /etc/hostname #cleanup apt apt-get clean #Clean Machine ID truncate -s 0 /etc/machine-id rm /var/lib/dbus/machine-id ln -s /etc/machine-id /var/lib/dbus/machine-id #Clean Cloud-init cloud-init clean --logs --seed #cleanup shell history history -w history -c
- Voeg het uitvoeringsrecht toe voor het opschoningsscript van de sjabloon toe.
sudo chmod +x cleaner.sh
- In Ubuntu 18.04 heeft het opschoningsscript rootrechten nodig. Bewerk het volgende bestand.
/etc/ssh/sshd_config
- Zorg ervoor dat u kunt overschakelen naar de rootgebruiker.
PermitRootLogin yes
- Stel een wachtwoord in voor root.
sudo passwd root
- Zorg ervoor dat u kunt overschakelen naar de rootgebruiker.
- Voer het opschoningsscript uit.
sudo ./script_path/cleaner.sh
- (Optioneel) Omwille van de beveiliging draait u stap 12 terug om verdere rootaanmeldingen te voorkomen.
- Sluit de virtuele machine af en gebruik vSphere om er een sjabloon van te maken.
Sjabloonupdates
De cron-taak wordt uitgevoerd telkens wanneer u de sjabloon bijwerkt. Als uw update langer duurt dan de vertraging (bijvoorbeeld 90 seconden), moet u het bestand /etc/cloud/cloug-init.disabled
opnieuw toevoegen en het opschoningsscript opnieuw uitvoeren voordat u de sjabloon afsluit. Anders wordt cloud-init niet uitgeschakeld tijdens de eerste keer opstarten en gaat het opnieuw starten van de aanpassingsspecificatie terug naar het onderbreken van de cloud-init-opdrachten.
Problemen oplossen
Als u vermoedt dat de vSphere-aanpassingsspecificatie het voltooien van cloud-init verhindert, schakelt u tijdelijk de aanpassingsspecificatie uit en bepaalt u of cloud-init correct kan eindigen. Om de aanpassingsspecificatie tijdelijk uit te schakelen, gebruikt u de eigenschap customizeGuestOS: false
.
properties: image: ubuntu cpuCount: 1 totalMemoryMB: 8192 customizeGuestOS: false