E-book details

Kubernetes. Tworzenie natywnych aplikacji działających w chmurze

Kubernetes. Tworzenie natywnych aplikacji działających w chmurze

Michael Hausenblas, Stefan Schimanski

Ebook

Mimo że w 2018 roku Kubernetes zyskał reputację standardowego narzędzia do zarządzania kontenerami, wciąż należy traktować tę technologię jako znajdującą się w dość wczesnej fazie rozwoju. Możliwości tej platformy z czasem rosną i stają się coraz ciekawsze. Standardowym działaniem jest uruchamianie klastrów w Kubernetesie, jednak o wiele bardziej interesujące wydaje się samodzielne rozszerzanie tej platformy o własne kontrolery i rozbudowa API Kubernetesa w celu dostosowania do swoich wymagań. W przypadku niektórych złożonych projektów programowanie potrzebnych komponentów jest jedynym racjonalnym rozwiązaniem.

To książka przeznaczona dla programistów, którzy chcą maksymalnie wykorzystać możliwości Kubernetesa, również poprzez pisanie własnych zasobów. W praktyczny sposób pokazuje, jak rozwijać natywne, działające w chmurze aplikacje dla Kubernetesa. Wyjaśnia, w jaki sposób działa biblioteka API client-go i jak należy budować zasoby niestandardowe. Znalazło się tu obszerne i szczegółowe omówienie interfejsu programowania i działania platformy Kubernetes, a także pisania stabilnego oprogramowania w języku Go. Nie zabrakło szeregu wskazówek dotyczących samego pisania kodu oraz przeprowadzania testów. Dużo uwagi poświęcono niestandardowym zasobom, kontrolerom, webhookom i niestandardowym serwerom API oraz wzorcom rozszerzania Kubernetesa.

W tej książce między innymi:

  • zasady programowania dla Kubernetesa
  • API Kubernetesa i client-go
  • korzystanie z niestandardowych zasobów
  • pisanie i udostępnianie operatorów
  • tworzenie niestandardowych serwerów API

Kubernetes: wykorzystaj w pełni jego potencjał!


Przedmowa 11

1. Wprowadzenie 15

  • Czym jest programowanie dla Kubernetesa? 15
  • Przykład wprowadzający 17
  • Wzorce rozszerzania 18
  • Kontrolery i operatory 19
    • Pętla sterowania 19
    • Zdarzenia 20
    • Wyzwalacze sterowane zmianami i sterowane poziomem 22
    • Modyfikowanie świata zewnętrznego lub obiektów w klastrze 24
    • Współbieżność optymistyczna 27
    • Operatory 29
  • Podsumowanie 30

2. Podstawy API Kubernetesa 33

  • Serwer API 33
    • Interfejs HTTP serwera API 34
    • Terminologia związana z API 35
    • Wersjonowanie API w Kubernetesie 38
    • Deklaratywne zarządzanie stanem 39
  • Używanie API w wierszu poleceń 39
  • W jaki sposób serwer API przetwarza żądania? 43
  • Podsumowanie 46

3. Podstawy klienta client-go 47

  • Repozytoria 47
    • Biblioteka klienta 47
    • Typy w API Kubernetesa 49
    • Repozytorium API Machinery 50
    • Tworzenie i używanie klientów 50
    • Wersjonowanie i kompatybilność 52
    • Wersje API i gwarancje kompatybilności 55
  • Obiekty Kubernetesa w Go 56
    • TypeMeta 57
    • ObjectMeta 60
    • Sekcje spec i status 60
  • Zbiory klientów 61
    • Podzasoby status - UpdateStatus 63
    • Wyświetlanie i usuwanie obiektów 63
    • Czujki 63
    • Rozszerzanie klientów 64
    • Opcje klientów 65
  • Informatory i buforowanie 66
    • Kolejka zadań 70
  • Repozytorium API Machinery - szczegóły 72
    • Rodzaje 72
    • Zasoby 72
    • Odwzorowania REST 73
    • Schemat 74
  • Vendoring 75
    • glide 76
    • dep 76
    • Moduły języka Go 77
  • Podsumowanie 78

4. Używanie niestandardowych zasobów 79

  • Wykrywanie informacji 81
  • Definicje typów 82
  • Zaawansowane mechanizmy niestandardowych zasobów 84
    • Sprawdzanie poprawności niestandardowych zasobów 84
    • Kategorie i krótkie nazwy 86
    • Wyświetlane kolumny 88
    • Podzasoby 89
  • Niestandardowe zasoby z perspektywy programisty 93
    • Klient dynamiczny 93
    • Klienty typizowane 95
    • Klient controller-runtime z narzędzi Operator SDK i Kubebuilder 99
  • Podsumowanie 101

