Cvičení – nasazení kontejneru mikroslužeb do Kubernetes

Dokončeno

Kubernetes spouští kontejnery za vás. Popíšete, co má Kubernetes dělat prostřednictvím souboru YAML. Toto cvičení vás provede vytvořením souboru, abyste mohli nasadit a spustit back-endovou službu v Kubernetes.

Důležité

Než budete pokračovat, musíte mít jistotu, že máte nainstalovanou implementaci Kubernetes. Budeme používat implementaci k3d spuštěnou v codespace. Testovací prostředí zahájíme instalací této implementace.

Instalace nástrojů a implementace Kubernetes

Potřebujeme nainstalovat nástroj kubectl i implementaci k3d Kubernetes:

  1. V codespace přejděte na kartu TERMINÁL a spusťte tyto příkazy pro instalaci požadovaných součástí:

    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    
  2. Pokud chcete stáhnout podpisový klíč pro úložiště balíčků Kubernetes, spusťte tyto příkazy:

    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
    

    Pokud se zobrazí chyba, že adresář již existuje, spusťte curl příkaz samostatně.

  3. Přidejte úložiště Kubernetes do konfigurace 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. Teď můžete nainstalovat nástroj kubectl :

    sudo apt-get update
    sudo apt-get install -y kubectl
    
  5. Nakonec nainstalujte implementaci Kubernetes k3d a vytvořte cluster:

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

Vytvoření souboru nasazení pro back-endovou službu

Pomocí souboru YAML můžete vytvořit nasazení kontejneru do Kubernetes. Pojďme vytvořit soubor pro nasazení back-endové služby.

  1. Ve složce donet-kubernetes ve složce codespace s názvem backend-deploy.yml vytvořte nový soubor.

  2. Zkopírujte do souboru následující text a uložte ho.

    ---
    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. Zástupný symbol [YOUR DOCKER USER NAME] nahraďte skutečným uživatelským jménem Dockeru.

Tento soubor dělá několik věcí.

První část definuje specifikaci nasazení pro kontejner, který se má nasadit do Kubernetes. Určuje jednu repliku, kde najít image kontejneru, které porty se mají v kontejneru otevřít, a nastaví některé proměnné prostředí. Tato první část také definuje popisky a názvy, které lze použít pro odkaz na kontejner a specifikaci.

Druhá část pak definuje, že kontejner běží jako služba Kubernetes NodePort. V tomto modulu nemusíte rozumět všem specifikům NodePorts. Měli byste ale vědět, že tento typ služby zveřejňuje externí IP adresu, abyste mohli službu otestovat mimo cluster.

Nasazení a spuštění back-endové mikroslužby

V dalším kroku nasadím a spustíme mikroslužbu.

  1. Na kartě TERMINÁL spusťte následující příkaz:

    kubectl apply -f backend-deploy.yml
    

    Tento příkaz říká Kubernetes, aby spustil soubor, který jsme vytvořili. Stáhne image z Docker Hubu a vytvoří kontejner.

  2. Příkaz kubectl apply se rychle vrátí. Vytvoření kontejneru ale může chvíli trvat. Pokud chcete zobrazit průběh, použijte následující kód.

    kubectl get pods
    

    Ve výsledném výstupu máte řádek s produktybackend následovaný řetězcem náhodných znaků ve sloupci NAME . Až bude všechno připravené, ve sloupci PŘIPRAVENO je 1/1 a ve sloupci STAV se spustí.

  3. Pokud chcete službu otestovat, přepněte na kartu PORTY poblíž místní adresy back-endového portu a vyberte ikonu zeměkoule. V prohlížeči se na této adrese otevře nová karta.

  4. Pokud chcete zadat dotaz na některé produkty, připojte adresu pomocí /api/product a stiskněte Enter. Měly by se zobrazit některé informace o produktu ve formátu 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"
        },
        ...
    

Vytvoření souboru nasazení a spuštění front-endové služby

Podobně jako back-endová služba potřebujeme také soubor nasazení pro front-end.

  1. Ve složce donet-kubernetes vytvořte nový soubor s názvem frontend-deploy.yml

  2. Do souboru vložte následující kód:

    ---
    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. Zástupný symbol [YOUR DOCKER USERNAME] nahraďte skutečným uživatelským jménem Dockeru.

    Všimněte si, že tento soubor je podobný souboru, který jsme vytvořili pro back-endovou mikroslužbu. Existují dva rozdíly:

    • Zadáváme jiný kontejner, který se má spustit pod hodnotou nasazení spec.template.spec.containers.image .
    • V této části je nová proměnná spec.template.spec.containers.env prostředí. Kód v aplikaci storefrontend volá back-end, ale protože jsme nezadali plně kvalifikovaný název domény (FQDN), neznáme IP adresu back-endové mikroslužby, použijeme název, který jsme zadali pod metadata.name uzlem Deployment. Kubernetes se postará o zbytek.
  4. Nasaďte kontejner do Kubernetes pomocí následujícího příkazu:

    kubectl apply -f frontend-deploy.yml
    

    Znovu můžete použít kubectl get pods k zobrazení stavu nasazení. Jakmile se řádek pro storefrontend zobrazí ve sloupci Stav , všechno je připravené.

  5. Pokud chcete otestovat front-endovou službu, přepněte na kartu PORTY a napravo od místní adresy pro port Front End vyberte ikonu zeměkoule. V prohlížeči se zobrazí domovská stránka.

  6. Vyberte Produkty. Katalog zobrazuje zboží společnosti Contoso.

    A screenshot of the eSHopLite products page.

V tomto cvičení jste vytvořili soubor nasazení, který přesně popsal, jak chcete kontejnery spouštět v rámci Kubernetes. Pak jste image Kubernetes stáhli z Docker Hubu a spustili kontejnery.