Wpis z mikrobloga

#programowanie #devops #docker

Mam parę pytań związanych z wdrażaniem aplikacji internetowej na serwer. Obecnie aktualizacja mojej aplikacji wygląda tak: pobieram poprzez git pull kod z repozytorium, zatrzymuję kontenery, następnie uruchamiam je ponownie (docker-compose). W rezultacie aplikacja jest niedostępna przez parę minut dla użytkowników. Pytanie czy można to zrobić lepiej.

1. Widziałem ostatnio na jakiejś prezentacji że Kubernetes pozwala na uruchomienie paru instancji aplikacji na raz i na stopniowe aktualizowanie aplikacji instancja po instancji. Dzięki temu końcowy użytkownik nie doświadcza żadnej przerwy w dostępie. Z tym że czy to nie jest zbyt potężne narzędzie jak na takie zastosowanie? Aplikacja raczej mała, działa na jednym tanim VPSie.

2. Chciałbym uniknąć pullowania kodu na serwer produkcyjny. Jakie są alternatywy? Wrzucanie kontenerów na docker hub? Obecnie plan "micro" kosztuje 2x więcej niż płacę za VPSa i w dodatku ilość repozytoriów jest ograniczona. Da się jakoś taniej? ( ͡° ͜ʖ ͡°)

3. Czego się teraz używa żeby zautomatyzować deployment aplikacji? Jenkins to dobry wybór na start?
  • 7
  • Odpowiedz
@obserwator_z_prawem_interwencji: Ogółem @Lipathor: ma racje. Jedna drobna różnica jaką uważam to to, że nie potrzebujesz na raz dwóch instancji, a jedynie na czas aktualizacji. Poza tym przed tymi instancjami potrzebujesz loadbalancera takiego jak np haproxy. Aby to zrobić profesjonalnie powinienes na haproxy zrobic softstop dla jednej instancji, po wygasnieciu polaczen zrobic aktualizacje kodu, podlaczyc node do klastra i wymienic kod dla drugiej maszyny.
  • Odpowiedz
Jeżeli aplikacja mała i nie chcesz całego klastra K8s, może zobacz sobie na K3s?

K3S is a highly available, certified Kubernetes distribution designed for production workloads in unattended, resource-constrained, remote locations or inside IoT appliances.

https://k3s.io/
  • Odpowiedz
@obserwator_z_prawem_interwencji: Też polecam k3s jak chcesz się pobawić. Domyślnie po instalacji ma parę dodatków które ułatwiają zabawy na pojedynczym node bez całego clouda. Masz np Local Storage Provisioner który automatycznie tworzy wolumeny dla kontenerów, servicelb który pozwala używać kubernetesowego service typu LoadBalancer bez prawdziwego load balancera od cloud providera oraz traefik Ingress controller(taki load balancer HTTP). Oczywiście żeby to jako tako działało to polecam wcześniej zapoznać się z dokumentacją k8s.
  • Odpowiedz