Jak rozwijać lokalnie z Kubernetes?

Kubernetes wydaje się, że chodzi o wdrażanie kontenerów w chmurze klastrów. To, czego nie dotyka, to Środowiska programistyczne i inscenizacyjne (lub takie).

Podczas tworzenia chcesz być jak najbliżej środowiska produkcyjnego z kilkoma ważnymi zmianami:

  • wdrożony lokalnie (lub przynajmniej gdzieś, gdzie ty i tylko Ty masz dostęp)
  • użyj najnowszego kodu źródłowego przy odświeżaniu strony (przypuśćmy, że jest to strona internetowa; najlepiej automatyczne odświeżanie strony przy zapisie pliku lokalnego, co można zrobić, jeśli zamontujesz kod źródłowy i użyjesz niektórych rzeczy, takich jak Yeoman).

Podobnie można chcieć, aby środowisko Niepubliczne wykonywało ciągłą integrację .

Czy Kubernetes obsługuje takie środowisko programistyczne, czy jest to coś, co trzeba zbudować, mając nadzieję, że podczas produkcji nadal będzie działać?

Author: Wernight, 2015-04-20

7 answers

Aktualizacja (2016-07-15)

Wraz z wydaniem Kubernetes 1.3, Minikube jest teraz zalecanym sposobem uruchamiania Kubernetes na lokalnej maszynie do rozwoju.


Możesz uruchomić Kubernetes lokalnie przez Docker . Po uruchomieniu węzła możesz uruchomić pod, który ma prosty serwer WWW i montuje wolumin z komputera hosta. Po naciśnięciu na serwer WWW odczyta z woluminu i jeśli zmienisz plik na dysku lokalnym, może on służyć najnowsza wersja.

 55
Author: Robert Bailey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-15 08:21:00

Kolejnym świetnym punktem wyjścia jest TA konfiguracja Vagrant , esp. jeśli Twój system operacyjny to Windows. Oczywistymi zaletami są

  • szybka i bezbolesna konfiguracja
  • łatwe do zniszczenia / odtworzenia maszyny
  • implicit limit on resources
  • możliwość testowania skalowania poziomego poprzez tworzenie wielu węzłów

Wady - potrzebujesz dużo pamięci RAM, a VirtualBox to VirtualBox... na dobre i na złe.

Mieszaną zaletą / wadą jest mapowanie plików przez NFS. W naszej konfiguracji stworzyliśmy dwa zestawy definicji RC - jeden, który po prostu pobiera obraz Dockera naszych serwerów aplikacji; drugi z 7 dodatkowymi liniami, które ustawiają mapowanie plików z HostOS - > Vagrant - > VirtualBox - > CoreOS - > Kubernetes pod; nadpisując kod źródłowy z obrazu Dockera.

Minusem tego jest pamięć podręczna plików NFS - z nią jest problematyczna, bez niej jest problematycznie wolna. Nawet ustawienie mount_options: 'nolock,vers=3,udp,noac' nie usuwa problemów z buforowaniem całkowicie, ale to działa przez większość czasu. Niektóre zadania Gulp uruchamiane w kontenerze mogą potrwać 5 minut, podczas gdy w systemie operacyjnym hosta 8 sekund. Dobrym kompromisem wydaje się być mount_options: 'nolock,vers=3,udp,ac,hard,noatime,nodiratime,acregmin=2,acdirmin=5,acregmax=15,acdirmax=15'.

Jeśli chodzi o automatyczne przeładowywanie kodu, to jest to specyficzne dla języka, ale jesteśmy zadowoleni z Devserver Django dla Pythona i Nodemon dla węzła.js. W przypadku projektów frontend, można oczywiście zrobić wiele z czymś takim jak gulp+browserSync+watch, ale dla wielu programistów nie jest trudno obsługiwać z Apache i po prostu robić tradycyjne mocne odświeżenie.

Przechowujemy 4 zestawy plików yaml dla Kubernetes. Dev, "devstable", scena, prod. Różnice między nimi są

  • zmienne ENV jawnie ustawiające środowisko (dev/stage / prod)
  • liczba replik
  • devstable, stage, prod używa obrazów dokera
  • dev używa obrazów dokerów i mapuje folder NFS z kodem źródłowym.

Bardzo przydatne jest tworzenie wielu aliasów Basha i autouzupełnianie - mogę po prostu wpisać rec users i zrobi to kubectl delete -f ... ; kubectl create -f .... Jeśli chcę uruchomić całą konfigurację, wpisuję recfo, a ona odtwarza kilkanaście usług, pobierając najnowsze obrazy Dockera, importując najnowszy zrzut db z Staging env i czyszcząc stare pliki Dockera, aby zaoszczędzić miejsce.

 4
Author: analytik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-21 13:37:51

Pracowaliśmy nad narzędziem, aby to zrobić. Podstawową ideą jest to, że masz zdalny klaster Kubernetes, skutecznie środowisko testowe, a następnie uruchamiasz kod lokalnie, a kod jest proxyowany do zdalnego klastra. Otrzymujesz przejrzysty dostęp do sieci, skopiowane zmienne środowiskowe, dostęp do woluminów... jak najbliżej zdalnego środowiska, ale z kodem działającym lokalnie i pod pełną kontrolą.

Więc można zrobić rozwój NA ŻYWO, powiedzmy. Docs at http://telepresence.io

 4
Author: Itamar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 13:43:12

Rodzaj "hot reload" jest czymś, co planujemy dodać, ale nie jest tak proste, jak mogłoby to być dzisiaj. Jeśli jednak masz ochotę na przygodę, możesz użyć rsync z docker exec, kubectl exec lub osc exec (wszystkie robią to samo z grubsza), aby zsynchronizować katalog lokalny z kontenerem za każdym razem, gdy się zmieni. Możesz użyć rsync z kubectl lub osc exec w ten sposób:

# rsync using osc as netcat
$ rsync -av -e 'osc exec -ip test -- /bin/bash' mylocalfolder/ /tmp/remote/folder
 3
Author: Clayton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-21 19:49:51

Właśnie zacząłem od Skaffold

Bardzo przydatne jest automatyczne stosowanie zmian w kodzie do klastra lokalnego.

Aby wdrożyć klaster lokalny, najlepszym sposobem jest Minikube lub po prostu Docker dla Mac i Windows, oba zawierają interfejs Kubernetes.

 3
Author: Ignacio Millán,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-21 16:31:17

Zobacz https://github.com/kubernetes/kubernetes/issues/12278 do montowania woluminu z komputera hosta, odpowiednik:

docker run -v hostPath:ContainerPath
 2
Author: akshayl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-16 07:17:50

Kubespary jest pomocny w tworzeniu klastrów lokalnych. Najczęściej używałem klastra opartego na Vagrant na lokalnej maszynie.

Konfiguracja Kubespray Możesz dostosować te zmienne, aby miały żądaną wersję kubernetes.

 1
Author: YAP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-25 11:21:43