Najlepsze praktyki w
Kubernetes
Jak budować udane aplikacje
Systemy
informatyczne oparte na chmurze stały się atrakcyjną alternatywą dla
standardowej infrastruktury. Wymusiły jednak radykalne zmiany w
praktykach tworzenia, wdrażania i utrzymywania aplikacji. Dziś uwaga
profesjonalistów skupiona jest na Kubernetes,
który w ciągu zaledwie kilku lat stał się faktycznym
standardem wdrażania natywnej chmury. Aby tworzone aplikacje
funkcjonowały wydajnie, bezawaryjnie i niezawodnie, warto wdrożyć i
stosować wzorce i najlepsze praktyki. Konieczne jest również
przemodelowanie sposobu pracy programistów.
Ta książka jest
przeznaczona dla profesjonalnych użytkowników Kubernetes,
którzy chcą poznać wzorce i najlepsze praktyki przy
wdrażaniu rzeczywistych rozwiązań.
Znalazły się tu informacje o jego działaniu w różnych
skalach, topologiach i domenach, a także liczne przykłady zastosowania
omawianych technologii. Sporo miejsca poświęcono zagadnieniom
projektowania aplikacji, konfiguracji
i działania usług Kubernetes, a także ciągłej integracji i testowania
aplikacji. Ważnym zagadnieniem są takie aspekty zarządzania klastrem
jak przydzielanie zasobów, zapewnienie bezpieczeństwa czy
autoryzacja i dostęp do klastra. Prezentowane treści zilustrowano
fragmentami przejrzystego kodu, co dodatkowo zwiększa przydatność tej
książki w pracy inżyniera.
Najciekawsze zagadnienia:
- konfiguracja i
projektowanie aplikacji w Kubernetes
- wzorce monitorowania i
zarządzanie uaktualnieniami aplikacji
- wdrażanie i wycofywanie
aplikacji Kubernetes
- polityka sieciowa i
współpraca Kubernetes z architekturą Service Mesh
- platformy wysokiego
poziomu na bazie Kubernetes
- Kubernetes i uczenie
maszynowe
Wprowadzenie
11
1.
Konfiguracja
podstawowej usługi 15
Ogólne omówienie aplikacji 15
Zarządzanie plikami konfiguracyjnymi 15
Tworzenie usługi replikowanej za pomocą wdrożeń 17
Najlepsze praktyki dotyczące zarządzania obrazami kontenera 17
Tworzenie replikowanej aplikacji 18
Konfiguracja zewnętrznego przychodzącego ruchu sieciowego HTTP 20
Konfigurowanie aplikacji za pomocą zasobu ConfigMap 21
Zarządzanie uwierzytelnianiem za pomocą danych poufnych 22
Wdrożenie prostej bezstanowej bazy danych 25
Utworzenie za pomocą usług mechanizmu równoważenia
obciążenia TCP 28
Przekazanie przychodzącego ruchu sieciowego do serwera pliku
statycznego 29
Parametryzowanie aplikacji za pomocą menedżera pakietów Helm
31
Najlepsze praktyki dotyczące wdrożenia 32
Podsumowanie 33
2.
Sposób
pracy programisty 35
Cele 35
Tworzenie klastra programistycznego 36
Konfiguracja klastra współdzielonego przez wielu
programistów 37
Przygotowywanie zasobów dla użytkownika 38
Tworzenie i zabezpieczanie przestrzeni nazw 40
Zarządzanie przestrzeniami nazw 42
Usługi na poziomie klastra 43
Umożliwienie pracy programistom 43
Konfiguracja początkowa 43
Umożliwienie aktywnego programowania 44
Umożliwienie testowania i debugowania 45
Najlepsze praktyki dotyczące konfiguracji środowiska programistycznego
46
Podsumowanie 46
3.
Monitorowanie
i rejestrowanie danych w Kubernetes 47
Wskaźniki kontra dzienniki zdarzeń 47
Techniki monitorowania 47
Wzorce monitorowania 48
Ogólne omówienie wskaźników Kubernetes
49
cAdvisor 49
Wskaźniki serwera 50
kube-state-metrics 50
Które wskaźniki powinny być monitorowane? 51
Narzędzia do monitorowania 52
Monitorowanie Kubernetes za pomocą narzędzia Prometheus 54
Ogólne omówienie rejestrowania danych 58
Narzędzia przeznaczone do rejestrowania danych 60
Rejestrowanie danych za pomocą stosu EFK 60
Ostrzeganie 62
Najlepsze praktyki dotyczące monitorowania, rejestrowania danych i
ostrzegania 64
Monitorowanie 64
Rejestrowanie danych 64
Ostrzeganie 64
Podsumowanie 65
4.
Konfiguracja, dane poufne i RBAC
67
Konfiguracja za pomocą zasobu ConfigMap i danych poufnych 67
ConfigMap 67
Dane poufne 68
Najlepsze praktyki dotyczące API zasobu ConfigMap i danych poufnych 69
RBAC 74
Krótkie wprowadzenie do mechanizmu RBAC 75
Najlepsze praktyki dotyczące mechanizmu RBAC 77
Podsumowanie 79
5
.
Ciągła integracja, testowanie i ciągłe wdrażanie
81
System kontroli wersji 82
Ciągła integracja 82
Testowanie 82
Kompilacja kontenera 83
Oznaczanie tagiem obrazu kontenera 84
Ciągłe wdrażanie 85
Strategie wdrażania 85
Testowanie w produkcji 89
Stosowanie inżynierii chaosu i przygotowania 91
Konfiguracja ciągłej integracji 91
Konfiguracja ciągłego wdrażania 93
Przeprowadzanie operacji uaktualnienia 94
Prosty eksperyment z inżynierią chaosu 94
Najlepsze praktyki dotyczące technik ciągłej integracji i ciągłego
wdrażania 95
Podsumowanie 96
6.
Wersjonowanie, wydawanie i wdrażanie aplikacji 97
Wersjonowanie aplikacji 98
Wydania aplikacji 98
Wdrożenia aplikacji 99
Połączenie wszystkiego w całość 100
Najlepsze praktyki dotyczące wersjonowania, wydawania i wycofywania
wdrożeń 103
Podsumowanie 104
7.
Rozpowszechnianie
aplikacji na świecie i jej wersje robocze 105
Rozpowszechnianie obrazu aplikacji 106
Parametryzacja wdrożenia 107
Mechanizm równoważenia obciążenia związanego z ruchem
sieciowym w globalnie wdrożonej aplikacji 107
Niezawodne wydawanie oprogramowania udostępnianego globalnie 108
Weryfikacja przed wydaniem oprogramowania 108
Region kanarkowy 111
Identyfikacja typów regionów 111
Przygotowywanie wdrożenia globalnego 112
Gdy coś pójdzie nie tak 113
Najlepsze praktyki dotyczące globalnego wdrożenia aplikacji 114
Podsumowanie 115
8.
Zarządzanie
zasobami 117
Zarządca procesów w Kubernetes 117
Predykaty 117
Priorytety 118
Zaawansowane techniki stosowane przez zarządcę procesów 119
Podobieństwo i brak podobieństwa podów 119
nodeSelector 120
Wartość taint i tolerancje 120
Zarządzanie zasobami poda 122
Żądanie zasobu 122
Ograniczenia zasobów i jakość usługi poda 123
PodDisruptionBudget 125
Zarządzanie zasobami za pomocą przestrzeni nazw 126
ResourceQuota 127
LimitRange 128
Skalowanie klastra 129
Skalowanie aplikacji 130
Skalowanie za pomocą HPA 131
HPA ze wskaźnikami niestandardowymi 132
Vertical Pod Autoscaler 133
Najlepsze praktyki dotyczące zarządzania zasobami 133
Podsumowanie 134
9.
Sieć, bezpieczeństwo sieci i architektura Service Mesh
135
Reguły działania sieci w Kubernetes 135
Wtyczki sieci 137
Kubenet 137
Najlepsze praktyki dotyczące pracy z Kubenet 138
Wtyczka zgodna ze specyfikacją CNI 139
Najlepsze praktyki dotyczące pracy z wtyczkami zgodnymi ze specyfikacją
CNI 139
Usługi w Kubernetes 140
Typ usługi ClusterIP 140
Typ usługi NodePort 142
Typ usługi ExternalName 143
Typ usługi LoadBalancer 143
Ingress i kontrolery Ingress 144
Najlepsze praktyki dotyczące usług i kontrolerów Ingress 146
Polityka zapewnienia bezpieczeństwa sieci 146
Najlepsze praktyki dotyczące polityki sieci 148
Architektura Service Mesh 150
Najlepsze praktyki dotyczące architektury Service Mesh 151
Podsumowanie 152
10.
Bezpieczeństwo
poda i kontenera 153
API PodSecurityPolicy 153
Włączenie zasobu PodSecurityPolicy 153
Anatomia zasobu PodSecurityPolicy 155
Wyzwania związane z zasobem PodSecurityPolicy 162
Najlepsze praktyki dotyczące zasobu PodSecurityPolicy 163
Następne kroki związane z zasobem PodSecurityPolicy 163
Izolacja zadania i API RuntimeClass 164
Używanie API RuntimeClass 164
Implementacje środowiska uruchomieniowego 165
Najlepsze praktyki dotyczące izolacji zadań i API RuntimeClass 166
Pozostałe rozważania dotyczące zapewnienia bezpieczeństwa poda i
kontenera 166
Kontrolery dopuszczenia 166
Narzędzia do wykrywania włamań i anomalii 167
Podsumowanie 167
11.
Polityka i zarządzanie klastrem 169
Dlaczego polityka i zarządzanie są ważne? 169
Co odróżnia tę politykę od innych? 169
Silnik polityki natywnej chmury 170
Wprowadzenie do narzędzia Gatekeeper 170
Przykładowe polityki 171
Terminologia stosowana podczas pracy z Gatekeeper 171
Definiowanie szablonu ograniczenia 172
Definiowanie ograniczenia 173
Replikacja danych 174
UX 174
Audyt 175
Poznanie narzędzia Gatekeeper 176
Następne kroki podczas pracy z narzędziem Gatekeeper 176
Najlepsze praktyki dotyczące polityki i zarządzania 176
Podsumowanie 177
12.
Zarządzanie wieloma klastrami 179
Do czego potrzebujesz wielu klastrów? 179
Kwestie do rozważenia podczas projektowania architektury składającej
się z wielu klastrów 181
Zarządzanie wieloma wdrożeniami klastrów 183
Wzorce wdrażania i zarządzania 183
Podejście GitOps w zakresie zarządzania klastrami 185
Narzędzia przeznaczone do zarządzania wieloma klastrami 187
Federacja Kubernetes 187
Najlepsze praktyki dotyczące zarządzania wieloma klastrami 190
Podsumowanie 191
13.
Integracja
usług zewnętrznych z Kubernetes
193
Importowanie usług do Kubernetes 193
Pozbawiona selektora usługa dla stabilnego adresu IP 194
Oparte na rekordzie CNAME usługi dla stabilnych nazw DNS 194
Podejście oparte na aktywnym kontrolerze 196
Eksportowanie usług z Kubernetes 197
Eksportowanie usług za pomocą wewnętrznych mechanizmów
równoważenia obciążenia 197
Eksportowanie usług za pomocą usługi opartej na NodePort 198
Integracja komputerów zewnętrznych z Kubernetes 199
Współdzielenie usług między Kubernetes 200
Narzędzia opracowane przez podmioty zewnętrzne 200
Najlepsze praktyki dotyczące nawiązywania połączeń między klastrami a
usługami zewnętrznymi 201
Podsumowanie 201
14.
Uczenie maszynowe w Kubernetes 203
Dlaczego Kubernetes doskonale sprawdza się w połączeniu z uczeniem
maszynowym? 203
Sposób pracy z zadaniami uczenia głębokiego 204
Uczenie maszynowe dla administratorów klastra Kubernetes 205
Trenowanie modelu w Kubernetes 205
Trenowanie rozproszone w Kubernetes 208
Ograniczenia dotyczące zasobów 208
Sprzęt specjalizowany 208
Biblioteki, sterowniki i moduły jądra 209
Pamięć masowa 210
Sieć 211
Protokoły specjalizowane 211
Obawy użytkowników zajmujących się analizą danych 212
Najlepsze praktyki dotyczące wykonywania w Kubernetes zadań związanych
z uczeniem maszynowym 212
Podsumowanie 213
15.
Tworzenie
wzorców aplikacji wysokiego poziomu na podstawie Kubernetes
215
Podejścia w zakresie tworzenia abstrakcji wysokiego poziomu 215
Rozszerzanie Kubernetes 216
Rozszerzanie klastrów Kubernetes 216
Wrażenia użytkownika podczas rozszerzania Kubernetes 218
Rozważania projektowe podczas budowania platformy 218
Obsługa eksportowania do obrazu kontenera 218
Obsługa istniejących mechanizmów dla usług i wykrywania
usług 219
Najlepsze praktyki dotyczące tworzenia platform dla aplikacji 220
Podsumowanie 220
16.
Zarządzanie
informacjami o stanie i aplikacjami wykorzystującymi te dane
221
Woluminy i punkty montowania 222
Najlepsze praktyki dotyczące woluminów 223
Pamięć masowa w Kubernetes 223
API PersistentVolume 223
API PersistentVolumeClaims 224
Klasy pamięci masowej 225
Najlepsze praktyki dotyczące pamięci masowej w Kubernetes 226
Aplikacje obsługujące informacje o stanie 227
Zasób StatefulSet 228
Operatory 229
Najlepsze praktyki dotyczące zasobu StatefulSet i operatorów
230
Podsumowanie 231
17.
Sterowanie
dopuszczeniem i autoryzacja
233
Sterowanie dopuszczeniem 233
Czym jest kontroler dopuszczenia? 234
Typy kontrolerów dopuszczenia 234
Konfiguracja zaczepu sieciowego dopuszczenia 235
Najlepsze praktyki dotyczące sterowania dopuszczeniem 237
Autoryzacja 239
Moduły autoryzacji 239
Najlepsze praktyki dotyczące autoryzacji 242
Podsumowanie 242
18.
Zakończenie 243
248
stron, Format: 17.0x24.0cm, oprawa miękka