Osobiście najłatwiej mi myśleć o KVM (maszynie wirtualnej opartej na jądrze) jako takim poziomie abstrakcji w stosunku do technologii wirtualizacji sprzętowej Intel VT-x i AMD-V. Bierzemy maszynę z procesorem obsługującym jedną z tych technologii, umieszczamy Linuxa na tej maszynie, instalujemy KVM w Linuksie, a w efekcie otrzymujemy możliwość tworzenia maszyn wirtualnych. Tak działają usługi hostingu w chmurze, na przykład Amazon Web Services. Wraz z KVM czasami używany jest również Xen, ale omówienie tej technologii wykracza poza zakres tego postu. W przeciwieństwie do technologii wirtualizacji kontenerów, na przykład tego samego Dockera, KVM umożliwia uruchamianie dowolnego systemu operacyjnego jako systemu gościa, ale ma również o Większe koszty wirtualizacji.

Notatka: Poniższe kroki zostały przetestowane przeze mnie na Ubuntu Linux 14.04, ale teoretycznie będą w dużej mierze ważne dla innych wersji Ubuntu i innych dystrybucji Linuksa. Wszystko powinno działać zarówno na pulpicie, jak i na serwerze, do którego dostęp uzyskuje się przez SSH.

Instalacja KVM

Sprawdź, czy nasz procesor obsługuje Intel VT-x lub AMD-V:

grep -E "(vmx|svm)" /proc/cpuinfo

Jeśli coś się rozgrzeje, to jest obsługiwane i możesz przejść dalej.

Zainstaluj KVM:

aktualizacja sudo apt-get
sudo apt-get zainstaluj qemu-kvm libvirt-bin virtinst-bridge-utils

Gdzie zwyczajowo przechowuje się:

  • /var/lib/libvirt/boot/ - obrazy ISO do instalacji systemów-gości;
  • /var/lib/libvirt/images/ - obrazy dysków twardych systemów-gości;
  • /var/log/libvirt/ - tutaj powinieneś poszukać wszystkich logów;
  • /etc/libvirt/ - katalog z plikami konfiguracyjnymi;

Po zainstalowaniu KVM utwórzmy naszą pierwszą maszynę wirtualną.

Stworzenie pierwszej maszyny wirtualnej

Jako system gościa wybrałem FreeBSD. Pobierz obraz ISO systemu:

cd /var/lib/libvirt/boot/
sudo wget http:// ftp.freebsd.org/ path/ to/ some-freebsd-disk.iso

Kontrola wirtualne maszyny w większości przypadków odbywa się to za pomocą narzędzia virsh:

sudo virsh --help

Przed uruchomieniem maszyny wirtualnej musimy zebrać dodatkowe informacje.

Patrzymy na listę dostępnych sieci:

sudo virsh net-list

Wyświetl informacje o określonej sieci (o nazwie domyślnej):

sudo virsh domyślna informacja o sieci

Patrzymy na listę dostępnych optymalizacji dla systemu gościa:

sudo virt-install --os-lista wariantów

Tak więc teraz tworzymy maszynę wirtualną z 1 CPU, 1 GB RAM i 32 GB miejsca na dysku podłączoną do domyślnej sieci:

sudo wirtualna instalacja \
--virt-type=kvm \
--nazwa freebsd10 \
--ram 1024\
--vcpus=1 \
--os-wariant=freebsd8 \
--hvm\
--cdrom=/ var/ lib/ libvirt/ boot/ FreeBSD-10.2 -RELEASE-amd64-disc1.iso \
--network network=default,model=virtio \
--grafika vnc \
--disk path =/ var/ lib/ libvirt/ images/ freebsd10.img,size=32 ,bus=virtio

Możesz zobaczyć:

OSTRZEŻENIE Nie można połączyć się z konsolą graficzną: virt-viewer nie
zainstalowany. Zainstaluj pakiet „virt-viewer”.

Trwa instalacja domeny. Możesz ponownie połącz się z konsolą
aby zakończyć proces instalacji.

W porządku, tak powinno być.

Następnie przyjrzymy się właściwościom maszyny wirtualnej w formacie XML:

sudo virsh dumpxml freebsd10

Oto najbardziej pełna informacja. W tym na przykład jest też adres MAC, którego będziemy potrzebować dalej. Jak na razie znajdujemy informacje o VNC. W moim przypadku:

Z pomocą mojego ulubionego klienta (ja osobiście używam Ramminy), przechodzimy przez VNC, używając w razie potrzeby przekierowania portów SSH. Przechodzimy bezpośrednio do instalatora FreeBSD. Potem wszystko jest jak zwykle - Next, Next, Next, dostajemy zainstalowany system.

Podstawowe polecenia

Przyjrzyjmy się teraz podstawowym poleceniom do pracy z KVM.

Pobieranie listy wszystkich maszyn wirtualnych:

lista sudo virsh --all

Uzyskiwanie informacji o konkretnej maszynie wirtualnej:

sudo virsh dominfo freebsd10

Uruchom maszynę wirtualną:

sudo virsh start freebsd10

Zatrzymaj maszynę wirtualną:

sudo virsh wyłączanie freebsd10

Ciężko pokonać maszynę wirtualną (pomimo nazwy, to nie usunięcie):

sudo virsh zniszcz freebsd10

Uruchom ponownie maszynę wirtualną:

sudo virsh restart freebsd10

Klonuj maszynę wirtualną:

sudo virt-clone -o freebsd10 -n freebsd10-clone \
--file / var/ lib/ libvirt/ images/ freebsd10-clone.img

Włącz/wyłącz automatyczne uruchamianie:

sudo virsh autostart freebsd10
sudo virsh autostart --wyłącz freebsd10

Uruchom virsh w trybie dialogowym (wszystkie komendy w trybie dialogowym - jak opisano powyżej):

sudovirsh

Edycja właściwości maszyny wirtualnej w XML, w tym tutaj można zmienić limit ilości pamięci itp.:

sudo virsh edytuj freebsd10

Ważny! Komentarze z edytowanego pliku XML są niestety usuwane.

Gdy maszyna wirtualna jest zatrzymana, można również zmienić rozmiar dysku:

