Пошаговое руководство с примером проекта

Kubernetes - одна из быстрорастущих технологий, и сегодня ее внедряют все компании. Когда вы запускаете любое приложение в Kubernetes, вам необходимо развернуть так много объектов, как развертывание, конфигурационная карта, секреты и т. Д. Вам необходимо определить все эти объекты в manifest.yml file и отправьте эти файлы на сервер Kubernetes API. Kubernetes читает эти файлы манифеста и создает объекты по желанию.

Развернуть приложение один раз - нормально, но если вы хотите развертывать приложение снова и снова, вам нужно снова и снова отправлять все файлы манифеста на сервер Kubernetes API. Helm - это инструмент, решающий эту проблему.

Helm - это менеджер пакетов для Kubernetes, который предоставляет решение для управления пакетами, безопасности и настраиваемости при развертывании приложений в Kubernetes. Helm упрощает вам работу с Kubernetes. В этом посте мы увидим, как развернуть React с серверной частью NodeJS в Azure AKS с помощью HELM.

  • Пример проекта
  • Предварительные требования
  • Установите Azure CLI и настройте
  • Dockerize проекта
  • Отправка образа Docker в реестр контейнеров
  • Создание Helm-диаграммы
  • Создание кластера AKS
  • Настройте Kuebctl с помощью кластера AKS
  • Установка Helm Chart в кластере AKS
  • Доступ к установленному приложению
  • Удаление кластера
  • Резюме
  • Заключение

Пример проекта

Это простой проект, демонстрирующий разработку и запуск приложения React с помощью NodeJS. У нас есть простое приложение, в котором мы можем добавлять пользователей, подсчитывать и отображать их сбоку, а также извлекать их, когда захотите.

Если вы хотите попрактиковаться, вот ссылка на этот проект на Github. Вы также можете клонировать его и запустить на своем компьютере.

// clone the project
git clone https://github.com/bbachi/react-nodejs-gke.git
// strat the api 
cd api
npm install
npm run dev
// start the react app
cd my-app
npm install
npm start

Предпосылки

  • Если вы новичок в React, перейдите по приведенной ниже ссылке о том, как разработать и собрать проект React с бэкэндом NodeJS.

Как разработать и создать приложение React с помощью NodeJS

Другими предпосылками для этого поста являются основы Docker и основы Kubernests. Мы не собираемся обсуждать основы, такие как контейнер или Kubernetes, скорее, мы увидим, как построить кластер Kubernetes на Azure AKS. Ниже приведены предварительные требования, которые вы должны знать перед прочтением этой статьи.

Основы Докера

Вам необходимо понимать концепции Docker, такие как создание образов, управление контейнерами и т. Д. Ниже приведены некоторые ссылки, которые вы можете понять о Docker, если вы новичок.

Kubernetes: главное

Вам необходимо понимать основы Kubernetes, а также основы Docker. Вот несколько документов, которые помогут вам понять концепции Kubernetes.

HELM: главное

Если вы новичок в HELM или хотите начать, вот статья.

Как начать работу с HELM

Учетная запись Microsoft Azure

У вас должна быть учетная запись Microsoft Azure. Вы можете получить бесплатную учетную запись на один год. После входа в систему вы должны увидеть экран ниже.

Вам необходимо создать подписку для своей учетной записи. Самая распространенная - подписка Pay As You Go.

Вам нужна подписка, которая будет связана с вашим клиентом, чтобы вся стоимость была оплачена по этой подписке.

Установите Azure CLI и настройте

Получив учетную запись Azure, вы можете установить Azure CLI. Вы можете перейти к приведенной ниже документации и установить Azure CLI в зависимости от вашей операционной системы. Вы можете настроить Azure CLI с помощью своей подписки.

Перечислим подписку с помощью следующей команды

az account list

Dockerize проект

Azure AKS - это управляемая служба, которая упрощает запуск Kubernetes в Microsoft Azure. Первое, что вам нужно сделать, это докеризовать ваш проект.