5. Automatyzowanie generowania kodu 103

  • Po co stosować generatory kodu? 103
  • Wywoływanie generatorów 103
  • Kontrolowanie generatorów za pomocą znaczników 105
    • Znaczniki globalne 106
    • Znaczniki lokalne 107
    • Znaczniki dla generatora deepcopy-gen 108
    • runtime.Object i DeepCopyObject 108
    • Znaczniki dla generatora client-gen 109
    • Generatory informer-gen i lister-gen 111
  • Podsumowanie 111

6. Narzędzia służące do tworzenia operatorów 113

  • Czynności wstępne 113
  • Wzorowanie się na projekcie sample-controller 114
    • Przygotowania 114
    • Logika biznesowa 115
  • Kubebuilder 121
    • Przygotowania 122
    • Logika biznesowa 126
  • Operator SDK 130
    • Przygotowania 131
    • Logika biznesowa 132
  • Inne podejścia 135
  • Wnioski i przyszłe kierunki rozwoju 136
  • Podsumowanie 136

7. Udostępnianie kontrolerów i operatorów 137

  • Zarządzanie cyklem życia i pakowanie 137
    • Pakowanie - trudności 137
    • Helm 138
    • Kustomize 140
    • Inne techniki pakowania kodu 142
    • Najlepsze praktyki z obszaru pakowania kodu 143
    • Zarządzanie cyklem życia 143
  • Instalacje gotowe do użytku w środowisku produkcyjnym 144
    • Odpowiednie uprawnienia 144
    • Zautomatyzowany proces budowania i testowania 147
    • Niestandardowe kontrolery i obserwowalność 148
  • Podsumowanie 151

8. Niestandardowe serwery API 153

  • Scenariusze stosowania niestandardowych serwerów API 153
  • Przykład - pizzeria 155
  • Architektura - agregowanie 156
    • Usługi API 157
    • Wewnętrzna struktura niestandardowego serwera API 160
    • Delegowane uwierzytelnianie i obsługa zaufania 161
    • Delegowana autoryzacja 162
  • Pisanie niestandardowych serwerów API 164
    • Wzorzec opcji i konfiguracji oraz szablonowy kod potrzebny do uruchomienia serwera 165
    • Pierwsze uruchomienie 171
    • Typy wewnętrzne i konwersja 172
    • Pisanie typów API 175
    • Konwersje 176
    • Ustawianie wartości domyślnych 179
    • Testowanie konwersji powrotnych 181
    • Sprawdzanie poprawności 183
    • Rejestr i strategia 185
    • Instalowanie API 189
    • Kontrola dostępu 192
  • Instalowanie niestandardowych serwerów API 201
    • Manifesty instalacji 202
    • Konfigurowanie systemu RBAC 204
    • Uruchamianie niestandardowego serwera API bez zabezpieczeń 205
    • Certyfikaty i zaufanie 207
    • Współdzielenie systemu etcd 209
  • Podsumowanie 211

9. Zaawansowane zasoby niestandardowe 213

  • Wersjonowanie niestandardowych zasobów 213
    • Poprawianie kodu do obsługi pizzerii 214
    • Architektura webhooków konwersji 216
    • Implementacja webhooka konwersji 220
    • Przygotowywanie serwera HTTPS 220
    • Instalowanie webhooka konwersji 226
    • Konwersja w praktyce 227
  • Webhooki kontroli dostępu 229
    • Wymogi związane z kontrolą dostępu w przykładzie 230
    • Architektura webhooków kontroli dostępu 231
    • Rejestrowanie webhooków kontroli dostępu 233
    • Implementowanie webhooka kontroli dostępu 234
    • Webhook kontroli dostępu w praktyce 239
  • Schematy strukturalne i przyszłość definicji CRD 240
    • Schematy strukturalne 240
    • Okrajanie a zachowywanie nieznanych pól 242
    • Sterowanie okrajaniem 243
    • IntOrString i RawExtension 244
    • Wartości domyślne 244
  • Podsumowanie 246

A. Materiały 247

  • Title: Kubernetes. Tworzenie natywnych aplikacji działających w chmurze
  • Author: Michael Hausenblas, Stefan Schimanski
  • Original title: Programming Kubernetes: Developing Cloud-Native Applications
  • Translation: Tomasz Walczak
  • ISBN: 978-83-283-6406-6, 9788328364066
  • Date of issue: 2020-05-26
  • Format: Ebook
  • Item ID: kubert
  • Publisher: Helion