By Ghulam Qadir, Alibaba Cloud Tech Share Author. Tech Share to program motywacyjny Alibaba Cloud zachęcający do dzielenia się wiedzą techniczną i najlepszymi praktykami w społeczności chmurowej.
OpenStack to darmowa platforma oprogramowania open-source, która zapewnia IaaS (infrastructure-as-a-service) dla chmur publicznych i prywatnych.
Platforma OpenStack składa się z kilku powiązanych ze sobą projektów, które kontrolują sprzęt, pamięć masową, zasoby sieciowe centrum danych, takie jak: Compute, Image Service, Block Storage, Identity Service, Networking, Object Storage, Telemetry, Orchestration i Database.
Chociaż podstawową funkcją OpenStack jest dostarczanie platformy IaaS, jest ona wykorzystywana jako DBaaS (database-as-a-service), budowanie klastrów Hadoop, orkiestracja Containerów i wiele innych. Administracja tymi komponentami może być zarządzana poprzez interfejs webowy lub za pomocą wiersza poleceń OpenStack.
Tutorial ten pokaże jak można wdrożyć własną infrastrukturę chmury prywatnej z OpenStack zainstalowaną na pojedynczym węźle za pomocą repozytoriów rdo, chociaż wdrożenie może być osiągnięte na wielu węzłach. Będziemy wdrażać tę usługę na instancjach Alibaba Cloud Elastic Compute Service (ECS) z systemem CentOS 7.
- Hostname = openstack.example.com
- Adres IP = 192.168.1.40
- netmask = 255.255.255.0
- Gateway = 192.168.1.1
- DNS = 192.168.1.254
Wymagania wstępne
- Musisz mieć aktywowaną usługę Alibaba Cloud Elastic Compute Service (ECS) i zweryfikowaną ważną metodę płatności. Jeśli jesteś nowym użytkownikiem, możesz uzyskać darmowe konto na swoim koncie Alibaba Cloud. Jeśli nie wiesz, jak skonfigurować instancję ECS, możesz skorzystać z tego samouczka lub przewodnika szybkiego startu.
- Powinieneś skonfigurować nazwę hosta swojego serwera.
- Dostęp do konsoli VNC w Alibaba Cloud lub klienta SSH zainstalowanego na Twoim komputerze.
Po spełnieniu warunków wstępnych, zaloguj się jako użytkownik root z nazwą użytkownika root & hasłem za pomocą klienta SSH (np. Putty) lub konsoli VNC dostępnej w pulpicie nawigacyjnym Twojego konta Alibaba Cloud.
Upewnij się, że Twój system ma co najmniej 16GB pamięci RAM i procesor z obsługą VT. Sprawdź obsługę VT za pomocą poniższego polecenia.
egrep --color 'vmx|svm' /proc/cpuinfo | wc –l
Output: (nie powinno być zero)
2
Initial System Configurations
- Zanim zaczniesz przygotowywać węzeł w celu wdrożenia własnej infrastruktury chmury wirtualnej, najpierw zaloguj się na konto root i upewnij się, że system jest aktualny.
Upewnij się, że na maszynie znajduje się najnowsza wersja systemu CentOS 7.
yum -y update
- Następnie wydaj polecenie ss -tulpn, aby wyświetlić listę wszystkich działających usług.
Ss -tulpn
Teraz zidentyfikuj niepotrzebne usługi, zatrzymaj je, wyłącz i usuń. Przede wszystkim Postfix, NetworkManager i Firewalld. Po tym, jedyną usługą, która będzie działać na twojej maszynie linuxowej powinien być tylko sshd.
# systemctl stop postfix firewalld NetworkManager # systemctl disable postfix firewalld NetworkManager # systemctl mask NetworkManager # yum remove postfix NetworkManager NetworkManager-libnm
Trwale wyłącz politykę Selinux na twojej maszynie linuxowej wykonując następujące polecenia. Edytuj również plik /etc/selinux/config i zmodyfikuj SELINUX z wymuszającej na wyłączoną jak pokazano na poniższym obrazku.
# setenforce 0 # getenforce # vi /etc/selinux/config
W kolejnym kroku użyj polecenia hostnamectl aby ustawić nazwę hosta systemu Linux. Zastąp odpowiednio zmienną FQDN.
# hostnamectl set-hostname cloud.centos.lan
Na koniec zainstaluj ntpdate, aby zsynchronizować czas z serwerem NTP.
# yum install ntpdate
Instalacja OpenStack w CentOS i RHEL
OpenStack zostanie wdrożony na węźle za pomocą pakietu PackStack dostarczonego przez repozytorium rdo (RPM Distribution of OpenStack).
Aby włączyć repozytoria rdo na RHEL 7 wykonaj poniższe polecenie.
# yum install https://www.rdoproject.org/repos/rdo-release.rpm
Na CentOS 7, repozytorium Extras zawiera RPM, który aktywuje repozytorium OpenStack. Extras jest już włączone, więc można łatwo zainstalować RPM, aby skonfigurować repozytorium OpenStack:
# yum install -y centos-release-openstack-mitaka # yum update –y
Zainstalujmy pakiet Packstat na maszynie linuxowej za pomocą następującego polecenia:
# yum install openstack-packstack
Następnym krokiem jest wygenerowanie pliku odpowiedzi dla Packstack z domyślnymi konfiguracjami, które będą później edytowane z wymaganymi parametrami w celu wdrożenia samodzielnej instalacji Openstack (pojedynczy węzeł).
Plik zostanie nazwany zgodnie z bieżącym znacznikiem czasu podczas generowania (dzień, miesiąc i rok).
# packstack --gen-answer-file='date +"%d.%m.%y"'.conf # ls
Teraz edytuj plik odpowiedzi za pomocą swojego ulubionego edytora tekstu.
vi 26.07.18.conf
i zastąp następujące parametry, aby dopasować je do poniższych wartości. W celu zachowania bezpieczeństwa zastąp odpowiednio pola haseł.
CONFIG_NTP_SERVERS=0.ro.pool.ntp.org
CONFIG_PROVISION_DEMO=n
CONFIG_KEYSTONE_ADMIN_PW=your_password for Admin user
Dostęp do pulpitu OpenStack przez HTTP z włączonym SSL.
CONFIG_HORIZON_SSL=y
Hasło root dla serwera MySQL.
CONFIG_MARIADB_PW=mypassword1234
Po zakończeniu edycji zapisz i zamknij plik. Otwórz również plik konfiguracyjny serwera SSH i odkomentuj linię PermitRootLogin, usuwając przedni hashtag, jak pokazano na poniższym zrzucie ekranu.
# vi /etc/ssh/sshd_config
Następnie uruchom ponownie usługę SSH, aby zmiany zostały uwzględnione.
# systemctl restart sshd
Start Openstack Installation Using Packstack Answer File
Na koniec uruchom proces instalacji Openstack poprzez plik odpowiedzi edytowany powyżej, wykonując poniższą składnię poleceń:
# packstack --answer-file 13.04.16.conf
Po pomyślnym zakończeniu instalacji komponentów OpenStack, instalator wyświetli kilka linii z linkami do lokalnych pulpitów nawigacyjnych dla OpenStack i Nagios oraz wymagane poświadczenia skonfigurowane już powyżej w celu zalogowania się na obu panelach.
Poświadczenia te są również przechowywane pod twoim katalogiem domowym w pliku keystonerc_admin.
Jeśli z jakichś powodów proces instalacji kończy się błędem dotyczącym usługi httpd, otwórz plik /etc/httpd/conf.d/ssl.conf i upewnij się, że zakomentowałeś następującą linię, jak pokazano poniżej.
#Listen 443 https
Następnie zrestartuj demona Apache, aby zastosować zmiany.
# systemctl restart httpd.service
Uwaga: W przypadku, gdy nadal nie możesz przeglądać panelu Openstack na porcie 443 uruchom ponownie proces instalacji od początku tym samym poleceniem, które zostało wydane przy pierwszym wdrożeniu.
# packstack --answer-file /root/26.07.18.conf
Zdalny dostęp do OpenStack Dashboard
Aby uzyskać dostęp do panelu OpenStack ze zdalnego hosta w sieci LAN, przejdź do adresu IP maszyny lub FQDN/dashboard poprzez protokół HTTPS.
Ponieważ używasz certyfikatu samopodpisanego przez niezaufany urząd certyfikacji, w przeglądarce powinien zostać wyświetlony błąd.
Zaakceptuj błąd i zaloguj się do dashboardu używając użytkownika admin i hasła ustawionego na parametrze CONFIG_KEYSTONE_ADMIN_PW z pliku odpowiedzi ustawionego powyżej.
https://192.168.1.40/dashboard
Alternatywnie, jeśli zdecydowałeś się na instalację komponentu Nagios dla OpenStack, możesz wejść na stronę panelu Nagios pod następującym adresem URI i zalogować się używając poświadczeń ustawionych w pliku odpowiedzi.
https://192.168.1.40/nagios
Konfiguracja
OpenStack jest zbiorem komponentów projektu open source, które umożliwiają konfigurowanie usług w chmurze. Każdy komponent używa podobnych technik konfiguracji i wspólnego szkieletu dla opcji pliku INI.
W tym przewodniku zebrano wiele referencji i opcji konfiguracyjnych dla następujących komponentów OpenStack:
- Usługa Bare Metal
- Usługa Block Storage
- Usługa Compute
- Usługa Dashboard
- Usługa Database
- Usługa Data Processing
- Usługa Identity
- Usługa Image
- Usługa Message. service
- Networking service
- Object Storage service
- Orchestration service
- Shared File Systems service
- Telemetry service
OpenStack używa formatu pliku INI dla plików konfiguracyjnych. Plik INI jest prostym plikiem tekstowym, który określa opcje jako pary klucz=wartość, pogrupowane w sekcje. Sekcja DEFAULT zawiera większość opcji konfiguracyjnych. Linie rozpoczynające się od znaku hash (#) są liniami komentarza. Na przykład:
# Print debugging output (set logging level to DEBUG instead # of default WARNING level). (boolean value) debug = true # The SQLAlchemy connection string used to connect to the # database (string value) connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
Opcje mogą mieć różne typy wartości. Komentarze w przykładowych plikach konfiguracyjnych zawsze o tym wspominają a tabele wymieniają wartość Opt jako pierwszy element jak (BoolOpt) Toggle…. Następujące typy są używane przez OpenStack:
wartość boolowska (BoolOpt)
Włącza lub wyłącza opcję. Dozwolone wartości to true i false.
# Enable the experimental use of database reconnect on # connection lost (boolean value) use_db_reconnect = false
wartość zmiennoprzecinkowa (FloatOpt)
Liczba zmiennoprzecinkowa, taka jak 0,25 lub 1000.
# Sleep time in seconds for polling an ongoing async task # (floating point value) task_poll_interval = 0.5
wartość całkowita (IntOpt)
Liczba całkowita to liczba bez składników ułamkowych, taka jak 0 lub 42.
# The port which the OpenStack Compute service listens on. # (integer value) compute_port = 8774
Adres IP (IPOpt)
Adres IPv4 lub IPv6.
# Address to bind the server. Useful when selecting a particular network # interface. (ip address value) bind_host = 0.0.0.0
Pary klucz-wartość (DictOpt)
Pary klucz-wartość, znane również jako dyktafon. Pary klucz-wartość są oddzielone przecinkami, a dwukropek jest używany do oddzielenia klucza i wartości. Przykład: klucz1:wartość1,klucz2:wartość2.
# Parameter for l2_l3 workflow setup. (dict value) l2_l3_setup_params = data_ip_address:192.168.200.99, \ data_ip_mask:255.255.255.0,data_port:1,gateway:192.168.200.1,ha_port:2
lista wartości (ListOpt)
Przedstawia wartości innych typów, oddzielone przecinkami. Przykładowo, poniższy tekst ustawia allowed_rpc_exception_modules na listę zawierającą cztery elementy oslo.messaging.exceptions, nova.exception, cinder.exception, oraz exceptions:
# Modules of exceptions that are permitted to be recreated # upon receiving exception data from an rpc call. (list value) allowed_rpc_exception_modules = oslo.messaging.exceptions,nova.exception
multi valued (MultiStrOpt)
Opcja multi-valued jest wartością łańcuchową i może być podana więcej niż raz, wszystkie wartości zostaną użyte.
# Driver or drivers to handle sending notifications. (multi valued) notification_driver = nova.openstack.common.notifier.rpc_notifier notification_driver = ceilometer.compute.nova_notifier
port value (PortOpt)
Numer portu TCP/IP. Porty mogą mieć zakres od 1 do 65535.
# Port to which the UDP socket is bound. (port value) # Minimum value: 1 # Maximum value: 65535 udp_port = 4952
wartość łańcuchowa (StrOpt)
Stresy mogą być opcjonalnie ujęte w pojedyncze lub podwójne cudzysłowy.
# Enables or disables publication of error events. (boolean value) publish_errors = false # The format for an instance that is passed with the log message. # (string value) instance_format = " "
Sekcje
Opcje konfiguracyjne są pogrupowane według sekcji. Większość plików konfiguracyjnych obsługuje co najmniej następujące sekcje:
Zawierają większość opcji konfiguracyjnych. Jeśli dokumentacja dla opcji konfiguracyjnej nie określa jej sekcji, przyjmij, że pojawia się ona w tej sekcji.
Opcje konfiguracyjne dla bazy danych, która przechowuje stan usługi OpenStack.
Zastępowanie
Plik konfiguracyjny obsługuje zastępowanie zmiennych. Po ustawieniu opcji konfiguracyjnej można się do niej odwoływać w późniejszych wartościach konfiguracyjnych, jeśli poprzedzimy ją znakiem $, jak $OPTION.
Następujący przykład używa wartości rabbit_host i rabbit_port do zdefiniowania wartości opcji rabbit_hosts, w tym przypadku jako controller:5672.
# The RabbitMQ broker address where a single node is used. # (string value) rabbit_host = controller # The RabbitMQ broker port where a single node is used. # (integer value) rabbit_port = 5672 # RabbitMQ HA cluster host:port pairs. (list value) rabbit_hosts = $rabbit_host:$rabbit_port
Aby uniknąć podstawiania, użyj
$$, jest ono zastępowane pojedynczym $. Na przykład, jeśli twoje hasło DNS LDAP to $xkj432, określ je w następujący sposób:
ldap_dns_password = $$xkj432
Kod używa łańcucha Pythona. Template.safe_substitute() do implementacji zastępowania zmiennych. Aby uzyskać więcej szczegółów na temat sposobu rozwiązywania problemu zastępowania zmiennych.
Whitespace
Aby zawrzeć whitespace w wartości konfiguracyjnej, użyj cytowanego łańcucha. Na przykład:
ldap_dns_passsword='a password with spaces'
Definiowanie alternatywnej lokalizacji dla pliku konfiguracyjnego
Większość usług i klientów wiersza poleceń -manage ładuje plik konfiguracyjny. Aby zdefiniować alternatywną lokalizację dla pliku konfiguracyjnego, należy przekazać parametr –config-file CONFIG_FILE podczas uruchamiania usługi lub wywoływania polecenia -manage.
Podsumowanie
Zademonstrowaliśmy instalację OpenStack w systemach Red Hat, CentOS i Fedora Linux. Teraz możesz łatwo skonfigurować swoje własne środowisko chmury prywatnej na Alibaba Cloud Elastic Compute Service (ECS) za pomocą OpenStack.
.