sudo qemu-img zmiana rozmiaru / var/ lib/ libvirt/ images/ freebsd10.img -2G
sudo qemu-img info / var/ lib/ libvirt/ images/ freebsd10.img

Ważny! Twój system operacyjny gościa najprawdopodobniej nie spodoba się temu, że dysk nagle stał się większy lub mniejszy. W najlepszym razie uruchomi się w trybie awaryjnym z sugestią ponownego partycjonowania dysku. Prawdopodobnie nie chcesz tego robić. Znacznie łatwiej może być uruchomić nową maszynę wirtualną i przenieść na nią wszystkie dane.

Tworzenie kopii zapasowych i przywracanie jest dość proste. Wystarczy zapisać gdzieś wyjście dumpxml, a także obraz dysku, a następnie je przywrócić. Na YouTube znalazłem film z demonstracją tego procesu wszystko jest naprawdę proste.

Ustawienia sieci

Ciekawym pytaniem jest jak ustalić jaki adres IP maszyna wirtualna otrzymała po załadowaniu? W KVM robi się to w sprytny sposób. Skończyło się na napisaniu następującego skryptu Pythona:

#!/usr/bin/env python3

# skrypt virt-ip.py
# (c) 2016 Aleksander Alekseev
# http://witryna/

system importu
importuj ponownie
importuj system
import podprocesu
z xml .etree import ElementTree

def print(str) :
print (str , plik = sys.stderr )

jeśli len(sys.argv )< 2 :
eprint("UŻYCIE: " + sys.argv [ 0 ] + " " )
eprint("Przykład: " + sys .argv [ 0 ] + " freebsd10 " )
sys.exit(1)

jeśli os.geteuid() != 0 :
eprint("BŁĄD: powinieneś być rootem" )
eprint("Wskazówka: uruchom `sudo " + sys .argv [ 0 ] + " ...`" ) ;
sys.exit(1)

jeśli podproces .call( "które arping 2>&1 >/dev/null", powłoka = Prawda ) != 0 :
eprint("BŁĄD: nie znaleziono arpowania" )
wydrukować( "Wskazówka: uruchom `sudo apt-get install arping`")
sys.exit(1)

Domena = sys.argv [1]

jeśli nie ponownie .match ("^*$" , domena) :
wydrukować( „BŁĄD: nieprawidłowe znaki w nazwie domeny”)
sys.exit(1)

Domout = subprocess .check_output ("virsh dumpxml " +domena+" || true" ,
powłoka = prawda)
domout = domout.decode("utf-8").strip()

if domout == "" :
# komunikat o błędzie już wydrukowany przez dumpxml
sys.exit(1)

Dokument = ElementDrzewo.fromstring(domout)

# 1. wymień wszystkie interfejsy sieciowe
# 2. uruchom `arping` na każdym interfejsie równolegle
#3 odpowiedzi grep
cmd= "(ifconfig | cut -d " " -f 1 | grep -E "." | " + \
"xargs -P0 -I IFACE arp -i IFACE -c 1 () 2>&1 | " + \
"grep "bajty z") || prawda"

dla dziecka w doc.iter() :
if child.tag == "mac" :
macaddr = dziecko.attrib["adres"]
macout = podproces .check_output(cmd .format(macaddr) ,
powłoka = prawda)
print(macout.decode("utf-8" ) )

Skrypt działa zarówno z siecią domyślną, jak i siecią zmostkowaną, których konfigurację omówimy później. Jednak w praktyce dużo wygodniej jest skonfigurować KVM tak, aby zawsze przydzielał gościom te same adresy IP. Aby to zrobić, edytuj ustawienia sieciowe:

sudo virsh net-edit domyślnie

... coś takiego:

>



>

Po wprowadzeniu tych zmian


>

...i zamień go na coś takiego:




>

Ponownie uruchamiamy system gościa i sprawdzamy, czy otrzymał adres IP przez DHCP z routera. Jeśli chcesz, aby system gościa miał Statyczny adres IP, jest to zwykle konfigurowane w samym gościu.

program virt-manager

Możesz być również zainteresowany programem virt-manager:

sudo apt-get install virt-manager
sudo usermod -a -G libvirtd NAZWA UŻYTKOWNIKA

Tak wygląda jego główne okno:

Jak widać, virt-manager to nie tylko GUI dla maszyn wirtualnych działających lokalnie. Dzięki niemu możesz zarządzać maszynami wirtualnymi działającymi na innych hostach, a także oglądać piękną grafikę w czasie rzeczywistym. Osobiście uważam za szczególnie wygodne w virt-manager, że nie trzeba przeglądać konfiguracji, na których porcie działa VNC danego systemu gościa. Wystarczy znaleźć maszynę wirtualną na liście, kliknąć dwukrotnie i uzyskać dostęp do monitora.

Bardzo wygodne jest również robienie rzeczy z virt-manager, które w innym przypadku wymagałyby pracochłonnej edycji plików XML i, w niektórych przypadkach, wykonywania dodatkowych poleceń. Na przykład zmiana nazw maszyn wirtualnych, konfigurowanie koligacji procesora i tym podobne rzeczy. Nawiasem mówiąc, użycie koligacji procesora znacznie zmniejsza wpływ hałaśliwych sąsiadów i wpływ maszyn wirtualnych na system hosta. Zawsze używaj go, gdy tylko jest to możliwe.

Jeśli zdecydujesz się użyć KVM jako zamiennika VirtualBox, pamiętaj, że nie mogą one udostępniać sobie wirtualizacji sprzętu. Aby KVM działał na twoim pulpicie, będziesz musiał nie tylko zatrzymać wszystkie maszyny wirtualne w VirtualBox i Vagrant, ale także ponownie uruchomić system. Osobiście uważam, że KVM jest znacznie wygodniejszy niż VirtualBox, przynajmniej dlatego, że nie wymaga uruchamiania polecenia Konfiguracja sudo /sbin/rcvboxdrv po każdej aktualizacji jądra działa odpowiednio z Unity i generalnie pozwala ukryć wszystkie okna.

Kimchi to oparty na HTML5 interfejs sieciowy dla KVM. Zapewnia łatwy i elastyczny interfejs do tworzenia i zarządzania maszyną wirtualną gościa. Kimchi jest zainstalowany i działa jako demon na hoście KVM. Zarządza gośćmi KVM za pomocą libvirt. Interfejs Kimchi obsługuje wszystkie najnowsze wersje przeglądarek z wersją -1, obsługuje również przeglądarki mobilne.

