dev{ops}: Poziomy dojrzałości REST

dev{ops}: Rancher Desktop i Helm – Szybkie Wprowadzenie

    W tej części serii dev{ops} kontynuuj wprowadzenie do narzędzi związanych z zarządzaniem aplikacjami w kontenerach, ale tym razem skupimy się bardziej na praktycznej stronie użycia Rancher Desktop oraz Helm. Jeśli potrzebujesz bardziej szczegółowych informacji na temat Kubernetes i Helm, odsyłam Cię do moich wcześniejszych artykułów, które szczegółowo omawiają te narzędzia.



Dziś opiszę,  jak zorganizowany jest projekt Helm, szczególnie struktura plików w chartach Helm. Pokaż również krok po kroku, jak wdrożyć aplikację za pomocą Helm.

Rancher Desktop – Twój lokalny Kubernetes

Rancher Desktop to narzędzie umożliwiające uruchamianie Kubernetes na lokalnym komputerze, co czyni je idealnym narzędziem dla programistów chcących testować i rozwijać aplikacje w Kubernetes bez potrzeby korzystania z zewnętrznej infrastruktury chmurowej. Wystarczy pobrać i zainstalować aplikację co pisałem w poprzednim artykule, a lokalny klaster Kubernetes zostanie skonfigurowany automatycznie.

Helm – Struktura Projektu

Helm to menedżer pakietów dla Kubernetes, który pozwala na automatyzację wdrażania aplikacji za pomocą tzw. chartów (pakietów zawierających pliki konfiguracyjne i szablony). Przyjrzyjmy się bliżej, jak wygląda struktura typowego projektu Helm i omówmy szczegółowo każdy plik, aby zrozumieć, jak działa Helm pod maską.

Przykładowa struktura projektu Helm (chartu):


my-helm-chart/ │ ├── charts/ ├── templates/ │ ├── deployment.yaml │ ├── service.yaml │ ├── ingress.yaml │ ├── _helpers.tpl │ └── NOTES.txt ├── Chart.yaml └── values.yaml

Szczegółowe omówienie plików:

1. Chart.yaml

To plik manifestu każdego chartu Helm. Zawiera informacje meta o projekcie, takie jak nazwa chartu, wersja i opis.

Przykład zawartości pliku Chart.yaml:


apiVersion: v2 name: my-helm-chart description: A Helm chart for my application version: 1.0.0 appVersion: "1.16.0"
  • apiVersion: Wersja API Helm, której używamy (obecnie v2 dla Helm 3).
  • name: Nazwa chartu.
  • description: Krótki opis, czym jest ten chart.
  • version: Wersja samego chartu.
  • appVersion: Wersja aplikacji, która będzie wdrożona przez ten chart.

2. values.yaml

Plik values.yaml to centralne miejsce, w którym definiujesz wartości konfiguracyjne używane przez chart. Jest to potężna funkcja, która pozwala na elastyczne konfigurowanie aplikacji bez konieczności modyfikacji szablonów.

Przykład zawartości values.yaml:


replicaCount: 3 image: repository: nginx tag: "1.16.0" pullPolicy: IfNotPresent service: type: ClusterIP port: 80 ingress: enabled: false
  • replicaCount: Liczba replik dla deploymentu.
  • image: Definicja obrazu Docker, który zostanie użyty.
  • service: Konfiguracja zasobu Service (np. rodzaj usługi, port).
  • ingress: Flaga włączająca lub wyłączająca zasób Ingress.

3. templates/

Folder templates zawiera wszystkie szablony YAML, które zostaną przetworzone przez Helm podczas wdrożenia. Szablony te mogą zawierać dynamiczne wartości zdefiniowane w values.yaml.

  • deployment.yaml: Szablon definiujący zasób Deployment dla Kubernetes.


    apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Values.name }} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: {{ .Values.name }} template: metadata: labels: app: {{ .Values.name }} spec: containers: - name: {{ .Values.name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

    W powyższym przykładzie wartości, takie jak liczba replik i obraz Docker, są dynamicznie pobierane z pliku values.yaml.

  • service.yaml: Szablon definiujący zasób Service dla aplikacji:


    apiVersion: v1 kind: Service metadata: name: {{ .Values.name }}-service spec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} selector: app: {{ .Values.name }}
  • _helpers.tpl: Plik zawierający pomocnicze funkcje i makra, które mogą być wielokrotnie wykorzystywane w innych szablonach. Jest to dobry sposób na unifikację logiki w różnych plikach YAML.

  • NOTES.txt: Informacyjny plik tekstowy, który jest wyświetlany po zakończeniu wdrażania. Można tu umieścić instrukcje dla użytkowników wdrażających aplikację.

4. charts/

Katalog charts/ służy do zagnieżdżania innych chartów jako zależności. Pozwala to na użycie innych chartów (np. bazy danych, systemów cache) w twoim projekcie. Dzięki temu można w łatwy sposób wdrożyć złożone aplikacje z wieloma komponentami.

Przykład zależności w Chart.yaml:


dependencies: - name: redis version: "14.0.0" repository: "https://charts.bitnami.com/bitnami"

Krok po kroku: Wdrożenie aplikacji za pomocą Helm i Rancher Desktop

Krok 1: Uruchomienie Rancher Desktop

  1. Uruchom Rancher Desktop i sprawdź, czy klaster Kubernetes działa:

    kubectl get nodes

Krok 2: Zainstaluj Helm

  1. Zainstaluj Helm, jeśli jeszcze nie jest zainstalowany:

    brew install helm

Krok 3: Stwórz własny chart

  1. Użyj komendy Helm, aby stworzyć nowy chart:


    helm create my-helm-chart
  2. Zmodyfikuj pliki Chart.yaml, values.yaml oraz szablony w folderze templates/, aby dostosować je do swojej aplikacji.

Krok 4: Wdrożenie aplikacji

  1. Wdróż chart na lokalnym klastrze Kubernetes:


    helm install my-app ./my-helm-chart
  2. Sprawdź stan wdrożenia:


    kubectl get pods

Krok 5: Aktualizacja aplikacji

  1. Wprowadź zmiany w values.yaml lub innych plikach, a następnie zaktualizuj wdrożenie:

    helm upgrade my-app ./my-helm-chart

Krok 6: Usunięcie aplikacji

  1. Aby usunąć aplikację, użyj komendy:

    helm uninstall my-app

Podsumowanie

    Helm w połączeniu z Rancher Desktop to potężne narzędzie do zarządzania wdrożeniami aplikacji w środowisku Kubernetes. Rancher Desktop oferuje wygodny sposób na uruchomienie Kubernetes na lokalnym komputerze, co jest idealnym rozwiązaniem do testowania i rozwoju aplikacji bez potrzeby korzystania z zewnętrznej infrastruktury. Helm natomiast, dzięki swojej strukturze chartów, umożliwia łatwe i szybkie wdrażanie złożonych aplikacji, a także ich aktualizację i usuwanie.

Komentarze