SlideShare a Scribd company logo
1 of 26
Download to read offline
Kubernetes
(Canary)
Deployments
# whoami
Senior DevOps Engineer
damian.tykalowski@tsh.io
#d47zm3 (GitHub)
Deployment?
Czy chodzi o…
- apps/v1/Deployment
- ten przycisk w Jenkinsie
- to samo co Release
- impreza w piątek po 16
- proces wdrażania nowej wersji aplikacji wraz z jej zależnościami
CI/CD, a po co komu to potrzebne?
“Dostajemy .war’a mailem, logujemy się na FTP, wrzucamy go tam, restart
Tomcata i gotowe” - wdrożenie w dużej firmie kurierskiej, rok 2014
CI/CD - 5 lat później
Utopia?
● build ➤ test ➤ release ➤ monitor
● build
○ zewnętrzne zależności?
○ zmiany w DB Schema?
● test
○ testy integracyjne, jednostkowe, smoke-testy, E2E?
○ security???
● release
○ rollback?
● monitor
○ SLA, SLO? Error Budget? p95, p99? Latency? APM?
Rodzaje Deploymentów
● re-create
● rolling update
● blue/green
● canary
● shadow
apps/v1/Deployment
Limity
● “famous” https://github.com/kubernetes/kubernetes/issues/67577
○ CFS quotas can lead to unnecessary throttling
#67577
○ naprawiony w wersji 4.18 (Kernel) (luty 2019)
○ wciąż wskazywany przy wielu zgłoszeniach
○ brak limitów jako “workaround”? risky...
● wycieki pamięci, obciążenie wszystkich rdzeni, brak kredytów EC2…
(Health)checki?
Healthchecks
● https://github.com/kubernetes/kubernetes/issues/66230
● Prevent mass livenessProbe failures from taking down all pods in a
Deployment #66230 (OPEN - 2018)
Healthchecks
● livenessProbe != readinessProbe
○ czy serwis jest gotowy i nawiązał połączenie z zależnościami? (readiness)
○ czy serwis nadal działa i może odpowiadać (tylko sam z siebie?) (liveness)
● zbyt agresywne/skomplikowane healthchecki
● uzależnione od zewnętrznych serwisów
● “pętla zależności”
○ API ➤ AuthService ➤ Database ➤ Storage Provider?
Service Mesh (Istio)
● jak wygląda droga żądania przez nasz klaster? (tracing)
● co “zamula”?
● szyfrowanie ruchu pomiędzy serwisami (mTLS)
● limity połączeń między serwisami
● re-try/timeout
● blue/green, canary deployments
Service Mesh
Service Mesh
“Cascading Failure”
Circuit Breaker Na Ratunek!
Circuit Breaker Na Ratunek!
Circuit Breaker Na Ratunek!
● max 1 połączenie TCP
● max 1 wiszące żądanie
● max 1 żądanie/połączenie
● odrzucaj nadmiarowe żądania
● wyrzuć endpoint z puli po 1 błędzie
● sprawdzaj czy endpoint jest gotowy na ponowne
sprawdzenie co 1 sekundę (czy
baseEjectionTime już minął)
● czekaj 3m zanim ponownie sprawdzisz czy
endpoint odpowiada
● wyrzuć do 100% błędnych endpointów z puli
Epic Fails
● https://k8s.af/
● 10 More Weird Ways to Blow Up Your Kubernetes - Airbnb - KubeCon NA 2020
○ involved: MutatingAdmissionWebhook, CPU Limits, OOMKill, kube2iam, HPA
○ impact: outages
● Why we switched from fluent-bit to Fluentd in 2 hours - PrometheusKube - blog post 2020
○ involved: fluent-bit, missing logs, Fluentd
○ impact: lost application logs in production
● Make your services faster by removing CPU limits - Buffer - blog post 2020
○ involved: kops, CPU Limit, CPU throttling
○ impact: high latency
● The case of the missing packet: An EKS migration tale - MindTickle - blog post 2020
○ involved: EKS, AWS CNI Plugin,
○ impact: frequent connection failures when talking to services outside the cluster
● Kubernetes Networking Problems Due to the Conntrack - loveholidays - blog post 2020
○ involved: GKE, conntrack, HAProxy
○ impact: high error rate on network-heavy services
● DNS issues in Kubernetes. Public postmortem #1 - Preply - blog post 2020
○ involved: conntrack, DNS, CoreDNS-autoscaler
○ impact: partial production outage
● How we failed to integrate Istio into our platform - Exponea - blog post 2019
○ involved: Istio, GKE, proxy injection
○ impact: stopped Istio rollout, developers' time spent
Canary Deployments
● RollingUpdate “na wypasie”
● powolne przekierowanie ruchu na nową wersję aplikacji, nieustannie
monitorując zachowanie nowej wersji pod kątem błędów, opóźnień, <insert
custom metric here> (Canary Analysis)
● definicja jak szybko, w jakich krokach ma postępować wdrożenie
● automatyczny rollback
● Argo Rollouts, Flagger (Flux v2), Istio, Kayenta (Spinnaker), NGINX Ingress...
Canary Deployments
Canary Deployments
DEMO!
A jak już wszystko zautomatyzujemy...
Dzięki za uwagę!