Kimchi można zainstalować w najnowszej wersji RHEL, Fedory, openSUSE i Ubuntu. W tym przewodniku używałem Ubuntu 14.10 jako hosta KVM.

Przed skonfigurowaniem kimchi musisz zainstalować następujące pakiety zależne.

$ sudo apt-get install gcc make autoconf automake gettext git python-cherrypy3 python-cheetah python-libvirt libvirt-bin python-imaging python-pam python-m2crypto python-jsonschema qemu-kvm-yon-psutilpytool python-ldap python-lxml nfs-common open-iscsi lvm2 xsltproc python-parted nginx firewalld python-guestfs libguestfs-tools python-requests websockify novnc spice-html5 wget

Podczas instalacji pakietów system zapyta Cię o następujące szczegóły.

1. OK w konfiguracji Postfix.

2. Wybierz opcję Witryna internetowa w ogólnym typie konfiguracji poczty.

3. Wpisz swoją nazwę FQDN, a następnie wybierz OK.

Po zainstalowaniu pobierz najnowszą wersję kimchi z github.

$ wget https://github.com/kimchi-project/kimchi/archive/master.zip

Rozpakuj pobrany plik.

$ unzip master.zip $ cd kimchi-master/

Zbuduj kimchi za pomocą następującego polecenia.

$ ./autogen.sh --system

$ make $ sudo make install # Opcjonalne, jeśli działa z drzewa źródeł

$ sudo kimchid --host=0.0.0.0

Uzyskaj dostęp do kimchi za pomocą przeglądarki internetowej, https://localhost:8001. Zostaniesz poproszony o zalogowanie się, użyj poświadczeń systemowych, których zwykle używasz do logowania do systemu.


Po zalogowaniu otrzymasz stronę jak poniżej. To pokazuje listę uruchomionych maszyn wirtualnych gościa na bieżącym hoście, masz przyciski do wykonania zamknięcia, ponownego uruchomienia i połączenia z konsolą, klikając akcję.


Aby utworzyć nowy komputer gościa, kliknij znak + w prawym rogu. Jeśli użyjesz tej opcji do stworzenia maszyny, zostanie to zrobione za pomocą szablonów.


Możesz zarządzać szablonami, odwiedzając menu szablonów. Aby utworzyć nowy szablon, kliknij znak + w prawym rogu. Możesz stworzyć szablon używając obrazów ISO, możesz umieścić obrazy ISO w /var/lib/kimchi/isos lub użyć zdalnego.


Możesz zarządzać pulą pamięci, przechodząc do menu pamięci, tam możesz dodać nową pamięć, klikając znak +. Obsługuje dodawanie pamięci Fibre Channel NFS, iSCSI i SCSI.


Siecią można zarządzać przechodząc do menu sieci, można utworzyć nową sieć z siecią izolowaną, NAT i mostkową.


Obecnie wiele zadań, które tradycyjnie przypisywano kilku fizycznym serwerom, przenosi się do środowisk wirtualnych. Technologie wirtualizacji są również poszukiwane przez twórców oprogramowania, ponieważ umożliwiają kompleksowe testowanie aplikacji w różnych systemach operacyjnych. Jednocześnie, upraszczając wiele spraw, same systemy wirtualizacji wymagają zarządzania i nie można obejść się bez specjalnych rozwiązań.

Włóczęga

Maszyna wirtualna VirtualBox jest zasłużenie popularna wśród administratorów i programistów, umożliwiając szybkie tworzenie niezbędnych środowisk za pomocą interfejsu graficznego lub interfejsu wiersza poleceń. Jeśli liczba maszyn wirtualnych nie przekracza trzech, nie ma trudności we wdrażaniu i zarządzaniu, ale nowoczesne projekty mają tendencję do nabywania konfiguracji, w wyniku czego uzyskuje się bardzo złożoną infrastrukturę, która staje się trudna w obsłudze. Jest to problem, który ma rozwiązać menedżer środowiska wirtualnego Vagrant, który umożliwia tworzenie kopii maszyn wirtualnych ze wstępnie zdefiniowaną konfiguracją i dynamiczną realokację zasobów VM (Provisioning) w razie potrzeby. W podstawowej dystrybucji Vagrant współpracuje z VirtualBox, ale system wtyczek pozwala na podłączenie innego systemu wirtualizacji. Dzisiaj kod wtyczki dla AWS i Rackspace Cloud jest otwarty, a wtyczka jest dostępna do komercyjnej subskrypcji wspierającej VMware Fusion/Workstation.

Vagrant nie tworzy maszyny wirtualnej od podstaw. Dla wygody projekt oferuje kilka obrazów bazowych (pudełek), które są importowane, a następnie wykorzystywane do szybkiego wdrożenia systemu, już na podstawie pudełek system operacyjny gościa jest montowany z żądaną konfiguracją.

Chef i Puppet są wstępnie zainstalowane w pudełkach, aby uprościć wdrażanie aplikacji. Oprócz, żądane ustawienia można ustawić za pomocą powłoki. Środowiska zawierają kompletny zestaw do uruchamiania i tworzenia aplikacji w Ruby. SSH jest używany do uzyskania dostępu do maszyny wirtualnej, istnieje możliwość wymiany plików za pośrednictwem udostępnionego katalogu.

Napisany przez Vagranta przy użyciu Rubiego, można go zainstalować na dowolnej platformie, dla której istnieją komponenty VirtualBox i Ruby. Pakiety dla systemów Windows, Linux (deb i rpm) oraz OS X są dostępne na stronie pobierania.

Proces instalacji i używania Ubuntu jest prosty. Pobierz pakiety VirtualBox i Vagrant i zainstaluj:

$ sudo dpkg -i virtualbox-4.2.10_amd64.deb $ sudo dpkg -i vagrant_1.2.2_x86_64.deb

W momencie pisania, z najnowszym obecna wersja VirtualBox 4.2.14 miał problemy z uruchomieniem Vagranta, więc najlepiej na razie użyć 4.2.12 lub przetestować 4.2.15. Alternatywnie możesz zrobić:

