Упражнение. Развертывание контейнера микрослужб в Kubernetes

Завершено

Kubernetes отвечает за работу контейнеров. Вы описываете, что нужно сделать Kubernetes, с помощью YAML-файла. В этом упражнении описывается создание файла, чтобы можно было развернуть и запустить серверную службу в Kubernetes.

Внимание

Прежде чем продолжить, необходимо убедиться, что у вас установлена реализация Kubernetes. Мы будем использовать реализацию k3d , выполняемую в пространстве кода. Мы начнем лабораторию, установив эту реализацию.

Установка средств и реализации Kubernetes

Необходимо установить как средство kubectl, так и реализацию Kubernetes k3d:

  1. В пространстве кода перейдите на вкладку ТЕРМИНАЛ , а затем выполните следующие команды, чтобы установить необходимые компоненты:

    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    
  2. Затем, чтобы скачать ключ подписи для репозиториев пакетов Kubernetes, выполните следующие команды:

    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
    

    Если вы получаете сообщение об ошибке, что каталог уже существует, выполните curl команду отдельно.

  3. Добавьте репозиторий Kubernetes в конфигурацию 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. Теперь вы можете установить средство kubectl :

    sudo apt-get update
    sudo apt-get install -y kubectl
    
  5. Наконец, установите реализацию Kubernetes k3d и создайте кластер:

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

Создание файла развертывания для серверной службы

Развертывание контейнера управления файлами можно создать в Kubernetes с помощью YAML-файла. Давайте создадим файл для развертывания серверной службы.

  1. Создайте файл в папке donet-kubernetes пространства кода с именем backend-deploy.yml.

  2. Скопируйте в файл приведенный ниже текст и сохраните его.

    ---
    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. Замените заполнитель [YOUR DOCKER USER NAME] именем пользователя Docker.

Этот файл выполняет несколько действий.

Первая часть определяет спецификацию развертывания для контейнера, который будет развернут в Kubernetes. Он задает один реплика, где найти образ контейнера, который порты будут открываться в контейнере, и задает некоторые переменные среды. Эта первая часть также определяет метки и имена, которые можно использовать для ссылки на контейнер и спецификацию.

Вторая часть определяет, что контейнер выполняется в качестве службы NodePort Kubernetes. Для этого модуля вам не нужно понимать все особенности NodePorts. Однако следует знать, что этот тип службы предоставляет внешний IP-адрес, чтобы можно было протестировать службу за пределами кластера.

Развертывание и запуск серверной микрослужбы

Затем разверните и запустите микрослужбу.

  1. На вкладке ТЕРМИНАЛА выполните следующую команду:

    kubectl apply -f backend-deploy.yml
    

    Эта команда указывает Kubernetes запустить созданный файл. Он скачивает образ из Docker Hub и создает контейнер.

  2. Команда kubectl apply быстро возвращается. Но создание контейнера может занять некоторое время. Чтобы просмотреть сведения о ходе выполнения, используйте следующий код.

    kubectl get pods
    

    В результирующем выходных данных есть строка с серверной частью продуктов, за которой следует строка случайных символов в столбце NAME. Когда все готово, в столбце READY и в столбце STATUS есть значение 1/1.

  3. Чтобы проверить службу, перейдите на вкладку "ПОРТЫ" рядом с локальным адресом для порта серверной части, щелкните значок глобуса. В браузере откроется новая вкладка на этом адресе.

  4. Чтобы запросить некоторые продукты, добавьте адрес с помощью /api/product и нажмите клавишу ВВОД. В формате 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"
        },
        ...
    

Создание файла развертывания и запуск интерфейсной службы

Как и серверная служба, нам нужен файл развертывания для внешнего интерфейса.

  1. Создайте файл в папке donet-kubernetes с именем frontend-deploy.yml

  2. Вставьте в файл приведенный ниже код.

    ---
    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. Замените заполнитель [YOUR DOCKER USERNAME] именем пользователя Docker.

    Обратите внимание, что этот файл похож на тот, который мы создали для серверной микрослужбы. Есть два различия:

    • Мы указываем другой контейнер для выполнения со значением spec.template.spec.containers.image развертывания.
    • В разделе spec.template.spec.containers.env есть новая переменная среды. Код в приложении storefrontend вызывает серверную часть, но поскольку мы не указали полное доменное имя (FQDN), мы не знаем IP-адрес серверной микрослужбы, мы используем имя, указанное под metadata.name узлом узла Deployment. Kubernetes заботится о остальных.
  4. Разверните контейнер в Kubernetes с помощью следующей команды:

    kubectl apply -f frontend-deploy.yml
    

    Опять же, с помощью kubectl get pods можно просмотреть сведения о состоянии развертывания. Когда строка для магазина отображается в столбце STATUS , все готово для перехода.

  5. Чтобы проверить интерфейсную службу, перейдите на вкладку "ПОРТЫ ", а затем справа от локального адреса порта переднего плана выберите значок глобуса. В браузере отображается домашняя страница.

  6. Выберите Продукты. В каталоге отображаются товары Компании Contoso.

    A screenshot of the eSHopLite products page.

В этом упражнении вы создали файл развертывания, который точно описывает способ выполнения контейнеров в Kubernetes. Затем вы скачали образ Kubernetes из Docker Hub и начали контейнеры.