More Related Content

What's hot

Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z Capistrano
Michał Szajbe
 

What's hot (20)

Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?PHP-PM. Hit czy kit?
PHP-PM. Hit czy kit?
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
DevOps - what I have learnt so far
DevOps - what I have learnt so far DevOps - what I have learnt so far
DevOps - what I have learnt so far
 
Rundeck & Ansible
Rundeck & AnsibleRundeck & Ansible
Rundeck & Ansible
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/Redux
 
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
 
Infrastructure As Code
Infrastructure As CodeInfrastructure As Code
Infrastructure As Code
 
Lokalny development z kubernetes
Lokalny development z kubernetesLokalny development z kubernetes
Lokalny development z kubernetes
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z Capistrano
 
DynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychDynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornych
 
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
 
2019.10.08 share con365 2019 open source in azure devops, on the example open...
2019.10.08 share con365 2019 open source in azure devops, on the example open...2019.10.08 share con365 2019 open source in azure devops, on the example open...
2019.10.08 share con365 2019 open source in azure devops, on the example open...
 
Projektowanie i implementacja usług sieciowych
Projektowanie i implementacja usług sieciowychProjektowanie i implementacja usług sieciowych
Projektowanie i implementacja usług sieciowych
 
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)
 
Ansible w praktyce
Ansible w praktyceAnsible w praktyce
Ansible w praktyce
 
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...
 
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
Prezentacja "Praca z Gitem" - Dawid Cieszyński OLMUG 22.01.14
 
Make deploy great again!
Make deploy great again!Make deploy great again!
Make deploy great again!
 

Similar to Kubernetes (Canary) Deployments

Rails tobak2005
Rails tobak2005Rails tobak2005
Rails tobak2005
Tomasz Bak
 
Architektura serwisu gg.pl 2 przemek łącki (2)
Architektura serwisu gg.pl 2   przemek łącki (2)Architektura serwisu gg.pl 2   przemek łącki (2)
Architektura serwisu gg.pl 2 przemek łącki (2)
Cendoo
 
4Developers 2015: Rozpraszanie offline aplikacji zcentralizowanej online - Łu...
4Developers 2015: Rozpraszanie offline aplikacji zcentralizowanej online - Łu...4Developers 2015: Rozpraszanie offline aplikacji zcentralizowanej online - Łu...
4Developers 2015: Rozpraszanie offline aplikacji zcentralizowanej online - Łu...
PROIDEA
 

Similar to Kubernetes (Canary) Deployments (20)

Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
 
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
Aplikacje natywne dla Kubernetes z wykorzystaniem OpenShift Serverless - Wars...
 
university day 1
university day 1university day 1
university day 1
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
 
Warsjawa hackaton
Warsjawa hackatonWarsjawa hackaton
Warsjawa hackaton
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
 
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowejMateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej
Mateusz Gajewski - Architektura Allegro - 4 lata po rewolucji mikrousługowej
 
Rails tobak2005
Rails tobak2005Rails tobak2005
Rails tobak2005
 
Jak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com ITJak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com IT
 
Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]
 
CruiseControl.rb
CruiseControl.rbCruiseControl.rb
CruiseControl.rb
 
Od Zera do Farmera
Od Zera do FarmeraOd Zera do Farmera
Od Zera do Farmera
 
Wydajny frontend 2023
Wydajny frontend 2023Wydajny frontend 2023
Wydajny frontend 2023
 
Continuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowychContinuous Integration w konfiguracji urządzeń sieciowych
Continuous Integration w konfiguracji urządzeń sieciowych
 
PLNOG15: Yang - latin of XXI centaury - Sławomir Janukowicz
PLNOG15: Yang - latin of XXI centaury - Sławomir JanukowiczPLNOG15: Yang - latin of XXI centaury - Sławomir Janukowicz
PLNOG15: Yang - latin of XXI centaury - Sławomir Janukowicz
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu Docker
 
Architektura serwisu gg.pl 2 przemek łącki (2)
Architektura serwisu gg.pl 2   przemek łącki (2)Architektura serwisu gg.pl 2   przemek łącki (2)
Architektura serwisu gg.pl 2 przemek łącki (2)
 
4Developers 2015: Rozpraszanie offline aplikacji zcentralizowanej online - Łu...
4Developers 2015: Rozpraszanie offline aplikacji zcentralizowanej online - Łu...4Developers 2015: Rozpraszanie offline aplikacji zcentralizowanej online - Łu...
4Developers 2015: Rozpraszanie offline aplikacji zcentralizowanej online - Łu...
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 

More from The Software House

More from The Software House (20)

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
 
Jak poskromić AWS?
Jak poskromić AWS?Jak poskromić AWS?
Jak poskromić AWS?
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
 

