kubevirt.kubevirt-modules
Moduły Ansible KubeVirt
Moduły Ansible KubeVirt umożliwiają automatyzację zarządzania następującymi typami obiektów w klastrze Kubernetes:
- Maszynami Wirtualnymi (a także szablonami maszyn wirtualnych i presetami maszyn wirtualnych),
- Zestawami Replik Maszyn Wirtualnych,
- oraz Żądaniami Perynsyjnych Wolumenów (w tym funkcjonalnością Containerized Data Importer).
Od wersji Ansible 2.8, moduły, wtyczka inwentarza oraz odpowiednie testy jednostkowe są częścią głównego repozytorium Ansible, podczas gdy to repozytorium zawiera tylko testy integracyjne i przykładowe playbooki.
Spis Treści
Szybkie Wprowadzenie
Aby szybko się zapoznać, proszę zobaczyć następujące posty na blogu kubevirt.io:
Wymagania
- Ansible >= 2.8
pip3 --user install ansible
- openshift-restclient-python >= 0.8.2
pip3 --user install openshift
Kod Źródłowy
Testowanie
Istnieją dwa typy testów, które można znaleźć tutaj:
- testy modułów w tests/playbooks
- testy ról w tests/roles
Aby przeprowadzić pełny zestaw testów dla danego celu, należy użyć odpowiedniego playbooka all.yml
.
Testowanie automatyczne
Testy jednostkowe
Główne repozytorium ansible zawiera testy jednostkowe obejmujące moduły kubevirt.
Testy integracyjne
Testy modułów (tests/playbooks/all.yml) są uruchamiane na rzeczywistych klastrach z zainstalowanymi zarówno KubeVirt, jak i CDI, na:
- TravisCI (maszyny wirtualne Ubuntu wspierające tylko minikube; brak akceleracji kvm dla maszyn wirtualnych KubeVirt)
- Jenkins oVirt (fizyczne serwery obsługujące wszelkie klastry wspierane przez kubevirtci)
Testy modułów są uruchamiane z użyciem:
- najnowszej wydanej wersji ansible (cokolwiek dostanie się z
pip install ansible
) - stabilnych gałęzi ansible
- gałęzi deweloperskiej ansible
Testy ról (tests/roles/all.yml) są uruchamiane tylko na TravisCI, korzystając z gałęzi deweloperskiej.
Aby wczesniej wykrywać regresje, Travis uruchamia wszystkie testy co 24 godziny na świeżym klonie ansible.git i wysyła e-maile do deweloperów modułów kubevirt, jeśli testy się nie powiodą.
Testowanie ręczne
Sklonuj to repozytorium na maszynie, z której możesz zalogować się do klastra:
$ git clone https://github.com/kubevirt/ansible-kubevirt-modules.git $ cd ./ansible-kubevirt-modules
(Opcjonalnie) Skonfiguruj wirtualne środowisko, aby odizolować zależności:
$ python3 -m venv env $ source env/bin/activate
Zainstaluj zależności:
$ pip install openshift
Jeśli pominiesz poprzedni krok, możesz potrzebować dodać
sudo
przed tym poleceniem.Zainstaluj ansible (w jeden z wielu sposobów):
Zainstaluj najbardziej aktualną wersję:
$ pip install ansible
Ponownie, może być wymagane
sudo
.Zbuduj RPM z gałęzi deweloperskiej:
$ git clone https://github.com/ansible/ansible.git $ cd ./ansible $ make rpm $ sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm
Uruchom testy:
$ ansible-playbook tests/playbooks/all.yml
Uwaga: Przykłady playbooków zawierają konfigurację cloud-init, aby móc uzyskać dostęp do utworzonych VMI.
Aby użyć SSH, wykonaj następujące kroki:
$ kubectl get all NAME READY STATUS RESTARTS AGE po/virt-launcher-bbecker-jw5kk 1/1 Running 0 22m $ kubectl expose pod virt-launcher-bbecker-jw5kk --port=27017 --target-port=22 --name=vmservice $ kubectl get svc vmservice NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmservice ClusterIP 172.30.133.9 <none> 27017/TCP 19m $ ssh -i tests/test_rsa -p 27017 [email protected]
Może zająć chwilę, zanim maszyna wirtualna uruchomi się przed użyciem SSH.
Aby użyć
virtctl
:$ virtctl console <vmi_name>
Lub
$ virtctl vnc <vmi_name>
Użyj nazwy użytkownika
kubevirt
i hasłakubevirt
.
(Opcjonalnie) Opuszczając wirtualne środowisko, usuń je:
$ deactivate $ rm -rf env/
Uwagi dotyczące modułu kubevirt_cdi_upload
Aby przesłać obraz z localhost, korzystając z modułu kubevirt_cdi_upload
, Twój system musi być w stanie połączyć się z podem proxy do przesyłania CDI. Można to osiągnąć na dwa sposoby:
Ekspozycja usługi
cdi-uploadproxy
z przestrzeni nazwcdi
, lubUżywając
kubectl port-forward
, aby ustawić tymczasowe przekierowanie portów przez serwer API Kubernetes:kubectl port-forward -n cdi service/cdi-uploadproxy 9443:443
Uwagi dotyczące modułu k8s_facts
Następujące polecenie zbierze fakty o istniejących maszyna wirtualnych, jeśli takie istnieją, i wydrukuje dokument JSON oparty na specyfikacji VM KubeVirt:
$ ansible-playbook examples/playbooks/k8s_facts_vm.yml
Uwagi dotyczące wtyczki inwentarza KubeVirt
Wtyczki inwentarza pozwalają użytkownikom wskazywać źródła danych, aby skompilować inwentarz hostów, które Ansible używa do celów zadań, za pomocą parametrów wiersza poleceń -i /path/to/file
i/lub -i 'host1, host2'
lub z innych źródeł konfiguracyjnych.
Włączanie wtyczki KubeVirt inwentarza
Aby włączyć wtyczkę KubeVirt, dodaj następującą sekcję w pliku tests/ansible.cfg
:
[inventory]
enable_plugins = kubevirt
Konfiguracja wtyczki inwentarza KubeVirt
Zdefiniuj konfigurację wtyczki w tests/playbooks/plugin/kubevirt.yaml
w następujący sposób:
plugin: kubevirt
connections:
- namespaces:
- default
interface_name: default
W tym przykładzie wtyczka KubeVirt wylistuje wszystkie VMI z przestrzeni nazw default
i użyje nazwy interfejsu default
.
Użycie wtyczki inwentarza KubeVirt
Aby użyć wtyczki w playbooku, uruchom:
$ ansible-playbook -i kubevirt.yaml <playbook>
Uwaga: Wtyczka inwentarza KubeVirt jest zaprojektowana do pracy z Multus. Może być używana tylko dla VMI, które są połączone z mostem i wyświetlają adres IP w polu Status. Dla VMI eksponowanych przez usługi Kubernetes proszę użyć modułu Ansible k8s.
ansible-galaxy install kubevirt.kubevirt-modules