Ćwiczenie — wdrażanie kontenera mikrousług na platformie Kubernetes

Ukończone

Platforma Kubernetes uruchamia kontenery za Ciebie. Opisz, co chcesz, aby platforma Kubernetes robiła za pośrednictwem pliku YAML. W tym ćwiczeniu przedstawiono proces tworzenia pliku w celu wdrożenia i uruchomienia usługi zaplecza na platformie Kubernetes.

Ważny

Przed kontynuowaniem upewnij się, że masz zainstalowaną implementację platformy Kubernetes. Będziemy używać implementacji k3d uruchomionej w środowisku kodu. Rozpoczniemy laboratorium, instalując tę implementację.

Instalowanie narzędzi i implementacji platformy Kubernetes

Musimy zainstalować zarówno narzędzie kubectl, jak i k3d implementację Kubernetes:

  1. W przestrzeni kodu przejdź do karty terminalu, a następnie uruchom następujące polecenia, aby zainstalować wymagania wstępne:

    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    
  2. Następnie, aby pobrać klucz podpisywania dla repozytoriów pakietów Kubernetes, uruchom następujące polecenia:

    sudo mkdir /etc/apt/keyrings
    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    

    Jeśli zostanie wyświetlony błąd, że katalog już istnieje, uruchom polecenie curl oddzielnie.

  3. Dodaj repozytorium Kubernetes do konfiguracji apt:

    echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
    
  4. Teraz możesz zainstalować narzędzie kubectl:

    sudo apt-get update
    sudo apt-get install -y kubectl
    
  5. Na koniec zainstaluj k3d implementacji platformy Kubernetes i utwórz klaster:

    curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
    k3d cluster create devcluster --config k3d.yml
    

Tworzenie pliku wdrożenia dla usługi zaplecza

Możesz utworzyć plik do zarządzania wdrożeniem kontenera na platformie Kubernetes przy użyciu pliku YAML. Utwórzmy plik, aby wdrożyć usługę zaplecza.

  1. Utwórz nowy plik w katalogu donet-kubernetes przestrzeni kodowej o nazwie backend-deploy.yml.

  2. Skopiuj następujący tekst do pliku, a następnie zapisz go.

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
        name: productsbackend
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: productsbackend
        spec:
          containers:
          - name: productsbackend
            image: [YOUR DOCKER USER NAME]/productservice:latest
            ports:
            - containerPort: 80
            env:
            - name: ASPNETCORE_URLS
              value: http://*:80
      selector:
        matchLabels:
          app: productsbackend
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: productsbackend
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 80
        nodePort: 32001
      selector:
        app: productsbackend
    
  3. Zastąp symbol zastępczy [YOUR DOCKER USER NAME] rzeczywistą nazwą użytkownika platformy Docker.

Ten plik wykonuje kilka czynności.

Pierwsza część definiuje specyfikację wdrożenia kontenera, który ma zostać wdrożony na platformie Kubernetes. Określa jedną replikę, gdzie można znaleźć obraz kontenera, które porty mają być otwarte na kontenerze, i ustawia niektóre zmienne środowiskowe. Ta pierwsza część definiuje również etykiety i nazwy, których można użyć do odwołowania się do kontenera i specyfikacji.

Druga część definiuje następnie, że kontener działa jako usługa Kubernetes NodePort. W tym module nie musisz rozumieć wszelkich specyfik NodePorts. Należy jednak wiedzieć, że ten typ usługi uwidacznia zewnętrzny adres IP, aby można było przetestować usługę spoza klastra.

Wdrażanie i uruchamianie mikrousługi zaplecza

