Skalowanie za pomocą narzędzia Kustomize

1. Cele

Kustomize to narzędzie, które wprowadza bezszablonowy sposób dostosowywania konfiguracji aplikacji, co upraszcza korzystanie z gotowych aplikacji. Jest dostępny jako samodzielne narzędzie i jest wbudowany w kubectl przez kubectl apply -k lub może być używany jako samodzielny interfejs CLI. Więcej informacji znajdziesz na stronie kustomize.io.

W tym samouczku poznasz niektóre podstawowe koncepcje Kustomize i użyjesz go do zarządzania różnicami w aplikacjach i środowiskach.

W ramach ćwiczenia:

  • Korzystanie z klienta wiersza poleceń kustomize
  • Zastępowanie typowych elementów
  • Stosowanie poprawek do większych struktur YAML
  • Korzystanie z wielu warstw nakładek

2. Przygotowywanie obszaru roboczego

  1. Otwórz edytor Cloud Shell, klikając ten adres URL:

https://ide.cloud.google.com

  1. W oknie terminala utwórz katalog roboczy na potrzeby tego samouczka.

mkdir kustomize-lab

  1. Przejdź do katalogu i skonfiguruj obszar roboczy IDE.

cd kustomize-lab && cloudshell workspace .

3. Korzystanie z klienta wiersza poleceń kustomize

Moc narzędzia kustomize polega na możliwości nakładania i modyfikowania podstawowych plików YAML Kubernetes za pomocą wartości niestandardowych. Aby to zrobić, narzędzie kustomize wymaga pliku podstawowego z instrukcjami, gdzie znajdują się pliki i co należy zastąpić. Kustomize jest częścią ekosystemu Kubernetes i można go uruchamiać na różne sposoby.

W tej sekcji utworzysz podstawową konfigurację kustomize i przetworzysz pliki za pomocą samodzielnego klienta wiersza poleceń kustomize.

  1. Na początek utwórz folder, w którym będą przechowywane podstawowe pliki konfiguracyjne.

mkdir -p chat-app/base

  1. Utwórz prosty plik Kubernetes deployment.yaml w folderze podstawowym.

cat <<EOF > chat-app/base/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`metadata:`

  `name: chat-app`

`spec:`

  `containers:`

  `- name: chat-app`

    `image: chat-app-image`

EOF

  1. Utwórz bazę kustomization.yaml

Kustomize szuka pliku o nazwie kustomization.yaml jako punktu wejścia. Ten plik zawiera odwołania do różnych plików podstawowych i zastępujących, a także konkretne wartości zastępujące.

Utwórz plik kustomization.yaml, który odwołuje się do pliku deployment.yaml jako zasobów podstawowych.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Uruchom polecenie kustomize w folderze podstawowym. W ten sposób uzyskasz pliki YAML wdrożenia bez zmian, co jest oczekiwane, ponieważ nie uwzględniono jeszcze żadnych odmian.

kustomize build chat-app/base

Ten samodzielny klient może być używany w połączeniu z klientem kubectl, aby bezpośrednio stosować dane wyjściowe, jak w tym przykładzie. Spowoduje to przesłanie strumieniowe danych wyjściowych polecenia build bezpośrednio do polecenia kubectl apply.

(Nie wykonuj – tylko do celów informacyjnych)

kustomize build chat-app/base | kubectl apply -f -

Ta technika jest przydatna, jeśli potrzebna jest konkretna wersja klienta kustomize.

Możesz też uruchomić narzędzie kustomize za pomocą narzędzi zintegrowanych z kubectl. Jak w tym przykładzie.

(Nie wykonuj – tylko do celów informacyjnych)

kubectl apply -k chat-app/base

4. Zastępowanie typowych elementów

Skoro obszar roboczy jest już skonfigurowany i sprawdziliśmy, że narzędzie kustomize działa, możemy zastąpić niektóre wartości podstawowe.

Obrazy, przestrzenie nazw i etykiety są bardzo często dostosowywane do każdej aplikacji i środowiska. Ponieważ są one często zmieniane, Kustomize umożliwia deklarowanie ich bezpośrednio w kustomize.yaml, co eliminuje konieczność tworzenia wielu poprawek w tych typowych scenariuszach.

Ta technika jest często używana do tworzenia konkretnej instancji szablonu. Jeden podstawowy zestaw zasobów może być teraz używany w wielu implementacjach przez zmianę nazwy i przestrzeni nazw.

W tym przykładzie dodasz przestrzeń nazw, prefiks nazwy i etykiety do kustomization.yaml.

  1. Zaktualizuj plik kustomization.yaml, aby zawierał typowe etykiety i przestrzenie nazw.

Skopiuj i wykonaj w terminalu te polecenia:

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

namespace: my-namespace

nameprefix: my-

commonLabels:

app: my-app

EOF

  1. Wykonywanie polecenia kompilacji

