OpenStack

z punktu widzenia

dewelopera i operatora


Paweł Suder

17.05.2018

GitHub

O mnie


  • Zajmuję się komputerami od kilku lat
  • Programowałem w C, Java, Python i Ruby
  • Zajmowałem się OpenStackiem jako chmurą prywatną
  • Pracowałem jako inżynier wsparcia klientów Cisco
  • Pracuję z OpenStackiem jako chmurą publiczną
  • Jeżdżę na motocyklu enduro i chodzę po górach

OpenStack


Moja historia

OpenStack - kiedyś


  • Konfederacja usług cloud Atmosphere
  • Obsługa prywatnych instalacji OpenStack
  • Instalacja z paczek dystrybucji Ubuntu
  • Brak zarządzania konfiguracją
  • Wersja OpenStacka: Havana lub Icehouse
  • Głównie obsługa operatorska clouda

OpenStack - teraz


  • Chmura publiczna OVH na OpenStacku
  • Instalacja specyficzna dla OVH
  • Konfiguracja z wykorzystaniem Puppeta
  • Workflow pracy nad kodem podobny community
  • Upgrade OpenStacka z Juno do Newtona i wyższej

OpenStack

Historia


  • Cloud w latach 1977/1981/1993
  • Cloud jako produkt/usługa od 2000
  • Popularyzacja dzięki Amazon Elasitc Compute Cloud od 2006 - IaaS
  • Uruchomienie Google App Engine w 2008 - PaaS
  • OpenNebula w 2008 - private/hybrid-cloud open source platform
  • Uruchomienie Microsoft Azure w 2010 ogłoszonej w 2008
  • W 2010 rozpoczęcie prac nad OpenStackiem przez Rackspace i NASA
  • Założenie fundacji OpenStack w 2012

Fundacja


Technical Committee


Narzędzia i praca nad kodem


Lifecycle


Architektura


  • Wiele serwisów do obsługi różnych zasobów
  • Komunikacja oparta o HTTP lub kolejki - RabbitMQ
  • Backend oparty o bazę danych - MySQL/MariaDB oraz PostgresSQL
  • Najważniejsze projekty: Keystone, Nova, Neutron, Glance
  • Więcej na OpenStack Software Overview

Instalacja


Wydarzenia i współpraca


  • OpenStack Summit i PTG - główne wydarzenia fundacji
  • OS Days, OS App Hackathon, Communit events - inne wydarzenia społeczności OpenStack
  • Stackalytics - statystyki dot. kodu i review
  • Różne modele biznesowe pracy z OpenStackiem

Inne


OpenStack w OVH

Historia


  • W 2012 rozpoczęto prace
    • hubiC - usługa storage'u oparta o OpenStack Swift
    • RunAbove - pierwszy Public Cloud oparty o OS
  • W 2014/15 uruchomiono Public Cloud w OVH
  • Od 2015 uruchamiano kolejne region PCI w OVH

Wdrożenie


  • Wdrożenie oparte o paczki z Ubuntu z manualnymi zmianami
  • Puppet do zarządzania konfiguracją
  • Konfiguracja Puppeta oparta o OpenStackowe i OVH moduły
  • Od uruchomienia usługi PCI zaczęto budować paczki - CI/CD
  • Od wersji Newton:
    • zaadaptowano workflow do pracy nad kodem z OpenStack community
    • zaczęto używać r10k do Puppeta
    • rozdzielono kod OVH od kodu z upstreamu

Workflow pracy z kodem


  • DevStack, Dev Infra, Preprod, Prod
  • Unit Tests, Tempest i testy integracyjne
  • Unit testy i tempesty uruchamiane przy każdej zmianie
  • Testy integracyjne uruchomione na preprodzie
  • Dokumentacja ze specyfikacją dla nowych funkcji
  • Zmiany do mastera i cherry-picki do release'ów

Praca z upstreamem


  • Repozytoria z kodem wewnętrznie hostowane
  • Zmiany do upstreamu wysyłane zgodnie z community workflow
  • Zmiany z upstreamu pobierane i syncowane z lokalnymi repozytoriami
  • Sync z upstreamem wykonywany manualnie
  • Kod Novy oraz Neutrona rozdzielony od kodu z upstreamu

Narzędzia


  • Gerrit do wykonywania review
  • Jenkins do uruchamiania
    • testów jednostkowych dla review
    • cyklicznych testów integracyjnych
    • innych cyklicznych zadań
  • Puppet do konfiguracji
  • Wewnętrzne narzędzia do zarządzania i monitorowania serwerów dedykowanych

