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

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ńPaweł Kondraciuk
 
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 2019Michał Kurzeja
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
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 Wojciech Barczyński
 
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/ReduxDawid Rusnak
 
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...Kainos Polska
 
Lokalny development z kubernetes
Lokalny development z kubernetesLokalny development z kubernetes
Lokalny development z kubernetesPiotr Mińkowski
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z CapistranoMichał Szajbe
 
DynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychDynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychThe Software House
 
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...GOG.com dev team
 
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...Janusz Nowak
 
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)GOG.com dev team
 
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...GOG.com dev team
 
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.14Sagittario
 

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

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.Wojciech Barczyński
 
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...Chris Suszyński
 
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...PROIDEA
 
[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 allegroallegro.tech
 
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ługowejPROIDEA
 
Rails tobak2005
Rails tobak2005Rails tobak2005
Rails tobak2005Tomasz Bak
 
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 ITGOG.com dev team
 
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]Droptica
 
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ń sieciowychDreamLab
 
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 JanukowiczPROIDEA
 
[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...Future Processing
 
Sekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerSekrety magicznego ogrodu Docker
Sekrety magicznego ogrodu DockerKamil Grabowski
 
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
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 

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

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ż...The Software House
 
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?The Software House
 
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ą?The Software House
 
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 ChimeThe Software House
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?The Software House
 
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 AWSThe Software House
 
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 JavaScriptThe Software House
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptThe Software House
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLThe Software House
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychThe Software House
 
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ęciThe Software House
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case studyThe Software House
 
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 KrzemowejThe Software House
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachThe Software House
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsThe Software House
 
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 chmurzeThe Software House
 
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 koduThe 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...