Kubernetes (Canary) Deployments

  • 2. # whoami Senior DevOps Engineer damian.tykalowski@tsh.io #d47zm3 (GitHub)
  • 3. Deployment? Czy chodzi o… - apps/v1/Deployment - ten przycisk w Jenkinsie - to samo co Release - impreza w piątek po 16 - proces wdrażania nowej wersji aplikacji wraz z jej zależnościami
  • 4. CI/CD, a po co komu to potrzebne? “Dostajemy .war’a mailem, logujemy się na FTP, wrzucamy go tam, restart Tomcata i gotowe” - wdrożenie w dużej firmie kurierskiej, rok 2014
  • 5. CI/CD - 5 lat później
  • 6. Utopia? ● build ➤ test ➤ release ➤ monitor ● build ○ zewnętrzne zależności? ○ zmiany w DB Schema? ● test ○ testy integracyjne, jednostkowe, smoke-testy, E2E? ○ security??? ● release ○ rollback? ● monitor ○ SLA, SLO? Error Budget? p95, p99? Latency? APM?
  • 7.
  • 8. Rodzaje Deploymentów ● re-create ● rolling update ● blue/green ● canary ● shadow
  • 10.
  • 11. Limity ● “famous” https://github.com/kubernetes/kubernetes/issues/67577 ○ CFS quotas can lead to unnecessary throttling #67577 ○ naprawiony w wersji 4.18 (Kernel) (luty 2019) ○ wciąż wskazywany przy wielu zgłoszeniach ○ brak limitów jako “workaround”? risky... ● wycieki pamięci, obciążenie wszystkich rdzeni, brak kredytów EC2…
  • 13. Healthchecks ● https://github.com/kubernetes/kubernetes/issues/66230 ● Prevent mass livenessProbe failures from taking down all pods in a Deployment #66230 (OPEN - 2018)
  • 14. Healthchecks ● livenessProbe != readinessProbe ○ czy serwis jest gotowy i nawiązał połączenie z zależnościami? (readiness) ○ czy serwis nadal działa i może odpowiadać (tylko sam z siebie?) (liveness) ● zbyt agresywne/skomplikowane healthchecki ● uzależnione od zewnętrznych serwisów ● “pętla zależności” ○ API ➤ AuthService ➤ Database ➤ Storage Provider?
  • 15. Service Mesh (Istio) ● jak wygląda droga żądania przez nasz klaster? (tracing) ● co “zamula”? ● szyfrowanie ruchu pomiędzy serwisami (mTLS) ● limity połączeń między serwisami ● re-try/timeout ● blue/green, canary deployments
  • 18. Circuit Breaker Na Ratunek!
  • 19. Circuit Breaker Na Ratunek!
  • 20. Circuit Breaker Na Ratunek! ● max 1 połączenie TCP ● max 1 wiszące żądanie ● max 1 żądanie/połączenie ● odrzucaj nadmiarowe żądania ● wyrzuć endpoint z puli po 1 błędzie ● sprawdzaj czy endpoint jest gotowy na ponowne sprawdzenie co 1 sekundę (czy baseEjectionTime już minął) ● czekaj 3m zanim ponownie sprawdzisz czy endpoint odpowiada ● wyrzuć do 100% błędnych endpointów z puli
  • 21. Epic Fails ● https://k8s.af/ ● 10 More Weird Ways to Blow Up Your Kubernetes - Airbnb - KubeCon NA 2020 ○ involved: MutatingAdmissionWebhook, CPU Limits, OOMKill, kube2iam, HPA ○ impact: outages ● Why we switched from fluent-bit to Fluentd in 2 hours - PrometheusKube - blog post 2020 ○ involved: fluent-bit, missing logs, Fluentd ○ impact: lost application logs in production ● Make your services faster by removing CPU limits - Buffer - blog post 2020 ○ involved: kops, CPU Limit, CPU throttling ○ impact: high latency ● The case of the missing packet: An EKS migration tale - MindTickle - blog post 2020 ○ involved: EKS, AWS CNI Plugin, ○ impact: frequent connection failures when talking to services outside the cluster ● Kubernetes Networking Problems Due to the Conntrack - loveholidays - blog post 2020 ○ involved: GKE, conntrack, HAProxy ○ impact: high error rate on network-heavy services ● DNS issues in Kubernetes. Public postmortem #1 - Preply - blog post 2020 ○ involved: conntrack, DNS, CoreDNS-autoscaler ○ impact: partial production outage ● How we failed to integrate Istio into our platform - Exponea - blog post 2019 ○ involved: Istio, GKE, proxy injection ○ impact: stopped Istio rollout, developers' time spent
  • 22. Canary Deployments ● RollingUpdate “na wypasie” ● powolne przekierowanie ruchu na nową wersję aplikacji, nieustannie monitorując zachowanie nowej wersji pod kątem błędów, opóźnień, <insert custom metric here> (Canary Analysis) ● definicja jak szybko, w jakich krokach ma postępować wdrożenie ● automatyczny rollback ● Argo Rollouts, Flagger (Flux v2), Istio, Kayenta (Spinnaker), NGINX Ingress...
  • 25. A jak już wszystko zautomatyzujemy...