Вот Dockerfile, который использует многоступенчатые сборки для уменьшения размера образа и поверхностных атак.

Вот команды для создания образа и его запуска на движке Docker на вашем локальном компьютере. Если вы новичок в Docker, ознакомьтесь с этим подробным постом по этой теме.

Докеризация приложения React с помощью серверной части NodeJS

// build the image
docker build -t react-node-image .
// running on Image
docker run -d -p  3080:3080 --name react-node-ui react-node-image
// list the image you just built
docker images
// list the container
docker ps

Отправка образа Docker в реестр контейнеров

Реестр контейнеров Azure создает, хранит, защищает, сканирует, реплицирует и управляет образами и артефактами контейнеров с помощью полностью управляемого, геореплицируемого экземпляра распределения OCI. Подключайтесь между средами, включая службу Azure Kubernetes и Azure Red Hat OpenShift, а также между службами Azure, такими как служба приложений, машинное обучение и пакетная обработка.

Azure AKS работает с любым реестром Docker, таким как Docker Hub и т. Д. Но в этом посте мы увидим, как мы можем использовать реестр контейнеров Azure для хранения наших образов Docker. После настройки учетной записи портала Azure и создания группы ресурсов, как указано выше, вы можете создать реестр контейнеров, как показано ниже.

После просмотра и создания вы увидите следующий экран.

Вы можете увидеть основную страницу реестра контейнеров ниже.

Вы можете делать то же самое с Azure CLI с помощью следующих команд. Убедитесь, что вы вошли в свою учетную запись Azure с помощью интерфейса командной строки az login, прежде чем запускать следующие команды.

// create a resource group
az group create --name k8s-demo --location westus
// create a container registry
az acr create --resource-group k8s-demo \
  --name crfrontend --sku Basic

Пришло время создать и опубликовать образ Docker с помощью следующей команды. Клонируйте приведенный выше пример проекта, перейдите в корневую папку, в которой находится Dockerfile, и выполните эту команду.

az acr build --image aksdemo/react-webapp:v1 \
  --registry crfrontend \
  --file Dockerfile .

Вы увидите результат ниже

Вы также можете увидеть все подробности на портале.

Если вы хотите вытащить этот репозиторий, вам нужно использовать эту команду.

docker pull crfrontend.azurecr.io/aksdemo/react-webapp:v1

Создание Helm-диаграммы

Давайте начнем с этой команды, чтобы она создала для нас структуру по умолчанию.

helm create react-node-chart

Если вы посмотрите на пример проекта, все, что нам нужно, - это объекты развертывания и обслуживания. Нам не нужны hpa, ingress, serviceaccount и т. Д. Я собираюсь удалить все эти файлы и оставить только файлы deployment.yml и service.yml, как показано ниже.

Вы можете передать некоторые значения по умолчанию в диаграмму с помощью файла values.yaml. У нас есть некоторые значения по умолчанию, такие как изображение, количество реплик, имя и т. Д.

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

Chart.yaml содержит информацию о диаграмме, такую ​​как имя, версия, описание и т. Д.

Мы можем упаковать файлы и каталоги диаграммы в один архивный файл. Вы можете просто упаковать его с помощью следующей команды

helm package react-node-chart

Создание кластера AKS

Во-первых, вам нужна группа ресурсов для всех ваших ресурсов. Давайте создадим ресурс с помощью следующей команды.

az group create --name k8s-demo --location westus

Давайте создадим кластер с помощью следующей команды. Обратите внимание, что мы используем ту же группу ресурсов, которую создали выше. Вы можете увидеть результат в формате JSON через несколько минут.

az aks create --resource-group k8s-demo --name frontend-cluster --node-count 3 --enable-addons monitoring --generate-ssh-keys

Вы можете увидеть следующий кластер в консоли.

Настройте Kuebctl с помощью кластера AKS

Kubectl - это утилита командной строки для Kubernetes. Перед настройкой необходимо установить kubectl. Запускайте первую команду только в том случае, если на вашем локальном компьютере нет kubectl.

