Пошаговое руководство с примером проекта
AWS предоставляет более 100 сервисов, и очень важно знать, какой сервис выбрать для своих нужд. Amazon Elastic Kubernetes Service (Amazon EKS) - это управляемый сервис, который упрощает запуск Kubernetes на AWS без необходимости вставать или поддерживать свою собственную плоскость управления Kubernetes. Kubernetes - это система с открытым исходным кодом для автоматизации развертывания, масштабирования и управления контейнерными приложениями.
В этом посте мы собираемся развернуть приложение Angular с веб-сервером NGINX. Сначала мы докеризуем наше приложение, загружаем этот образ в Amazon ECR и запускаем это приложение на Amazon EKS.
- Пример проекта
- Предварительные требования
- Dockerize проекта
- Отправка образа Docker в ECR
- Создание кластера и рабочих узлов
- Настройте kubectl для использования кластера
- Развертывание объектов Kubernetes в кластере AWS EKS
- Резюме
- Заключение
Пример проекта
Это простой проект, демонстрирующий разработку и запуск приложения Angular с NGINX. У нас есть простое приложение, в котором мы можем добавлять пользователей, подсчитывать и отображать их сбоку, а также извлекать их, когда захотите.
Если вы хотите попрактиковаться, вот ссылка на этот проект на Github. Вы также можете клонировать его и запустить на своем компьютере.
// clone the project git clone https://github.com/bbachi/angular-nginx-example.git // install Angular dependencies and start cd my-app npm install npm start
Предпосылки
- Если вы новичок в Angular, перейдите по приведенной ниже ссылке о том, как разработать и собрать проект Angular с веб-сервером NGINX.
Другими предпосылками для этого поста являются основы Docker и основы Kubernests. Мы не собираемся обсуждать основы, такие как контейнер или Kubernetes, скорее, мы увидим, как построить кластер Kubernetes на AWS EKS. Ниже приведены предварительные требования, которые вы должны знать перед прочтением этой статьи.
Основы Докера
Вам необходимо понимать концепции Docker, такие как создание образов, управление контейнерами и т. Д. Ниже приведены некоторые ссылки, которые вы можете понять о Docker, если вы новичок.
- Докер Документы
- Docker - Руководство для начинающих по Dockerfile с примером проекта
- Докер - Создание образов и управление ими
- Докер - Управление контейнерами с примерами
- Понимание Docker Volumes на примере
Kubernetes: главное
Вам необходимо понимать основы Kubernetes, а также основы Docker. Вот несколько документов, которые помогут вам понять концепции Kubernetes.
Аккаунт AWS
- Настройка учетной записи AWS: AWS предлагает уровень бесплатного пользования в течение одного года вот ссылка для его настройки.
- После настройки у вас будет учетная запись root. Не рекомендуется использовать свою учетную запись root для выполнения каких-либо задач, вместо этого вам следует создать группу IAM с разрешениями для доступа администратора, добавить в нее пользователя и войти в систему с этим пользователем.
- Установить AWS CLI
- Настройте интерфейс командной строки AWS для пользователя, которого вы только что создали. Вы должны использовать эту команду
aws configure
, и она запросит идентификатор ключа доступа и секретный ключ.
- Вам необходимо установить Docker для рабочего стола (независимо от вашей ОС). Пожалуйста, перейдите по этой ссылке, чтобы установить Docker на свой ноутбук. После установки вы можете проверить информацию или версию Docker с помощью следующих команд.
docker info docker --version
- Инструмент командной строки Kubernetes, kubectl, позволяет запускать команды для кластеров Kubernetes. Установите его отсюда.
Dockerize проект
AWS EKS - это управляемый сервис, который упрощает запуск Kubernetes на AWS. Первое, что вам нужно сделать, это докеризовать ваш проект.
Вот Dockerfile, который использует многоступенчатые сборки для уменьшения размера образа и поверхностных атак.
Вот команды для создания образа и его запуска на движке Docker на вашем локальном компьютере. Если вы новичок в Docker, прочтите этот подробный пост по этой теме.
// build the image docker build -t ang-nginx-ui . // run the image docker run -d --name ang-nginx-webapp -p 80:80 ang-nginx-ui // 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/web-app \ --image-scanning-configuration scanOnPush=true \ --image-tag-mutability IMMUTABLE \ --region us-east-2
У вас будет такой же результат.
Добавление тегов к локальному образу Docker и отправка
Ранее вы создали образ Docker на своем локальном компьютере. Пришло время пометить это изображение с помощью этого URI репозитория на изображении выше.
docker tag ang-nginx-ui:latest 864227929192.dkr.ecr.us-east-2.amazonaws.com/frontend/web-app:v1
После того, как вы пометили изображение, пришло время отправить образ Docker в ваш репозиторий.
// list the images docker images // push the image docker push 864227929192.dkr.ecr.us-east-2.amazonaws.com/frontend/web-app:v1
Создание кластера и рабочих узлов
Начать работу с AWS EKS очень просто. Все, что вам нужно, - это сделать следующие шаги.
- Нам нужно создать кластер AWS EKS с консолью AWS, SDK или AWS CLI.
- Создайте группу рабочих узлов, которая регистрируется в кластере EKS.
- Когда ваш кластер будет готов, вы можете настроить kubectl для связи с вашим кластером.
- Развертывайте и управляйте своими приложениями в кластере
Создание кластера
Давайте создадим кластер, следуя этому руководству здесь. Убедитесь, что вы создали роль для EKS, чтобы Amazon EKS и плоскость управления Kubernetes могли управлять ресурсами AWS от вашего имени. Я создал роль под названием eks_cluster_role. Вот ссылка для создания роли кластера.
Давайте создадим кластер, предоставив следующую информацию.
Для создания кластера требуется некоторое время, и после создания он должен перейти в активное состояние.
Создать рабочие узлы
Пришло время создать узлы, и прежде чем вы это сделаете, мы должны создать эту роль под названием NodeInstanceRole. Следуйте этому руководству, чтобы создать его.
Следуйте этому руководству, чтобы создать группу узлов после создания роли.
Настройте kubectl для использования кластера
- Нам нужно установить kubectl на нашу машину, следуйте этому руководству, чтобы установить в зависимости от вашей ОС.
- Следующее, что нам нужно сделать, это установить aws-iam-authentication. Следуйте этому руководству. Нам это нужно для аутентификации кластера, и он использует того же пользователя, с которым аутентифицируется AWS CLI.
- Используйте команду AWS CLI update-kubeconfig, чтобы создать или обновить kubeconfig для своего кластера. Здесь код региона - us-east-2, а имя_кластера - frontend_clutser.
aws eks --region region-code update-kubeconfig --name cluster_name
Вы можете проверить эти команды.
// get the service kubectl get nodes // 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 для связи с вашим кластером, развертывать и управлять своими приложениями в кластере.
Заключение
Мы развернули простое приложение Angular с веб-сервером NGINX в кластере AWS EKS. В будущих публикациях мы увидим, как добавить балансировщик нагрузки и как направить запросы в кластер Kubernetes.