Usługa w OVH


  • Dysk root instancji bazujący na SSD:
    • plus: wydajność
    • minusy: utrudniona migracja, nie da się szybko przywrócić VMki po wyłączeniu hosta
  • Dodatkowe dyski (wolumeny) umieszczone są na Cephie
  • Sieć publiczna chroniona jest systemem Anti-DDoS

OpenStack


Przykład użycia

Przykład na GitHubie

Horizon


Dodanie klucza SSH

W projekcie wymagany jest klucz publiczny SSH

Horizon


Menu projektu

Dodanie serwera można wykonać przez menu projektu

Horizon


Konfiguracja instancji

Uruchomienie instancji

Horizon


Logowanie

Tworzenie instancji

Instancja


CLI API


Sieci w OVH OpenStack


Publiczna i prywatna vRack

Sieć publiczna w OVH


  • Publiczne adresy IP skonfigurowane bezpośrednio na instancji
  • Brak ruchu L2 na interfejsie instancji
  • Możliwość korzystania z adresów IP FailOver
  • Brak klasycznego węzła sieciowego
➜  ~ nova list --fields name,status,networks
+--------------------------------------+-------+--------+-----------------------------------------------+
| ID                                   | Name  | Status | Networks                                      |
+--------------------------------------+-------+--------+-----------------------------------------------+
| a8337ef7-693b-4f8f-a90c-b5d4ed087528 | web-1 | ACTIVE | Ext-Net=54.38.136.26, 2001:41d0:601:2000::26c |
+--------------------------------------+-------+--------+-----------------------------------------------+
            
ubuntu@web-1:~$ ip addr show ens3
2: ens3:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:5b:71:db brd ff:ff:ff:ff:ff:ff
    inet 54.38.136.26/32 brd 54.38.136.26 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe5b:71db/64 scope link
       valid_lft forever preferred_lft forever
ubuntu@web-1:~$ ip route
default via 54.38.136.1 dev ens3
54.38.136.1 dev ens3  scope link
            

Sieć prywatna w OVH - vRack



Prywatne połączenie wszystkich serwerowni OVH na świecie

Sieć prywatna w OVH - vRack



vRack pozwala na odizolowanie najważniejszych serwerów w ramach prywatnej sieci VLAN

Sieć prywatna w OVH - vRack



Możliwe połączenie Public Cloud z serwerami dedykowanymi

Sieć prywatna w OVH - vRack


Dodawanie sieci prywatnej vRack

Dodawanie sieci prywatnej vRack

Sieć prywatna w OVH - vRack


Widok sieci prywatnych vRack

Widok sieci prywatnych vRack

Sieć prywatna w OVH - vRack


Widok sieci prywatnych vRack

Widok sieci w OpenStack Horizon

Sieć prywatna w OVH - vRack


➜  ~ neutron net-show Private-Net
neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.
+--------------------------+--------------------------------------+
| Field                    | Value                                |
+--------------------------+--------------------------------------+
| admin_state_up           | True                                 |
| availability_zone_hints  |                                      |
| availability_zones       | nova                                 |
| created_at               | 2018-02-13T10:44:43Z                 |
| description              |                                      |
| id                       | adc65d0c-abd3-47d9-a1a3-96ed4ea50485 |
| ipv4_address_scope       |                                      |
| ipv6_address_scope       |                                      |
| mtu                      | 9000                                 |
| name                     | Private-Net                          |
| project_id               | 84506b08626d4e03a581d170f3bc53d2     |
| provider:network_type    | vrack                                |
| provider:segmentation_id | 0                                    |
| qos_policy_id            |                                      |
| revision_number          | 4                                    |
| router:external          | False                                |
| shared                   | False                                |
| status                   | ACTIVE                               |
| subnets                  | b55fd630-79e4-4101-9d30-12ba693533ca |
| tags                     |                                      |
| tenant_id                | 84506b08626d4e03a581d170f3bc53d2     |
| updated_at               | 2018-02-13T10:44:49Z                 |
+--------------------------+--------------------------------------+
            

Sieć prywatna w OVH - vRack


