Розгортання додатку Flask на AWS EKS з використанням сервісу балансування навантаження.

pic

Огляд

Цей блог описує процес розгортання простого додатку Flask на AWS Elastic Kubernetes Service (EKS) з використанням балансувальника навантаження. Додаток демонструє службу фронтенду, доступну через кастомний домен за допомогою AWS Route 53.

Попередні вимоги

  1. Обліковий запис AWS: Переконайтеся, що у вас є активний обліковий запис AWS.
  2. AWS CLI: Встановлено та налаштовано з відповідними правами доступу.
  3. kubectl: Встановлено для управління кластером Kubernetes.
  4. eksctl: Встановлено для створення та управління кластерами EKS.
  5. Docker: Встановлено для створення та завантаження контейнерних образів.
  6. Доменне ім’я: Придбано та керується через AWS Route 53 або іншого реєстратора.

Структура директорій

Структура проєкту виглядає наступним чином:

project/  
├── app.py  
├── Dockerfile  
├── requirements.txt  
├── README.md  
└── k8s-manifests/  
 ├── flask-app-deployment.yaml  
 ├── flask-app-service.yaml  
└── docker/  
 ├── build-and-push-dockerhub.sh  
 ├── build-and-push-ecr.sh

Покрокова інструкція

1. Налаштуйте AWS CLI

Запустіть наступну команду для налаштування AWS CLI з вашими обліковими даними та регіоном:

aws configure

2. Створіть кластер EKS

Використовуйте eksctl для створення кластера EKS:

eksctl create cluster --name flask-cluster --region  --nodegroup-name flask-nodes \  
 --nodes 2 --nodes-min 2 --nodes-max 5 --node-type t3.micro

Перевірте статус кластера:

kubectl get nodes

3. Створення та завантаження Docker образу

Для DockerHub

Перейдіть в директорію docker/ і використовуйте наданий скрипт:

cd docker  
bash build-and-push-dockerhub.sh

Для Amazon ECR

Використовуйте наданий скрипт:

bash build-and-push-ecr.sh

Переконайтеся, що образ був завантажений в відповідний репозиторій.

4. Розгортання додатку

Створення ресурсів Kubernetes

Перейдіть до директорії k8s-manifests/ та застосуйте манифести для розгортання та сервісу:

cd ..\k8s-manifests  
kubectl apply -f flask-app-deployment.yaml  
kubectl apply -f flask-app-service.yaml

Перевірка розгортання

Перевірте статус подів та сервісів:

kubectl get pods  
kubectl get svc

5. Прив’язка домену в Route 53

  • Створіть хостингову зону для kubeops.buzz в Route 53.
  • Оновіть записи Name Servers (NS) у вашого реєстратора доменів, щоб вони вказували на Route 53.
  • Додайте запис A Record для прив’язки домену до DNS балансувальника навантаження.
Record Type: A (Alias)  
Name: kubeops.buzz  
Alias Target: 

6. Доступ до додатку

Після поширення DNS, доступіть додаток через ваш кастомний домен:

Доступ до додатку можна отримати за допомогою:

  1. DNS балансувальника навантаження: http://
  2. Домену: http:// (після поширення).

Виклики, з якими ми стикнулися

1. Затримки в поширенні DNS

Потрібно було трохи часу, щоб kubeops.buzz було вирішено після оновлення записів NS у реєстратора.

Рішення: Використовуйте інструменти як nslookup або dig, щоб підтвердити вирішення DNS:

nslookup 

Додаткові зауваження

  • Піддомені: Якщо ви хочете прив'язати піддомени (наприклад, api.kubeops.buzz), повторіть вищезгадані кроки з вказанням конкретного імені піддомену в DNS записі.
  • TTL (Час життя): За замовчуванням TTL для DNS записів у Route53 становить 300 секунд. Ви можете змінити це значення, якщо потрібно.
  • SSL/TLS: Для безпечного HTTPS трафіку можна використовувати AWS Certificate Manager (ACM) для отримання безкоштовного SSL/TLS сертифікату та прикріпити його до балансувальника навантаження.

2. CrashLoopBackOff у Pod

Додаток Flask зіткнувся з відсутніми залежностями під час початкового розгортання.

Рішення: Оновлено requirements.txt і перебудовано Docker образ.

Репозиторій і код

Весь код для цього проєкту доступний у моєму репозиторії на GitHub.
Репозиторій включає:

  • Код додатку Flask
  • Dockerfile
  • Манифести Kubernetes у форматі YAML
  • Сценарії для автоматизації розгортання.

Розгортання додатку Flask на AWS EKS з кастомним доменом стало цінним досвідом. Цей проєкт показав, як можна використовувати сервіси AWS для масштабованих, готових до виробництва розгортань. З цією налаштуванням я створив основу для додавання нових функцій, таких як моніторинг, CI/CD пайплайни та покращена безпека.

Перекладено з: Deploying a Flask Application on AWS EKS with a Load Balancer Service

Leave a Reply

Your email address will not be published. Required fields are marked *