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
- Otwórz edytor Cloud Shell, klikając ten adres URL:
https://ide.cloud.google.com
- W oknie terminala utwórz katalog roboczy na potrzeby tego samouczka.
mkdir kustomize-lab
- 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.
- Na początek utwórz folder, w którym będą przechowywane podstawowe pliki konfiguracyjne.
mkdir -p chat-app/base
- Utwórz prosty plik Kubernetes
deployment.yamlw 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
- 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
- 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.
- 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
- 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.
- Zacznij od utworzenia folderów dla różnych środowisk.
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- 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
- 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.
- 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
- 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.
- 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
- 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.
- Tworzenie folderu shared-kustomize
mkdir shared-kustomize
- Utwórz prosty
deployment.yamlw 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
- Utwórz plik kustomization.yaml w folderze udostępnionym.
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- 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
- 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>