➜  ~ neutron subnet-show b55fd630-79e4-4101-9d30-12ba693533ca
neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.
+-------------------+----------------------------------------------------+
| Field             | Value                                              |
+-------------------+----------------------------------------------------+
| allocation_pools  | {"start": "192.168.0.214", "end": "192.168.0.254"} |
| cidr              | 192.168.0.0/24                                     |
| created_at        | 2018-02-13T10:44:49Z                               |
| description       |                                                    |
| dns_nameservers   |                                                    |
| enable_dhcp       | True                                               |
| gateway_ip        |                                                    |
| host_routes       |                                                    |
| id                | b55fd630-79e4-4101-9d30-12ba693533ca               |
| ip_version        | 4                                                  |
| ipv6_address_mode |                                                    |
| ipv6_ra_mode      |                                                    |
| name              |                                                    |
| network_id        | adc65d0c-abd3-47d9-a1a3-96ed4ea50485               |
| project_id        | 84506b08626d4e03a581d170f3bc53d2                   |
| revision_number   | 2                                                  |
| service_types     |                                                    |
| subnetpool_id     |                                                    |
| tenant_id         | 84506b08626d4e03a581d170f3bc53d2                   |
| updated_at        | 2018-02-13T10:44:49Z                               |
+-------------------+----------------------------------------------------+
            

Sieć prywatna w OVH - vRack


Sieć prywatna w OVH - vRack


➜  ~ nova list --fields name,status,networks
+--------------------------------------+-------+--------+----------------------------------------------------------------------------+
| ID                                   | Name  | Status | Networks                                                                   |
+--------------------------------------+-------+--------+----------------------------------------------------------------------------+
| 9c1097ae-2e7e-4244-91b6-017ed75191b4 | db-1  | ACTIVE | Ext-Net=145.239.28.190, 2001:41d0:601:2000::245; Private-Net=192.168.0.224 |
| a8337ef7-693b-4f8f-a90c-b5d4ed087528 | web-1 | ACTIVE | Ext-Net=54.38.136.26, 2001:41d0:601:2000::26c; Private-Net=192.168.0.218   |
+--------------------------------------+-------+--------+----------------------------------------------------------------------------+
            
Widok listy instancji z dwoma sieciami

Widok listy instancji z dwoma sieciami

Sieć prywatna w OVH - vRack


ubuntu@web-1:~$ mtr -r -c 1 192.168.0.224
Start: Tue Feb 13 13:17:33 2018
HOST: web-1                       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 192.168.0.224              0.0%     1    1.4   1.4   1.4   1.4   0.0
            
ubuntu@web-1:~$ mtr -r -c 1 145.239.28.190
Start: Tue Feb 13 13:17:52 2018
HOST: web-1                       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 54.38.136.1                0.0%     1    0.2   0.2   0.2   0.2   0.0
  2.|-- 192.168.250.254            0.0%     1    0.1   0.1   0.1   0.1   0.0
  3.|-- 192.168.250.8              0.0%     1    0.3   0.3   0.3   0.3   0.0
  4.|-- ip-145-239-28.eu           0.0%     1    0.4   0.4   0.4   0.4   0.0
            

OpenStack


Automatyzacja

Automatyzacja


  • Publiczne API OpenStack
  • Narzędzia do automatyzacji: Ansible, Terraform, ...
  • Konteneryzacja aplikacji

Automatyzacja


Automatyzacja


Widok instalacji Wordpressa

Widok instalacji Wordpressa

Automatyzacja


Widok Wordpressa

Widok Wordpressa

OpenStack


Przestrzeń dyskowa

Przestrzeń dyskowa


Widok przestrzeni dyskowej

Widok przestrzeni dyskowej

Przestrzeń dyskowa


Dodawanie nowego kontenera Dodawanie nowego kontenera

Dodawanie nowego kontenera

Przestrzeń dyskowa


Instalowanie pluginu w Wordpress

Instalowanie pluginu w Wordpress

Przestrzeń dyskowa


Konfigurowanie pluginu w Wordpress

Konfigurowanie pluginu w Wordpress

Przestrzeń dyskowa


Dodawanie nowego użytkownika w projekcie OpenStack Dodawanie nowego użytkownika w projekcie OpenStack

Dodawanie nowego użytkownika w projekcie OpenStack

Przestrzeń dyskowa


Pobranie konfiguracji dostępu do OpenStack API Pobranie konfiguracji dostępu do OpenStack API

Pobranie konfiguracji dostępu do OpenStack API

Przestrzeń dyskowa


Pobranie konfiguracji dostępu do OpenStack API

Pobranie konfiguracji dostępu do OpenStack API

Przestrzeń dyskowa


Konfiguracja pluginu w Wordpress Konfiguracja pluginu w Wordpress

Konfiguracja pluginu w Wordpress

Przestrzeń dyskowa


Backup Backup

OpenStack


Podsumowanie

Podsumowanie


  • OpenStack jest rozwiązaniem otwartym i tworzone jest przez community
  • OpenStacka można uruchamiać jako chmurę prywatną lub publiczną
  • Ze względu na powszechność OpenStacka, istnieje wiele narzędzi do automatyzacji

Pytania

Dziękuję