Następnie wdróżmy i uruchomimy mikrousługę.

  1. Na karcie terminalu uruchom następujące polecenie:

    kubectl apply -f backend-deploy.yml
    

    To polecenie informuje platformę Kubernetes o uruchomieniu utworzonego pliku. Pobiera obraz z usługi Docker Hub i tworzy kontener.

  2. Polecenie kubectl apply szybko powraca. Jednak tworzenie kontenera może chwilę potrwać. Aby wyświetlić postęp, użyj następującego kodu.

    kubectl get pods
    

    W wynikowych danych wyjściowych masz wiersz z productsbackend, a następnie ciąg losowych znaków w kolumnie NAME. Gdy wszystko będzie gotowe, pod kolumną READY znajduje się 1/1, a pod kolumną STATUS znajduje się Działa.

  3. Aby przetestować usługę, przejdź do karty PORTów, w pobliżu adresu lokalnego portu zaplecza wybierz ikonę globusa. Przeglądarka otwiera nową kartę pod tym adresem.

  4. Aby wykonać zapytanie dotyczące niektórych produktów, dołącz adres /api/product, a następnie naciśnij Enter. Powinny zostać wyświetlone informacje o produkcie w formacie JSON.

    [
        {
            "id": 1,
            "name": "Solar Powered Flashlight",
            "description": "A fantastic product for outdoor enthusiasts",
            "price": 19.99,
            "imageUrl": "product1.png"
        },
        {
            "id": 2,
            "name": "Hiking Poles",
            "description": "Ideal for camping and hiking trips",
            "price": 24.99,
            "imageUrl": "product2.png"
        },
        {
            "id": 3,
            "name": "Outdoor Rain Jacket",
            "description": "This product will keep you warm and dry in all weathers",
            "price": 49.99,
            "imageUrl": "product3.png"
        },
        ...
    

Tworzenie pliku wdrożenia i uruchamianie usługi frontonu

Podobnie jak usługa zaplecza, potrzebujemy również pliku wdrożenia dla frontend.

  1. Utwórz nowy plik w folderze donet-kubernetes o nazwie frontend-deploy.yml

  2. Wklej następujący kod do pliku:

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: storefrontend
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: storefrontend
        spec:
          containers:
          - name: storefrontend
            image: [YOUR DOCKER USER NAME]/storeimage:latest
            ports:
            - containerPort: 80
            env:
            - name: ASPNETCORE_URLS
              value: http://*:80
            - name: ProductEndpoint
              value: http://productsbackend
      selector:
        matchLabels:
          app: storefrontend
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: storefrontend
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 80
        nodePort: 32000
      selector:
        app: storefrontend
    
  3. Zastąp symbol zastępczy [YOUR DOCKER USERNAME] rzeczywistą nazwą użytkownika platformy Docker.

    Zwróć uwagę, że ten plik jest podobny do tego, który utworzyliśmy dla mikrousługi zaplecza. Istnieją dwie różnice:

    • Określamy inny kontener, który ma działać w ramach wdrożenia o wartości spec.template.spec.containers.image.
    • W sekcji spec.template.spec.containers.env znajduje się nowa zmienna środowiskowa. Kod w aplikacji storefrontend wywołuje część serwerową, ale ponieważ nie określiliśmy w pełni kwalifikowanej nazwy domeny (FQDN), nie znamy adresu IP mikrousługi części serwerowej. Używamy nazwy, którą określiliśmy pod węzłem metadata.nameDeployment. Platforma Kubernetes zajmuje się resztą.
  4. Wdróż kontener na platformie Kubernetes za pomocą następującego polecenia:

    kubectl apply -f frontend-deploy.yml
    

    Ponownie możesz użyć kubectl get pods, aby wyświetlić stan wdrożenia. Gdy wiersz storefrontend wyświetla Działa w kolumnie STATUS, wszystko jest gotowe.

  5. Aby przetestować usługę front-end, przejdź do karty PORTY , a następnie po prawej stronie przy adresie lokalnym dla portu front-end wybierz ikonę globusa. W przeglądarce zostanie wyświetlona strona główna.

  6. Wybierz pozycję Products. Katalog zawiera towary firmy Contoso.

    Zrzut ekranu przedstawiający stronę produktów eSHopLite.

W tym ćwiczeniu utworzono plik wdrożenia, który dokładnie opisał, jak kontenery mają być uruchamiane w ramach platformy Kubernetes. Następnie platforma Kubernetes pobiera obraz z usługi Docker Hub i uruchamia kontenery.