// install CLI
az aks install-cli
// connect to your cluster
az aks get-credentials --resource-group k8s-demo --name frontend-cluster
// get all the contexts
kubectl config get-contexts
// verify the current context
kubectl config current-context
// get the node
kubectl get nodes

Теперь мы настроили kubectl для использования Azure AKS с нашего собственного компьютера. Вам необходимо интегрировать реестр контейнеров с AKS. Давайте присоединим реестр контейнеров к кластеру с помощью следующей команды. Вы можете изучить документацию по этому поводу.

az aks update -n frontend-cluster -g k8s-demo --attach-acr crfrontend

Установка Helm Chart на кластер AKS

Мы упаковали диаграмму в один архивный файл. Мы можем установить его с помощью следующей команды.

helm install release1 react-node-chart-0.1.0.tgz

Вы можете увидеть примечания о том, как получить доступ к приложению, потому что у нас есть Notes.txt в папке Chart, как показано ниже. Вы можете разместить любую информацию, которая поможет разработчикам, использующим вашу диаграмму.

Вы можете проверить выпуск с помощью этой команды helm list

Вы можете проверить модули и службы, установленные и запущенные в вашем кластере, с помощью следующих команд.

// deployment
kubectl get deploy
//pods
kubectl get po
// service
kubectl get svc

Вы можете проверить то же самое в кластере AKS, войдя на портал Azure и щелкнув рабочие нагрузки, как показано ниже. Как видите, для этого развертывания запущено 10 модулей.

Вы можете увидеть больше на странице деталей.

Доступ к установленному приложению

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

Нам нужно получить публичный IP-адрес Kubernetes с помощью этой команды kubectl cluster-info

Давайте получим доступ к приложению React с этим IP-адресом 20.115.176.89 (где работает балансировщик нагрузки) и портом 3080 (где отображается порт службы) с указанными ниже URL-адресами. Убедитесь, что вы используете HTTP вместо HTTPS.

http://20.115.176.89:3080/

Доступ к приложению в браузере

Удалить кластер

Вы можете просто удалить кластер или группу ресурсов. Я создал группу ресурсов только для этого, поэтому я удаляю группу ресурсов с помощью следующей команды. Убедитесь, что вы удалили, если не хотите взимать плату.

az group delete --name k8s-demo

Резюме

  • Kubernetes - одна из быстрорастущих технологий, и сегодня ее внедряют все компании.
  • Когда вы запускаете любое приложение в Kubernetes, вам необходимо развернуть так много объектов, как развертывание, конфигурационная карта, секреты и т. Д. Вам необходимо определить все эти объекты в manifest.yml file и отправьте эти файлы на сервер Kubernetes API.
  • Развернуть приложение один раз - нормально, но если вы хотите развертывать приложение снова и снова, вам нужно снова и снова отправлять все файлы манифеста на сервер Kubernetes API. Helm - это инструмент, решающий эту проблему.
  • Helm - это менеджер пакетов для Kubernetes, который предоставляет решение для управления пакетами, безопасности и настраиваемости при развертывании приложений в Kubernetes.
  • Когда вы управляете приложениями в кластере, Helm’s в основном фокусируется на трех вещах: безопасность, настраиваемость и возможность повторного использования.
  • Chart in a Helm - это не что иное, как упакованная версия вашего приложения. Диаграмма - это набор файлов и каталогов, который соответствует некоторой спецификации для описания ресурсов, устанавливаемых в Kubernetes.
  • Helm по умолчанию использует ту же конфигурацию, что и kubectl, и вы можете изменить ее, выставив переменную среды $ KUBECONFIG или HELM_KUBECONTEXT.
  • Мы можем упаковать файлы и каталоги диаграммы в один архивный файл с помощью этой команды helm package <package-name>

Заключение

Создание примера проекта - отличный способ начать работу с любым инструментом. Мы видели, как развернуть реакцию с помощью NodeJS Backend в кластере Kubernetes с HELM. В будущих публикациях мы увидим более сложные темы.