$ cd ~/.vagrant.d/boxes/BoxName/virtualbox $ openssl sha1 *.vmdk *.ovf > box.mf

przyniosę Alternatywna opcja Instalacje Włóczęgi - z użyciem Rubiego:

$ sudo apt-get install ruby1.8 ruby1.8-dev rubygems1.8 $ sudo gem install vagrant

Wszystkie ustawienia projektu są dokonywane w plik specjalny Włóczęga. Aby nie tworzyć szablonu ręcznie, można go wygenerować w następujący sposób:

$ mkdir project $ cd project $ vagrant init

Teraz możesz zajrzeć do utworzonego pliku konfiguracyjnego i uzupełnić: Ustawienia maszyny wirtualnej (config.vm. ), opcje połączenia SSH (config.ssh.), parametry samego Vagranta (config.vagrant). Wszystkie są dobrze udokumentowane, znaczenie niektórych jest jasne i bez wyjaśnienia.

W rzeczywistości kilka takich plików jest używanych podczas uruchamiania, każdy kolejny zastępuje poprzedni: wbudowany w Vagrant (nie można go zmienić), dostarczane z pudełkami (spakowanymi za pomocą przełącznika "--vagrantfile"), znajdującymi się w ~/.vagrant .d i plik projektu . Takie podejście pozwala na użycie ustawień domyślnych, nadpisując tylko to, co jest niezbędne w konkretnym projekcie.


Wszystkie instalacje wykonujemy za pomocą włóczęgi, listę dostępnych kluczy można przeglądać za pomocą "-h". Po instalacji nie mamy ani jednego obrazu, uruchomiona lista vagrant box wyświetli pustą listę. Gotowe pudełko może znajdować się w lokalnym systemie plików lub być włączone zdalny serwer, jego nazwa jest ustawiana jako parametr, który będzie używany w projektach. Na przykład używamy oficjalnego Box Ubuntu 12.04 LTS oferowanego przez programistów Vagrant.

$ vagrant box dodaj precyzyjne64 http://files.vagrantup.com/precise64.box

Teraz można uzyskać do niego dostęp z Vagrantfile:

config.vm.box = "precyzyjne64"

Chociaż łatwiej jest to określić od razu podczas inicjowania projektu:

$ wędrowny init precyzyjny64

Najprostszym sposobem, który nie wymaga nauki Chef i Puppet, jest użycie standardowych poleceń powłoki do konfiguracji maszyny wirtualnej, które można zapisać bezpośrednio w pliku Vagrantfile lub, jeszcze lepiej, połączyć w skrypt połączony w ten sposób:

Vagrant.configure("2") do |config| config.vm.provision:shell, :inline => "script.sh" end

Teraz wszystkie polecenia określone w script.sh zostaną wykonane podczas uruchamiania maszyny wirtualnej. Podczas uruchamiania projektu tworzony jest plik ovf, którego ustawienia można przeglądać za pomocą GUI VirtualBox lub polecenia VBoxManage:

$ VBoxManage import /home/user/.vagrant.d/boxes/precise64/virtualbox/box.ovf System wirtualny 0: 0: Sugerowany typ systemu operacyjnego: "Ubuntu_64" (zmień za pomocą "--vsys 0 --ostype "; użyj "list ostypes", aby wyświetlić wszystkie możliwe wartości) 1: Sugerowana nazwa maszyny wirtualnej "precise64" (zmień za pomocą "--vsys 0 --vmname ") 2: Liczba procesorów: 2 (zmień za pomocą "--vsys 0 --cpus ") 3: Pamięć gościa: 384 MB (zmień za pomocą "--vsys 0 --memory ")

Nie zawsze są zadowoleni. podane warunki, ale korzystając z ustawień dostawcy, możesz łatwo zmienić ustawienia konkretnej maszyny wirtualnej (patrz podpowiedzi „zmiana za pomocą…”):

Config.vm.provider:virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "1024"] koniec

Uruchom i połącz się z systemem przez SSH:

$ włóczęga w górę $ włóczęga ssh

Aby zatrzymać maszynę wirtualną, użyj opcji zatrzymania lub zniszczenia (druga opcja wyczyści wszystkie pliki, następnym razem wszystkie operacje będą wykonywane od początku), jeśli chcesz wprowadzić ją w stan hibernacji - vagrant suspend , return - vagrant resume . Jako przykład pracy z Chefem możesz użyć gotowego przepisu, za pomocą którego skonfigurujesz APT i Apache2:

Config.vm.provision:chef_solo do |chef| chef.recipe_url = "http://files.vagrantup.com/getting_started/cookbooks.tar.gz" chef.add_recipe("vagrant_main") koniec

Aby uzyskać dostęp do maszyny wirtualnej „z zewnątrz”, musisz skonfigurować przekierowanie portów. Domyślnie wykonywane jest przekierowanie 22 -> 2222, co pozwala na połączenie przez SSH. Dodaj do pliku Vagrantfile:

Vagrant::Config.run do |config| config.vm.forward_port 80, 1111 koniec

Dostęp do serwera WWW można teraz uzyskać, przechodząc pod adres http://127.0.0.1:1111/. Aby nie konfigurować środowiska za każdym razem, lepiej zbudować na jego podstawie gotowy pakiet.

$ pakiet vagrant --vagrantfile Vagrantfile --output projekt.box

Teraz plik project.box może być dystrybuowany do innych administratorów, programistów lub zwykłych użytkowników, którzy dołączą go za pomocą polecenia vagrant box add project.box.

Konwertuj

Systemy wirtualizacyjne Xen/KVM wydane na wolnych licencjach nie mają przyjaznego dla użytkownika interfejsu, co często jest interpretowane nie na ich korzyść. Jednak ten brak jest łatwy do naprawienia. ConVirt umożliwia wdrażanie maszyn wirtualnych na wielu serwerach Xen i KVM za pomocą jednego kliknięcia, korzystając z łatwego w użyciu interfejsu. Dostępne są wszystkie niezbędne operacje na maszynach wirtualnych: uruchamianie, zatrzymywanie, tworzenie migawek, kontrola i redystrybucja zasobów, łączenie się z maszyną wirtualną przez VNC, automatyzacja zadań administracyjnych. Technologia Ajax sprawia, że ​​interfejs jest interaktywny i podobny do aplikacji desktopowej. Na przykład maszynę wirtualną można po prostu przeciągnąć z jednego serwera na drugi. Interfejs nie jest zlokalizowany, ale sterowanie jest intuicyjne.


