Skalowanie za pomocą narzędzia Kustomize

1. Cele

Kustomize to narzędzie, które wprowadza możliwość dostosowania konfiguracji aplikacji bez użycia szablonów, co upraszcza korzystanie z tradycyjnych aplikacji. Jest ono dostępne jako samodzielne narzędzie i jest wbudowane w kubectl przez kubectl apply -k zł i może być używane jako samodzielny interfejs wiersza poleceń. Więcej informacji znajdziesz na stronie kustomize.io.

W tym samouczku poznasz podstawowe pojęcia narzędzia Kustomize i wykorzystasz go do zarządzania wariantami w aplikacjach i środowiskach.

W ramach ćwiczenia:

  • Użyj klienta wiersza poleceń kustomize
  • Zastąp wspólne elementy
  • Poprawianie większych struktur yaml
  • Wykorzystuj wiele warstw nakładek

2. Przygotowuję obszar roboczy

  1. Otwórz edytor Cloud Shell, odwiedzając ten 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. Używanie klienta wiersza poleceń kustomize

Moc kustomize wynika z możliwości nakładania i modyfikowania podstawowych plików yaml Kubernetes z użyciem niestandardowych wartości. Do wykonania tej kustomize potrzeba pliku podstawowego z instrukcjami, gdzie są pliki i co należy zastąpić. Narzędzie Kustomize wchodzi w skład ekosystemu Kubernetes i można je wykonywać za pomocą różnych metod.

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

  1. Na początek utworzysz folder, w którym będą przechowywane podstawowe pliki konfiguracji

mkdir -p chat-app/base

  1. Utwórz prosty element deployment.yaml Kubernetes 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 podstawowy element kustomization.yaml

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

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

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

bases:

- deployment.yaml

EOF

  1. Uruchom polecenie kustomize w folderze podstawowym. Spowoduje to wyświetlenie plików YAML wdrożenia bez żadnych zmian, co jest normalne, ponieważ nie zostały jeszcze uwzględnione żadne odmiany.

kustomize build chat-app/base

Możesz połączyć tego samodzielnego klienta z klientem kubectl, aby zastosować dane wyjściowe bezpośrednio zgodnie z poniższym przykładem. Spowoduje to przesłanie strumieniowe danych wyjściowych polecenia Build bezpośrednio do polecenia kubectl apply.

(Nie wykonywać - tylko w celach informacyjnych)

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

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

Komponent kustomize można też wykonać za pomocą narzędzi zintegrowanych w samym narzędziu kubectl. Tak jak w tym przykładzie.

(Nie wykonywać - tylko w celach informacyjnych)

kubectl apply -k chat-app/base

4. Zastępowanie wspólnych elementów

Po skonfigurowaniu obszaru roboczego i sprawdzeniu, że kustomize działa, nadszedł czas na zastąpienie niektórych wartości podstawowych.

Obrazy, przestrzenie nazw i etykiety są bardzo często dostosowywane do poszczególnych aplikacji i środowisk. Ponieważ są one często zmieniane, Kustomize umożliwia zadeklarowanie ich bezpośrednio w kustomize.yaml, co eliminuje konieczność tworzenia wielu poprawek na potrzeby tych typowych scenariuszy.

Ta metoda jest często używana do tworzenia konkretnego wystąpienia szablonu. Jeden zbiór bazowy zasobów może być teraz używany na potrzeby wielu implementacji, wystarczy zmienić nazwę i przestrzeń nazw.

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

  1. Zaktualizuj plik kustomization.yaml, aby zawierał wspólne 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. Wykonaj polecenie kompilacji

Wykonanie kompilacji na tym etapie pokazuje, że wynikowy plik YAML zawiera teraz przestrzeń nazw, etykiety i nazwy z prefiksami zarówno w definicjach usługi, jak 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ę, jak zmieniła się nazwa z chat-app na my-chat-app

(Dane wyjściowe nie są kopiowane)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

5. Poprawianie większych struktur yaml

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

W tym kroku utworzysz odmiany środowiska dla pojedynczej aplikacji korzystającej 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ę sceny 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 zapisz poprawkę prod 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

Zwróć uwagę, że powyższe poprawki nie zawierają nazwy obrazu kontenera. Ta wartość jest podana w pliku base/deployment.yaml utworzonym w poprzednim kroku. Poprawki zawierają jednak unikalne zmienne środowiskowe dla wersji dev i prod.

  1. Wdróż pliki kustomize YAML dla katalogu podstawowego

Zmodyfikuj podstawowy plik kustomization.yaml, usuwając przestrzeń nazw i prefiks nazwy, ponieważ jest to tylko podstawowa konfiguracja bez żadnych zmian. Te pola zostaną za chwilę przeniesione do plików środowiska.

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

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. Wdróż pliki kustomize YAML dla katalogu deweloperskiego

Teraz zaimplementuj odmiany dla instrukcji dev i prod, 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 w pliku sekcji patches:. Oznacza to, że kustomize powinno nakładać te pliki na podstawowe zasoby.

  1. Wdróż pliki kustomize YAML dla katalogu prod

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

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. Uruchom kustomize, aby scalić pliki

Po utworzeniu plików podstawowych i środowiska możesz wykonać proces kustomize, aby zainstalować poprawki plików podstawowych.

Aby zobaczyć wynik po scaleniu, uruchom to polecenie dla programistów.

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 elementu podstawowego i zmienną środowiskową z folderów deweloperskich.

6. Wykorzystanie wielu warstw nakładek

Wiele organizacji ma zespół, który pomaga zespołom zajmującym się aplikacjami i zarządzaniem platformą. Często te zespoły będą chciały dołączyć określone szczegóły, które należy uwzględnić we wszystkich aplikacjach we wszystkich środowiskach. Na przykład może to być agent logowania.

W tym przykładzie utworzysz folder i zasoby shared-kustomize, które będą uwzględniane przez wszystkie aplikacje niezależnie od tego, w którym środowisku zostaną wdrożone.

  1. Utwórz folder shared-kustomize

mkdir shared-kustomize

  1. Utwórz prosty plik 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. utworzyć plik kustomization.yaml w udostępnionym folderze,

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

bases:

- deployment.yaml

EOF

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

Ponieważ chcesz, aby folder shared-kustomize był bazą dla wszystkich Twoich aplikacji, musisz zaktualizować folder chat-app/base/kustomization.yaml, aby używał shared-kustomize jako podstawy. Następnie dodaj poprawkę do pliku Deployment.yaml. Foldery środowiska zostaną następnie poprawione.

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 wersji dev

kustomize build chat-app/dev

Pamiętaj, że dane wyjściowe zawierają scalone wyniki z aplikacji, środowiska aplikacji i folderów shared-kustomize. W szczególności w sekcji kontenerów zobaczysz wartości ze wszystkich trzech lokalizacji.

(dane wyjściowe nie są kopiowane)

<pre>

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

</pre>