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ć?
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.
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.
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
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
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.
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
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.
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