Tworzenie pul serwerów umożliwia konfigurowanie maszyn wirtualnych i zasobów oraz zarządzanie nimi na poziomie puli serwerów, a nie pojedynczego serwera. Agenty nie są instalowane w systemach wirtualnych, potrzebny jest tylko pakiet convirt-tool na serwerze fizycznym. Upraszcza to administrację i wdrażanie.

Po dodaniu nowego serwera ConVirt automatycznie zbierze jego dane konfiguracyjne i wydajnościowe, dostarczając informacje podsumowujące na kilku poziomach - od pojedynczej maszyny wirtualnej, fizycznego serwera, po całą pulę. Zebrane dane służą do automatycznego hostowania nowych systemów gości. Informacje te są również wyświetlane w formie wizualnych wykresów.

Do tworzenia maszyn wirtualnych wykorzystywane są szablony - opisy ustawień maszyn wirtualnych, zawierające dane o przydzielonych zasobach, ścieżkę do plików systemu operacyjnego oraz dodatkowe ustawienia. Po instalacji dostępnych jest kilka opcji. gotowe szablony, ale w razie potrzeby łatwo je stworzyć samemu.

Obsługiwane są wszystkie technologie: równoważenie obciążenia, migracja na gorąco, dyski wirtualne o rosnącej pojemności, pozwalające na wykorzystanie zasobów zgodnie z potrzebami oraz wiele innych funkcji zaimplementowanych w Xen i KVM. Nie musisz zatrzymywać maszyny wirtualnej, aby ponownie przydzielić zasoby.

Wdrożono możliwość zarządzania środowiskiem wirtualnym dla kilku administratorów z możliwością audytu i kontroli ich działań.

ConVirt jest rozwijany przez firmę Convirture w oparciu o koncepcję open core (open base), gdy tylko podstawowy zestaw funkcji jest swobodnie rozpowszechniany wraz z tekstami źródłowymi, reszta jest dostępna w wersji komercyjnej. W wersji open source brakuje obsługi wysokiej dostępności, integracji VLAN, nadmiarowości i odzyskiwania, zarządzania wierszem poleceń, powiadomień i oficjalnego wsparcia.

Podczas rozwoju wykorzystano framework TurboGears2, biblioteki ExtJs i FLOT, MySQL był używany do przechowywania informacji, dnsmasq był używany jako serwer DHCP i DNS. Wymagany pakiet można znaleźć w repozytoriach popularnych dystrybucji Linuksa.

Karesansui

Zaimplementowano wszystkie funkcje zarządzania środowiskami wirtualnymi: instalowanie systemu operacyjnego, tworzenie konfiguracji dla podsystemu dyskowego i wirtualnych kart sieciowych, zarządzanie limitami, replikacja, zamrażanie maszyn wirtualnych, tworzenie migawek, przeglądanie szczegółowych statystyk i danych dzienników, monitorowanie pobrań. Z jednej konsoli możesz zarządzać wieloma serwerami fizycznymi i hostowanymi na nich maszynami wirtualnymi. Możliwa jest praca z wieloma użytkownikami z rozdzieleniem uprawnień. W rezultacie deweloperom udało się zaimplementować w przeglądarce wirtualne środowisko, które pozwala w pełni zarządzać systemami.

Napisany przez Karesansui w Pythonie SQLite jest używany jako DBMS dla systemu jednowęzłowego. Jeśli planujesz zarządzać instalacjami Karesansui hostowanymi na wielu serwerach fizycznych, powinieneś użyć MySQL lub PostgreSQL.

Możesz wdrożyć Karesansui na dowolnym systemie Linux. Sami programiści preferują CentOS (dla którego strona ma szczegółowe instrukcje), chociaż Karesansui radzi sobie dobrze na Debianie i Ubuntu. Przed instalacją należy spełnić wszystkie zależności wskazane w dokumentacji. Następnie uruchamiany jest skrypt instalacyjny i inicjowana jest baza danych. Jeśli używana jest konfiguracja wieloserwerowa, wystarczy określić zewnętrzną bazę danych.

Późniejsze prace w pełni rekompensują niedogodności instalacji. Wszystkie ustawienia podzielone są na siedem zakładek, których przeznaczenie wynika z nazwy: Gość, Ustawienia, Zadanie, Sieć, Pamięć, Raport i Dziennik. W zależności od roli użytkownika, nie wszystkie będą dla niego dostępne.

Nową maszynę wirtualną można utworzyć z lokalnego pliku ISO lub określając zasób HTTP/FTP z obrazami instalacyjnymi. Będziesz także musiał ustawić inne atrybuty: nazwę systemu, która będzie wyświetlana na liście, nazwę sieci (nazwa hosta), technologię wirtualizacji (Xen lub KVM), pamięć RAM i rozmiar dysku twardego (rozmiar pamięci i rozmiar dysku) - i wybierz obraz, który będzie pasował do wirtualnego systemu operacyjnego, dzięki czemu będzie szybki wybór wizualny w konsoli.

WebVirtMgr

Możliwości opisywanych rozwiązań są często nadmiarowe, a ich instalacja nie zawsze jest jasna dla administratora z niewielkim doświadczeniem. Ale i tutaj jest wyjście. Usługa scentralizowanego zarządzania maszyną wirtualną WebVirtMgr została stworzona jako prosty zamiennik virt-manager, który zapewni komfortową pracę z maszyną wirtualną za pomocą przeglądarki z zainstalowaną wtyczką Java. Obsługiwane jest zarządzanie ustawieniami KVM: tworzenie, instalacja, konfiguracja, uruchamianie maszyny wirtualnej, migawki i tworzenie kopii zapasowych maszyn wirtualnych. Zapewnia zarządzanie pulą sieciową i pulą pamięci, pracę z ISO, klonowanie obrazów, przeglądanie wykorzystania procesora i pamięci RAM. Dostęp do maszyny wirtualnej uzyskuje się przez VNC. Wszystkie transakcje są rejestrowane w logach. Dzięki pojedynczej instalacji WebVirtMgr możesz zarządzać wieloma serwerami KVM. Do łączenia się z nimi używana jest biblioteka RPC libvirt (TCP/16509) lub SSH.


