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

AWS предоставляет более 100 сервисов, и очень важно знать, какой сервис выбрать для своих нужд. Amazon Elastic Kubernetes Service (Amazon EKS) - это управляемый сервис, который упрощает запуск Kubernetes на AWS без необходимости вставать или поддерживать свою собственную плоскость управления Kubernetes. Kubernetes - это система с открытым исходным кодом для автоматизации развертывания, масштабирования и управления контейнерными приложениями.

В этом посте мы собираемся развернуть приложение Next.js в среде nodejs. Сначала мы докеризуем наше приложение, загружаем этот образ в Amazon ECR и запускаем это приложение на Amazon EKS.

  • Пример проекта
  • Предварительные требования
  • Dockerize проекта
  • Отправка образа Docker в ECR
  • Создание кластера и рабочих узлов
  • Настройте kubectl для использования кластера
  • Развертывание объектов Kubernetes в кластере AWS EKS
  • Резюме
  • Заключение

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

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

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

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

Предпосылки

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

Как разработать и собрать приложение Next.js с помощью серверной части NodeJS

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

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

Kubernetes: главное

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

Аккаунт AWS

  • Настройка учетной записи AWS: AWS предлагает уровень бесплатного пользования в течение одного года вот ссылка для его настройки.
  • После настройки у вас будет учетная запись root. Не рекомендуется использовать свою учетную запись root для выполнения каких-либо задач, вместо этого вам следует создать группу IAM с разрешениями для доступа администратора, добавить в нее пользователя и войти в систему с этим пользователем.
  • Установить AWS CLI
  • Настройте интерфейс командной строки AWS для пользователя, которого вы только что создали. Вы должны использовать эту команду aws configure, и она запросит идентификатор ключа доступа и секретный ключ.

  • Вам необходимо установить Docker для рабочего стола (независимо от вашей ОС). Пожалуйста, перейдите по этой ссылке, чтобы установить Docker на свой ноутбук. После установки вы можете проверить информацию или версию Docker с помощью следующих команд.
docker info
docker --version

Dockerize проект

AWS EKS - это управляемый сервис, который упрощает запуск Kubernetes на AWS. Первое, что вам нужно сделать, это докеризовать ваш проект.

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

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

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

// create an image
docker build -t next-node-image .
// running the image
docker run -it -p  3080:3080 --name next-node-ui next-node-image
// list the image you just built
docker images
// list the container
docker ps

Отправка образа Docker в ECR

Amazon Elastic Container Registry (ECR) - это полностью управляемый реестр контейнеров Docker, который упрощает разработчикам хранение, управление и развертывание образов контейнеров Docker. Amazon ECR интегрирован с Amazon Elastic Container Service (ECS), что упрощает рабочий процесс от разработки до производственной среды.

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

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

Консоль AWS

Создать репозиторий с помощью консоли AWS просто, и все, что вам нужно, это указать имя.

AWS CLI

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

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com

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

aws ecr create-repository \     
     --repository-name frontend/nextjs-node\     
     --image-scanning-configuration scanOnPush=true \
     --image-tag-mutability IMMUTABLE     
     --region us-east-2

У вас будет такой же результат.

Добавление тегов к локальному образу Docker и отправка

Ранее вы создали образ Docker на своем локальном компьютере. Пришло время пометить это изображение с помощью этого URI репозитория на изображении выше.

docker tag nextjs-node-image:latest 032840272187.dkr.ecr.us-east-1.amazonaws.com/frontend/nextjs-node:v1

После того, как вы пометили изображение, пришло время отправить образ Docker в ваш репозиторий.

// list the images
docker images
// push the image
docker push 032840272187.dkr.ecr.us-east-1.amazonaws.com/frontend/nextjs-node:v1

Создание кластера и рабочих узлов

Начать работу с AWS EKS очень просто. Все, что вам нужно, - это сделать следующие шаги.

  • Нам нужно создать кластер AWS EKS с консолью AWS, SDK или AWS CLI.
  • Создайте группу рабочих узлов, которая регистрируется в кластере EKS.
  • Когда ваш кластер будет готов, вы можете настроить kubectl для связи с вашим кластером.
  • Развертывайте и управляйте своими приложениями в кластере

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

Давайте создадим кластер, следуя этому руководству здесь. Убедитесь, что вы создали роль для EKS, чтобы Amazon EKS и плоскость управления Kubernetes могли управлять ресурсами AWS от вашего имени. Я создал роль под названием eks_role

Перейдите в консоль EKS и настройте кластер, как показано ниже. Я использовал Kubernetes версии 1.18, и вы можете проверить роль службы кластеров.

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

Создать рабочие узлы

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

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

Настройте kubectl для использования кластера

aws eks --region region-code update-kubeconfig --name cluster_name

Вы можете проверить эти команды.

// get the service
kubectl get svc
// get the current context
kubectl config current-context

Развертывание объектов Kubernetes в кластере AWS EKS

Теперь мы настроили kubectl для использования AWS EKS с нашей собственной машины. Давайте создадим объекты развертывания и обслуживания и воспользуемся образом из AWS ECR. Вот файл манифеста, который содержит эти объекты.

Если вы клонировали проект из приведенного выше примера и находитесь в корневой папке, просто используйте эту команду для создания объектов kubectl create -f manifest.yml

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

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

Резюме

  • Amazon Elastic Kubernetes Service (Amazon EKS) - это управляемый сервис, который упрощает запуск Kubernetes на AWS без необходимости вставать или поддерживать свою собственную плоскость управления Kubernetes.
  • В качестве предварительного условия вам необходимо создать учетную запись AWS.
  • Не рекомендуется использовать свою учетную запись root для выполнения каких-либо задач, вместо этого вам следует создать группу IAM с разрешениями для доступа администратора, добавить в нее пользователя и войти в систему с этим пользователем.
  • Вы должны использовать эту команду aws configure с ключом доступа и секретным ключом.
  • Amazon EKS - это управляемый сервис, который упрощает запуск Kubernetes на AWS.
  • Amazon Elastic Container Registry (ECR) - это полностью управляемый реестр контейнеров Docker, который упрощает разработчикам хранение, управление и развертывание образов контейнеров Docker.
  • Amazon ECR интегрирован с Amazon Elastic Container Service (ECS), что упрощает рабочий процесс от разработки до производственной среды.
  • Amazon ECS работает с любым реестром Docker, например с Docker Hub и т. Д.
  • Для запуска приложений в кластере Kubernetes необходимо выполнить следующие действия: нам нужно создать кластер AWS EKS с консолью AWS, SDK или AWS CLI. Создайте группу рабочих узлов, которая регистрируется в EKS Cluster. Когда ваш кластер будет готов, вы можете настроить kubectl для связи с вашим кластером, развертывания и управления вашими приложениями в кластере.

Заключение

Мы развернули простое приложение Next.js с серверной частью Nodejs в кластере AWS EKS. В будущих публикациях мы увидим, как добавить балансировщик нагрузки и как направить запросы в кластер Kubernetes.