Wykonanie kompilacji w tym momencie pokazuje, że wynikowy plik YAML zawiera teraz przestrzeń nazw, etykiety i nazwy z prefiksami w definicjach usługi i wdrożenia.

kustomize build chat-app/base

Zwróć uwagę, że dane wyjściowe zawierają etykiety i przestrzenie nazw, których nie ma w pliku YAML wdrożenia. Zwróć też uwagę, że nazwa została zmieniona z chat-app na my-chat-app.

(Nie kopiuj danych wyjściowych)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

5. Stosowanie poprawek do większych struktur YAML

Kustomize umożliwia też stosowanie poprawek, które nakładają się na zasoby podstawowe. Ta technika jest często stosowana w celu zapewnienia zmienności między aplikacjami i środowiskami.

W tym kroku utworzysz warianty środowiska dla jednej aplikacji, które korzystają z tych samych zasobów podstawowych.

  1. Zacznij od utworzenia folderów dla różnych środowisk.

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. Zapisz poprawkę etapu za pomocą tego polecenia:

cat <<EOF > chat-app/dev/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: dev`

EOF

  1. Teraz napisz poprawkę produkcyjną za pomocą tego polecenia:

cat <<EOF > chat-app/prod/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: prod`

EOF

Zauważ, że powyższe poprawki nie zawierają nazwy obrazu kontenera. Ta wartość jest podana w pliku base/deployment.yaml utworzonym w poprzednim kroku. Te poprawki zawierają jednak unikalne zmienne środowiskowe dla środowisk deweloperskiego i produkcyjnego.

  1. Wdróż pliki YAML kustomize w katalogu podstawowym.

Przepisz podstawowy plik kustomization.yaml, usuń przestrzeń nazw i prefiks nazwy, ponieważ jest to tylko konfiguracja podstawowa bez żadnych zmian. Za chwilę te pola zostaną przeniesione do plików środowiska.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. Wdróż pliki YAML kustomize w katalogu dev.

Teraz wdróż warianty dla środowisk deweloperskiego i produkcyjnego, wykonując w terminalu te polecenia.

cat <<EOF > chat-app/dev/kustomization.yaml

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

Zwróć uwagę na dodanie sekcji patches: w pliku. Oznacza to, że kustomize ma nakładać te pliki na zasoby podstawowe.

  1. Wdróż pliki YAML kustomize w katalogu prod

cat <<EOF > chat-app/prod/kustomization.yaml

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. Uruchom narzędzie kustomize, aby scalić pliki

Po utworzeniu plików podstawowych i środowiskowych możesz uruchomić proces kustomize, aby zastosować poprawki do plików podstawowych.

Aby zobaczyć wynik po scaleniu, uruchom to polecenie w przypadku środowiska deweloperskiego.

kustomize build chat-app/dev

Zwróć uwagę, że dane wyjściowe zawierają scalone wyniki, takie jak etykiety z konfiguracji podstawowej i deweloperskiej, a także nazwę obrazu kontenera z folderów podstawowego i zmienną środowiskową z folderu deweloperskiego.

6. Korzystanie z wielu warstw nakładek

Wiele organizacji ma zespół, który pomaga zespołom ds. aplikacji i zarządza platformą. Często zespoły te chcą uwzględnić konkretne szczegóły, które mają być zawarte we wszystkich aplikacjach we wszystkich środowiskach, np. agenta rejestrującego.

W tym przykładzie utworzysz shared-kustomize folder i zasoby, które będą uwzględniane przez wszystkie aplikacje niezależnie od środowiska, w którym są wdrażane.

  1. Tworzenie folderu shared-kustomize

mkdir shared-kustomize

  1. Utwórz prosty deployment.yaml w folderze udostępnionym.

cat <<EOF > shared-kustomize/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: logging-agent`

    `image: logging-agent-image`

EOF

  1. Utwórz plik kustomization.yaml w folderze udostępnionym.

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Odwoływanie się do folderu shared-kustomize z aplikacji

Chcesz, aby folder shared-kustomize był podstawą wszystkich aplikacji, więc musisz zaktualizować chat-app/base/kustomization.yaml, aby używać shared-kustomize jako podstawy. Następnie nałóż na niego własny plik deployment.yaml. Foldery środowisk zostaną ponownie zastosowane.

Skopiuj i wykonaj w terminalu te polecenia:

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- ../../shared-kustomize

commonLabels:

app: chat-app

patches:

- deployment.yaml

EOF

  1. Uruchom kustomize i wyświetl scalone wyniki dla środowiska deweloperskiego.

kustomize build chat-app/dev

Zwróć uwagę, że dane wyjściowe zawierają wyniki scalone z bazy aplikacji, środowiska aplikacji i folderów shared-kustomize. W sekcji kontenerów możesz zobaczyć wartości ze wszystkich 3 lokalizacji.

(nie kopiuj danych wyjściowych)

<pre>

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

</pre>