Interfejs jest napisany w Python/Django. Do instalacji potrzebny będzie serwer Linux. Dystrybuowany w pakietach źródłowych i RPM dla CentOS, RHEL, Fedora i Oracle Linux 6. Sam proces wdrażania jest prosty i dobrze opisany w dokumentacji projektu (w języku rosyjskim), wystarczy skonfigurować libvirt i zainstalować webvirtmgr. Cały proces trwa pięć minut. Po połączeniu się z Dashboardem wybieramy Add Connection i określamy parametry węzła, wtedy możemy skonfigurować VM.

Skryptowanie tworzenia maszyny wirtualnej

Najprostszy skrypt do tworzenia i uruchamiania maszyny wirtualnej za pomocą VirtualBox:

#!/bin/bash vmname="debian01" VBoxManage createvm --name $(vmname) --ostype "Debian" --register VBoxManage modyfikacjavm $(vmname) --memory 512 --acpi na --boot1 dvd VBoxManage createhd - -filename "$(vmname).vdi" --size 10000 --variant Naprawiono VBoxManage storagectl $(vmname) --name "Kontroler IDE" --add ide --controller PIIX4 VBoxManage storageattach $(vmname) --storagectl "IDE Kontroler" --port 0 --device 0 --type hdd --medium "$(vmname).vdi" VBoxManage storageattach $(vmname) --storagectl "Kontroler IDE" --port 0 --device 1 --type dvddrive --medium /iso/debian-7.1.0-i386-netinst.iso VBoxManage editvm $(vmname) --nic1 bridged --bridgeadapter1 eth0 --cableconnected1 na VBoxManage modyfikacjavm $(vmname) --vrde na ekranie VBoxHeadless --startvm $(nazwa maszyny)

Proxmox VE

Poprzednie rozwiązania sprawdzają się w sytuacjach, w których istnieje już infrastruktura. Ale jeśli musisz go tylko wdrożyć, powinieneś pomyśleć o wyspecjalizowanych platformach, które pozwalają szybko uzyskać pożądany efekt. Przykładem jest tutaj Proxmox Virtual Environment, czyli dystrybucja Linuksa (oparta na Debianie 7.0 Wheezy) pozwalająca na szybkie zbudowanie infrastruktury Serwery Wirtualne korzysta z OpenVZ i KVM i jest praktycznie na równi z takimi produktami jak VMware vSphere, MS Hyper-V i Citrix XenServer.


W rzeczywistości system powinien być zainstalowany tylko (kilka prostych kroków), wszystko inne działa już po wyjęciu z pudełka. Następnie, korzystając z interfejsu internetowego, możesz utworzyć maszynę wirtualną. W tym celu najprościej jest wykorzystać szablony i kontenery OpenVZ, które ładowane są z zasobów zewnętrznych bezpośrednio z interfejsu jednym kliknięciem (jeśli ręcznie, to skopiuj do katalogu /var/lib/vz/template). Ale szablony można również tworzyć poprzez klonowanie już utworzonych systemów w trybie łączenia. Ta opcja pozwala zaoszczędzić miejsce na dysku, ponieważ wszystkie połączone środowiska używają tylko jednej udostępnionej kopii danych szablonu odniesienia bez duplikowania informacji. Interfejs jest zlokalizowany i zrozumiały, nie odczuwasz żadnych szczególnych niedogodności podczas pracy z nim.

Istnieje wsparcie dla klastrów, narzędzia do tworzenia kopii zapasowych środowisk wirtualnych, możliwa jest migracja VM pomiędzy węzłami bez przerywania pracy. Kontrola dostępu do istniejących obiektów (VM, storage, nodes) realizowana jest w oparciu o role, obsługiwane są różne mechanizmy uwierzytelniania (AD, LDAP, Linux PAM, wbudowany Proxmox VE). Interfejs sieciowy zapewnia możliwość dostępu do maszyny wirtualnej za pomocą konsoli VNC i SSH, można przeglądać stan zadań, dzienniki, dane monitorowania i wiele więcej. To prawda, że ​​niektóre operacje specyficzne dla systemów HA będą nadal musiały być wykonywane w staromodny sposób w konsoli, takie jak tworzenie autoryzowanego połączenia iSCSI, konfigurowanie klastra, tworzenie wielościeżkowych i kilka innych operacji.

Wymagania systemowe są niskie: procesor x64 (najlepiej z Intel VT/AMD-V), 1+ GB RAM. Projekt oferuje gotowy obraz ISO i repozytorium dla Debiana.

Wniosek

Wszystkie opisane rozwiązania są na swój sposób dobre i świetnie sobie radzą z zadaniami. Musisz tylko wybrać najbardziej odpowiedni do konkretnej sytuacji.

W Ubuntu zaleca się używanie hiperwizora KVM (menedżera maszyn wirtualnych) i biblioteki libvirt jako narzędzia do zarządzania nim. Libvirt zawiera zestaw programowych interfejsów API i niestandardowe aplikacje do zarządzania maszyną wirtualną (VM) virt-manager (graficzny interfejs użytkownika, GUI) lub virsh (wiersz poleceń, CLI). Jako alternatywni menedżerowie możesz użyć convirt (GUI) lub convirt2 (interfejs WEB).

Obecnie w Ubuntu oficjalnie obsługiwany jest tylko hipernadzorca KVM. Ten hiperwizor jest częścią kodu jądra systemu operacyjnego. Systemy Linux. W przeciwieństwie do Xen, KVM nie obsługuje parawirtualizacji, co oznacza, że ​​aby z niego korzystać, Twój procesor musi obsługiwać technologie VT. Możesz sprawdzić, czy Twój procesor obsługuje tę technologię, uruchamiając polecenie w terminalu:

Jeśli wynikiem jest wiadomość:

INFO: /dev/kvm istnieje Można użyć akceleracji KVM

więc KVM będzie działać bez problemów.

Jeśli wyjściem jest komunikat:

Twój procesor nie obsługuje rozszerzenia KVM Nie można używać akceleracji KVM

