Docker

Docker w produkcji

2016-03-16
Podziel się

Czy myślicie o implementacji strategii związanej z konteneryzacją ale powstrzymują was wątpliwości co do tego jak zarządzać kontenerami Docker w produkcji? Rozwiązanie może być prostsze niż myślicie.

Przeniesienie złożonych stosów IT do środowiska w pełni skonteneryzowanego, albo błyskawiczne stworzenie nowej infrastruktury opartej na kontenerach to spore wyzwanie, a w niektórych przypadkach nawet zupełnie niemożliwe. Bardzo często potrzeba gwarancji, że kontenery zapewnią spójność, lekkość i izolację aplikacji, a dodatkowo elastyczność potrzebną do pracy w wielu środowiskach nie poddających się konteneryzacji. W niektórych środowiskach wykorzystanie kontenerów nie ma zatem sensu. Przykładowo mogą to być środowiska charakteryzujące się większymi wymaganiami związanymi z izolacją (dane wrażliwe, medyczne, billingowe), albo wymagające bezpośredniego dostępu do sprzętu (np. renderowanie na GPU).

Elastyczność
Playbooki (pliki z regułami konfiguracji) używane w Ansible są przenośne, co oznacza że można je uruchamiać na różnych systemach np. na Ubuntu i Red Hat. Kiedy kontener tworzony jest wyłącznie z wykorzystaniem Dockerfile (czyli natywnego narzędzia do budowania kontenerów Dockera), powtarzalność aplikacji może być zagwarantowana tylko poprzez kontener Docker. Gdybyśmy natomiast zdecydowali się na użycie Ansible, można środowisko powielić nie tylko w Dockerze, ale też na Vagrancie, instancji w chmurze lub instalacji fizycznej. Dodatkowo można budować kontenery za pomocą przygotowanych wcześniej ról.

Kontrola
Dzięki automatyzacji zyskujemy łatwość w śledzeniu potencjalnych wrażliwości na kłopoty. Mimo iż kontenery zapewniają pewien poziom izolacji, nie zdejmuje to z barków pracowników działu IT ciężaru związanego z kontrolowaniem tego gdzie ulokowane są ich kontenery, ani ze śledzenia wszystkich wrażliwości i zagwarantowaniu, że w razie potrzeby kontener można odtworzyć. W tej sytuacji pomocną dłoń wyciąga do nas automatyzacja, dzięki której łatwo jest monitorować niektóre procesy, jak na przykład utylizację zasobów (cpu/pamięć/sieć). Dzięki niektórym funkcjonalnościom (Ansible Tower czyli graficzny interfejs dodany do Ansible) można uzyskać dokładne informacje na temat tego kto uruchomił który kontener, jakim kodem gdzie i kiedy. Należy jednak pamiętać, że nie można oczekiwać, że będzie możliwe monitorowanie aplikacji na poziomie syscalli (odpowiednik auditd), czy samego konteneru na ewentualność wstrzyknięcia dodatkowych procesów.

Użytkownicy Puppeta mogą być zaznajomieni z Foremanem, pluginem, z którego może skorzystać zarządzający infrastrukturą specjalista, aby uzyskać wgląd ale też budować kontenery.

Wszechstronność
Automatyzacja sprawia, że zarządzanie Dockerem we wszystkich środowiskach staje się wykonalne. Możliwe jest zarządzanie nie tylko kontenerami, ale też środowiskami dookoła nich. Instancje Dockera muszą być regularnie uruchamiane, konfigurowane, łączone i zarządzane, bez względu na to, czy są maszynami fizycznymi, czy zwirtualizowanymi.

Zarządzanie kontenerami Docker z Puppet
Puppet oferuje moduł do zarządzania Dockerem, wspiera on instalację Dockera w okreslonej wersji, konfigurację sieciowych API za pomocą TCP, umożliwia zarządzanie ustawieniami DNS, ale też wybieranie wolumenu oraz wiele innych. Konfiguracja może zostać dokonana poprzez przekazanie parametrów do klasy Dockera albo przez Hierę, czyli zintegrowaną, hierarchiczną bazę konfiguracji (CMDB). Poza instalacją i wsparciem w zarządzaniu kontenerami, moduł oferuje też pobieranie obrazów z Docker Hub. Moduł wspiera również zarządzanie pracą poszczególnych kontenerów. Nie jest ona w stanie zastapić zaawansowanych funkcji procesu rozmieszczającego wyższego poziomu, jak Kubernetes, czy Mesos, daje zaś możliwość uniknięcia użycia dodatkowego języka. Moduł nadaje się też do zarządzania kontenerami działającymi uż w istniejącej infrastrukturze. Kontenery mogą być uruchamiane i sterowane przez system operacyjny (przy użyciu systemd, czy sysvinit) albo poprzez wbudowany w Dockerze process manager.

Podsumowując
Korzystając z narzędzi do automatyzacji IT można instalować, konfigurować i zarządzać kontenerami oraz ich obrazami, jak i hostami kontenerów i usługami działającymi na tych hostach. Wersje enterprise rozwiązań automatyzacyjnych zapewniają wsparcie dla kontenerów, dając pewność, że są one gotowe do pracy na produkcji. Bez względu na system operacyjny, lub model wdrożenia, czy to w środowisku fizycznym, wirtualnym, czy w chmurze, Docker wzbogacony o narzędzia automatyzacyjne pozwala na reprodukcję całego środowiska produkcyjnego w sposób bezpieczny, spójny i powtarzalny. Jednak wersja Enterprise nie jest jedynym rozwiązaniem, większość narzędzi jest dostępna w wersji otwartej i umożliwia dalszą integrację i rozwój.

LinuxPolska jako partner firm Docker, Red Hat (Ansible) oraz Puppet, oferuje szkolenia i konsultacje związane z wdrożeniem konteneryzacji.