Cześć wszystkim, nazywam się Ivan i jestem alkoholikiem administratorem systemów (OPS).
Chciałbym opowiedzieć, jak uruchamiam maszyny wirtualne na ESXi bez vCenter przy użyciu Terraform.
Często muszę uruchamiać / odtwarzać wirtualki, aby przetestować różne aplikacje. Z powodu lenistwa pomyślałem o automatyzacji tego procesu. Moje poszukiwania doprowadziły mnie do wspaniałego produktu firmy , .
Myślę, że wiele osób wie, czym jest Terraform, a kto nie wie, to jest to aplikacja do zarządzania każdą chmurą, infrastrukturą lub usługą, wykorzystująca koncepcję IasC (Infrastruktura jako kod).
Jako środowisko wirtualizacji używam ESXi. Dość prosty, wygodny i niezawodny.
Przewiduję pytanie.
Po co używać terraform, skoro można używać vCenter Server?
Można, ale. Po pierwsze, to dodatkowa licencja, po drugie, ten produkt jest bardzo zasobożerny i po prostu nie zmieści się na moim domowym serwerze, a po trzecie, to możliwość rozwijania umiejętności.
Jako serwer pełni platforma Intel NUC:
CPU: 2 rdzenie x Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
RAM: 8GB
HDD: 500GB
wersja ESXi: ESXi-6.5.0-4564106-standard (VMware, Inc.)A więc, wszystko po kolei.
Na początek skonfigurujmy esxi, a mianowicie otwórzmy port VNC w ustawieniach zapory.
Domyślnie plik jest zabezpieczony przed zapisem. Wykonujemy następujące działania:
chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml
vi /etc/vmware/firewall/service.xmlNa końcu pliku dodajemy następujący blok:
packer-vnc
inbound
tcp
dst
5900
6000
true
trueWychodzimy, zapisujemy. Zmiana praw z powrotem i restart usługi:
chmod 444 /etc/vmware/firewall/service.xml
esxcli network firewall refreshAktualne do ponownego uruchomienia hosta. Po tym działaniu trzeba będzie je powtórzyć.
Dalej całą pracę będę wykonywał w maszynie wirtualnej na tym samym serwerze.
Specyfikacje:
OS: Centos 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: wyłączony
firewalld: wyłączonyNastępnie potrzebujemy , również produktu firmy HashiCorp.
Jest potrzebny do automatycznej budowy 'złotego' obrazu. Który będziemy używać w przyszłości.
yum install unzip git -y
curl -O https://releases.hashicorp.com/packer/1.5.5/packer_1.5.5_linux_amd64.zip
unzip packer_1.5.5_linux_amd64.zip -d /usr/bin && rm -rf packer_1.5.5_linux_amd64.zip
packer version
Packer v1.5.5Na kroku packer version może wystąpić błąd, ponieważ w RedHat-based może znajdować się pakiet o tej samej nazwie.
which -a packer
/usr/sbin/packerAby rozwiązać problem, można utworzyć dowiązanie symboliczne lub użyć ścieżki bezwzględnej /usr/bin/packer.
Teraz będziemy potrzebować ovftool . Pobieramy, umieszczamy na serwerze i instalujemy:
chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Rozpakowywanie instalatora VMware... gotowe.
Musisz zaakceptować umowę licencyjną dla końcowych użytkowników narzędzia VMware OVF dla systemu Linux, aby kontynuować. Naciśnij Enter, aby przejść dalej.
UMOWA LICENCYJNA KOŃCOWEGO UŻYTKOWNIKA VMWARE
Czy się zgadzasz? [yes/no]:yes
Produkt jest gotowy do zainstalowania. Naciśnij Enter, aby rozpocząć instalację lub Ctrl-C, aby anulować.
Instalowanie komponentu VMware OVF Tool dla systemu Linux 4.4.0
Konfiguracja...
[######################################################################] 100%
Instalacja powiodła się.Idziemy dalej.
Na gicie przygotowałem wszystko, co potrzebne.
git clone https://github.com/letnab/create-and-deploy-esxi.git && cd create-and-deploy-esxiDo folderu iso trzeba umieścić dystrybucję systemu operacyjnego. W moim przypadku jest to centos 7.
Musimy także edytować plik centos-7-base.json:
variables: podać swoje dane do połączenia
iso_urls: podać aktualny
iso_checksum: sumę kontrolną swojego obrazu Po wprowadzeniu wszystkich zmian uruchamiamy budowę:
/usr/bin/packer build centos-7-base.jsonJeśli wszystko jest poprawnie skonfigurowane, zobaczysz proces automatycznej instalacji systemu operacyjnego. Ten proces zajmuje mi 7-8 minut.
Po pomyślnym zakończeniu w folderze output-packer-centos7-x86_64 znajdzie się plik ova.
Instalujemy Terraform:
curl -O https://releases.hashicorp.com/terraform/0.12.24/terraform_0.12.24_linux_amd64.zip
unzip terraform_0.12.24_linux_amd64.zip -d /usr/bin/ && rm -rf terraform_0.12.24_linux_amd64.zip
tf version
Terraform v0.12.24Ponieważ Terraform nie ma dostawcy dla ESXi, trzeba go zbudować.
Instalujemy go:
cd /tmp
curl -O https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.14.2.linux-amd64.tar.gz && rm -rf go1.14.2.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version
go version go1.14.2 linux/amd64Następnie budujemy dostawcę:
go get -u -v golang.org/x/crypto/ssh
go get -u -v github.com/hashicorp/terraform
go get -u -v github.com/josenk/terraform-provider-esxi
export GOPATH="$HOME/go"
cd $GOPATH/src/github.com/josenk/terraform-provider-esxi
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags '-w -extldflags "-static"' -o terraform-provider-esxi_`cat version`
cp terraform-provider-esxi_`cat version` /usr/binJesteśmy na ostatniej prostej. Czas na nasz obraz.
Przechodzimy do folderu:
cd /root/create-and-deploy-esxi/centos7Najpierw edytujemy plik variables.tf. Trzeba podać połączenie do serwera ESXi.
W pliku network_config.cfg będą zawierać ustawienia sieciowe przyszłej wirtualnej maszyny. Dostosowujemy je do swoich potrzeb i uruchamiamy jednoliniowy skrypt:
sed -i -e '2d' -e '3i "network": "'$(gzip < network_config.cfg| base64 | tr -d 'n')'",' metadata.jsonA w pliku main.tf zmieniamy ścieżkę do pliku ova na naszą, jeśli jest inna.
Moment prawdy.
terraform init
Inicjalizacja backendu...
Inicjalizacja wtyczek dostawców...
Poniżsi dostawcy nie mają żadnych ograniczeń wersji w konfiguracji,
więc zainstalowano najnowszą wersję.
Aby zapobiec automatycznym aktualizacjom do nowych głównych wersji, które mogą zawierać
zmiany łamiące zgodność, zaleca się dodanie ograniczeń wersji = "..." do
odpowiednich bloków dostawców w konfiguracji, z poniższymi sugerowanymi ciągami ograniczeń.
* provider.esxi: version = "~> 1.6"
* provider.template: version = "~> 2.1"
Terraform został pomyślnie zainicjalizowany!
Możesz teraz rozpocząć pracę z Terraformem. Spróbuj uruchomić "terraform plan", aby zobaczyć
jakie zmiany są wymagane dla twojej infrastruktury. Wszystkie polecenia Terraform powinny teraz działać.
Jeśli kiedykolwiek ustawisz lub zmienisz moduły lub konfigurację backendu dla Terraform,
powtórz to polecenie, aby ponownie zainicjować swój katalog roboczy. Jeśli zapomnisz, inne
polecenia to wykryją i przypomną ci o tym w razie potrzeby.terraform plan
Odświeżanie stanu Terraform w pamięci przed planowaniem...
Odświeżony stan zostanie wykorzystany do obliczenia tego planu, ale nie będzie
przechowywany w lokalnym lub zdalnym magazynie stanu.
data.template_file.Default: Odświeżanie stanu...
data.template_file.network_config: Odświeżanie stanu...
------------------------------------------------------------------------
Został wygenerowany plan wykonania, który przedstawiony jest poniżej.
Akcje zasobów są oznaczone następującymi symbolami:
+ utworzyć
Terraform wykona następujące akcje:
# esxi_guest.Default będzie utworzony
+ resource "esxi_guest" "Default" {
+ boot_disk_size = (znane po zastosowaniu)
+ disk_store = "datastore1"
+ guest_name = "centos7-test"
+ guest_shutdown_timeout = (znane po zastosowaniu)
+ guest_startup_timeout = (znane po zastosowaniu)
+ guestinfo = {
+ "metadata" = "base64text"
+ "metadata.encoding" = "gzip+base64"
+ "userdata" = "base64text"
+ "userdata.encoding" = "gzip+base64"
}
+ guestos = (znane po zastosowaniu)
+ id = (znane po zastosowaniu)
+ ip_address = (znane po zastosowaniu)
+ memsize = "1024"
+ notes = (znane po zastosowaniu)
+ numvcpus = (znane po zastosowaniu)
+ ovf_properties_timer = (znane po zastosowaniu)
+ ovf_source = "/root/create-and-deploy-esxi/output-packer-centos7-x86_64/packer-centos7-x86_64.ova"
+ power = "włączony"
+ resource_pool_name = (znane po zastosowaniu)
+ virthwver = (znane po zastosowaniu)
+ network_interfaces {
+ mac_address = (znane po zastosowaniu)
+ nic_type = (znane po zastosowaniu)
+ virtual_network = "VM Network"
}
}
Plan: 1 do dodania, 0 do zmiany, 0 do zniszczenia.
------------------------------------------------------------------------
Uwaga: Nie określiłeś parametru "-out", aby zapisać ten plan, więc Terraform
nie może zagwarantować, że dokładnie te akcje będą wykonane, gdy
"terraform apply" zostanie uruchomione później.
Koniec:
terraform applyJeśli wszystko zostało zrobione poprawnie, to w ciągu 2-3 minut nowa maszyna wirtualna zostanie wdrożona z wcześniej przygotowanego obrazu.
Możliwości wykorzystania tego wszystkiego ogranicza tylko wyobraźnia.
Chciałem tylko podzielić się moimi doświadczeniami i pokazać kluczowe aspekty pracy z tymi produktami.
Dziękuję za uwagę!
P.S.: będę wdzięczny za konstruktywną krytykę.
Źródło: habr.com