wtedy nadal możesz korzystać z maszyny wirtualnej, ale będzie ona znacznie wolniejsza.

    Zainstaluj jako gość 64-bitowe systemy

    Przydziel gościom ponad 2 GB pamięci RAM

Instalacja

sudo apt-get zainstaluj qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Jest to instalacja na serwerze bez X, czyli nie zawiera interfejsu graficznego. Możesz go zainstalować za pomocą polecenia

sudo apt-get install virt-manager

Następnie w menu pojawi się pozycja „Virtual Machine Manager” i z dużym prawdopodobieństwem wszystko będzie działać. Jeśli nadal pojawiają się jakieś problemy, musisz przeczytać instrukcje na anglojęzycznej wiki.

Utwórz system gościa

Procedura tworzenia systemu gościa za pomocą interfejsu graficznego jest dość prosta.

Ale tryb tekstowy można opisać.

qkrowa2

Podczas tworzenia systemu przy użyciu interfejsu graficznego, jak twardy dysk pojawi się monit o wybranie istniejącego pliku obrazu lub urządzenia blokowego lub utworzenie nowego pliku z danymi surowymi (RAW). Jednak nie jest to jedyny dostępny format pliku. Ze wszystkich typów dysków wymienionych w man qemu-img, qcow2 jest najbardziej elastyczny i aktualny. Obsługuje migawki, szyfrowanie i kompresję. Musi zostać utworzony przed utworzeniem nowego systemu gościa.

Qemu-img create -o preallocation=metadata -f qcow2 qcow2.img 20G

Według tego samego człowieka, qemu-img , wstępna alokacja metadanych (-o preallocation=metadata) sprawia, że ​​dysk jest początkowo nieco większy, ale zapewnia lepszą wydajność, gdy obraz musi rosnąć. W rzeczywistości w tym przypadku ta opcja pozwala uniknąć nieprzyjemnego błędu. Utworzony obraz początkowo zajmuje mniej niż megabajt miejsca i w razie potrzeby rośnie do określonego rozmiaru. System gościa powinien natychmiast zobaczyć ten ostateczny rozmiar, jednak w fazie instalacji może zobaczyć rzeczywisty rozmiar pliku. Oczywiście odmówi instalacji na dysku twardym 200 kb. Błąd nie jest specyficzny dla Ubuntu, przynajmniej pojawia się również w RHEL.

Oprócz rodzaju obrazu możesz później wybrać sposób podłączenia - IDE, SCSI lub Virtio Disk. Wydajność podsystemu dyskowego będzie zależeć od tego wyboru. Nie ma jednoznacznie poprawnej odpowiedzi, musisz wybrać na podstawie zadania, które zostanie przypisane do systemu gościa. Jeśli system gościa zostanie utworzony „do zobaczenia”, zrobi to dowolna metoda. Generalnie to zwykle I/O jest wąskim gardłem maszyny wirtualnej, dlatego przy tworzeniu mocno obciążonego systemu należy tę kwestię podejść jak najbardziej odpowiedzialnie.

Piszę tę notatkę, aby zademonstrować instalacja krok po kroku i konfigurowanie maszyny wirtualnej Linux opartej na KVM. Wcześniej pisałem już o wirtualizacji, gdzie korzystałem z cudownego .

Teraz mam do czynienia z kwestią czynszu dobry serwer o dużej objętości pamięć o dostępie swobodnym i duży dysk twardy. Ale nie chcę uruchamiać projektów bezpośrednio na maszynie-hoście, więc podzielę je na osobne małe serwery wirtualne z systemem Linux OS lub kontenerami dockera (o nich w innym artykule).

Wszystkie nowoczesne hostingi w chmurze działają na tej samej zasadzie, tj. hoster na dobrym sprzęcie podnosi kilka wirtualnych serwerów, które zwykliśmy nazywać VPS/VDS, i dystrybuuje je do użytkowników lub automatyzuje ten proces (hello, DigitalOcean).

KVM (maszyna wirtualna oparta na jądrze) to oprogramowanie Linux, które wykorzystuje sprzęt procesorowy zgodny z x86 do pracy z technologią wirtualizacji Intel VT/AMD SVM.

Instalacja KVM

Przeprowadzę wszystkie machinacje związane z tworzeniem maszyny wirtualnej na Ubuntu 16.04.1 LTS OS. Aby sprawdzić, czy Twoje procesy obsługują wirtualizację sprzętu na Oparte na Intel VT/AMD SVM, wykonaj:

Grep -E "(vmx|svm)" /proc/cpuinfo

Jeśli terminal nie jest pusty, wszystko jest w porządku i można zainstalować KVM. Ubuntu tylko oficjalnie wspiera hypervisor KVM (część jądra Linuksa) i zaleca używanie biblioteki libvirt jako narzędzia do zarządzania nim, co zrobimy dalej.

Możesz także sprawdzić obsługę wirtualizacji sprzętu w Ubuntu za pomocą polecenia:

Jeśli się powiedzie, zobaczysz coś takiego:

INFO: /dev/kvm istnieje Można użyć akceleracji KVM

Zainstaluj pakiety do pracy z KVM:

sudo apt-get zainstaluj qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Jeśli masz dostęp do powłoki graficznej systemu, możesz zainstalować menedżera GUI libvirt:

sudo apt-get install virt-manager

Korzystanie z virt-manager jest dość proste (nie trudniejsze niż VirtualBox), więc ten artykuł skupi się na konsolowej wersji instalacji i konfiguracji serwera wirtualnego.

Instalacja i konfiguracja serwera wirtualnego

W konsolowej wersji instalacji, konfiguracji i zarządzania systemem nieodzownym narzędziem jest narzędzie virsh (dodatek do biblioteki libvirt). Posiada dużą ilość opcji i parametrów, szczegółowy opis można uzyskać w ten sposób:

mężczyzna virsh

lub zadzwoń do standardowej "pomocy":

Pomoc dla Virsh

Podczas pracy z serwerami wirtualnymi zawsze przestrzegam następujących zasad:

  1. Przechowuję obrazy ISO OS w katalogu /var/lib/libvirt/boot
  2. Przechowuję obrazy maszyn wirtualnych w katalogu /var/lib/libvirt/images
  3. Jawnie przypisuję statyczny adres IP każdej nowej maszynie wirtualnej za pośrednictwem serwera DHCP hipernadzorcy.

Zacznijmy instalować pierwszą maszynę wirtualną (64-bitowy serwer uunt 16.04 LTS):

Cd /var/lib/libvirt/boot sudo wget http://releases.ubuntu.com/16.04/ubuntu-16.04.1-desktop-amd64.iso

Po pobraniu obrazu uruchom instalację:

sudo virt-install \ --virt-type=kvm \ --name ubuntu1604\ --ram 1024 \ --vcpus=1 \ --os-variant=ubuntu16.04 \ --hvm \ --cdrom=/var/ lib/libvirt/boot/ubuntu-16.04.1-server-amd64.iso \ --network network=default,model=virtio \ --graphics vnc \ --disk path=/var/lib/libvirt/images/ubuntu1604. img,rozmiar=20,bus=virtio

Przekładając te wszystkie parametry na „ludzki język”, okazuje się, że tworzymy maszynę wirtualną z systemem operacyjnym Ubuntu 16.04, 1024 MB RAM, 1 procesor, standardową kartę sieciową (maszyna wirtualna pójdzie do internetu jakby z powodu NAT), dysk twardy 20 GB.

Warto zwrócić uwagę na parametr --os-wariant, informuje hiperwizora, w jakim systemie operacyjnym należy dostosować ustawienia.
Listę dostępnych opcji systemu operacyjnego można uzyskać, uruchamiając polecenie:

zapytanie osinfo os

Jeśli w twoim systemie nie ma takiego narzędzia, zainstaluj:

sudo apt-get zainstaluj libosinfo-bin

Po uruchomieniu instalacji w konsoli pojawi się następujący komunikat:

Trwa instalacja domeny. Możesz ponownie połączyć się z konsolą, aby zakończyć proces instalacji.

To normalna sytuacja, będziemy kontynuować instalację przez VNC.
Sprawdzamy, który port został podniesiony z naszej maszyny wirtualnej (na przykład w pobliskim terminalu):

Virsh dumpxml ubuntu1604 ... ...

Port 5900, pod adresem lokalnym 127.0.0.1. Aby połączyć się z VNC, musisz użyć przekierowania portów przez ssh. Zanim to zrobisz, upewnij się, że przekazywanie tcp jest włączone w demonie ssh. Aby to zrobić, przejdź do ustawień sshd:

Cat /etc/ssh/sshd_config | grep Zezwalaj na przekazywanie Tcp

Jeśli nic nie zostało znalezione lub widzisz:

Zezwól na przekazywanie Tcp nie

Następnie edytujemy konfigurację dla

Zezwalaj na przekazywanie Tcp tak

i zrestartuj sshd.

Konfiguracja przekierowania portów

Uruchom polecenie na komputerze lokalnym:

Ssh -fN -l login -L 127.0.0.1:5900:localhost:5900 server_ip

Tutaj skonfigurowaliśmy przekierowanie portów ssh z portu lokalnego 5900 na port serwera 5900. Teraz możesz połączyć się z VNC za pomocą dowolnego klienta VNC. Wolę UltraVNC ze względu na jego prostotę i wygodę.

Po udanym połączeniu na ekranie pojawi się standardowe okno powitalne instalacji Ubuntu:

Po zakończeniu instalacji i zwykłym ponownym uruchomieniu pojawi się okno logowania. Po zalogowaniu ustalamy adres IP nowo wybitej maszyny wirtualnej, aby później uczynić ją statyczną:

ifconfig

Zapamiętujemy i idziemy do maszyny hosta. Wyciągamy adres mac karty „sieciowej” maszyny wirtualnej:

Virsh dumpxml ubuntu1604 | grep "adres MAC"

Zapamiętaj nasz adres mac:

Edycja ustawień sieciowych hiperwizora:

sudo virsh net-edit domyślnie

Szukamy DHCP i dodajemy to:

Powinieneś otrzymać coś takiego:

Aby ustawienia zaczęły obowiązywać, musisz ponownie uruchomić serwer DHCP hipernadzorcy:

sudo virsh net-destroy domyślna sudo virsh net-start domyślna usługa sudo restart libvirt-bin

Następnie ponownie uruchamiamy maszynę wirtualną, teraz zawsze będzie do niej przypisany adres IP - 192.168.122.131.

Istnieją inne sposoby ustawienia statycznego adresu IP dla maszyny wirtualnej, na przykład poprzez bezpośrednią edycję ustawień sieciowych w systemie gościa, ale tutaj zależy to od zawartości twojego serca. Właśnie pokazałem opcję, z której sam wolę korzystać.

Aby połączyć się z terminalem maszyny wirtualnej, uruchom:

ssh 192.168.122.131

Samochód jest gotowy do bitwy.

Virsh: lista poleceń

Aby zobaczyć działające hosty wirtualne (wszystkie dostępne można uzyskać, dodając --all):

lista sudo virsh

Możesz ponownie uruchomić hosta:

Ponowne uruchomienie Sudo virsh $VM_NAME

Zatrzymaj maszynę wirtualną:

sudo virsh stop $VM_NAME

Wykonaj zatrzymanie:

sudo virsh niszczy $VM_NAME

sudo virsh start $VM_NAME

Zamknąć:

sudo virsh zamknięcie $VM_NAME

Dodaj do automatycznego uruchamiania:

sudo virsh autostart $VM_NAME

Bardzo często wymagane jest sklonowanie systemu w celu wykorzystania go jako szkieletu dla innych wirtualnych systemów operacyjnych w przyszłości, do czego służy narzędzie virt-clone.

Wirtualny klon --pomoc

Klonuje istniejącą maszynę wirtualną i zmienia dane wrażliwe na hosta, takie jak adres mac. Hasła, pliki i inne informacje specyficzne dla użytkownika w klonie pozostają takie same. Jeśli sklonowana maszyna wirtualna miała ręcznie wpisany adres IP, mogą wystąpić problemy z dostępem SSH do klonu z powodu konfliktu (2 hosty z tym samym adresem IP).

Oprócz instalacji maszyny wirtualnej przez VNC, możliwe jest również użycie X11Forwarding poprzez narzędzie virt-manager. Na przykład w systemie Windows można do tego użyć Xming i PuTTY.