Огляд
Цей блог описує процес розгортання простого додатку Flask на AWS Elastic Kubernetes Service (EKS) з використанням балансувальника навантаження. Додаток демонструє службу фронтенду, доступну через кастомний домен за допомогою AWS Route 53.
Попередні вимоги
- Обліковий запис AWS: Переконайтеся, що у вас є активний обліковий запис AWS.
- AWS CLI: Встановлено та налаштовано з відповідними правами доступу.
- kubectl: Встановлено для управління кластером Kubernetes.
- eksctl: Встановлено для створення та управління кластерами EKS.
- Docker: Встановлено для створення та завантаження контейнерних образів.
- Доменне ім’я: Придбано та керується через 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, доступіть додаток через ваш кастомний домен:
Доступ до додатку можна отримати за допомогою:
- DNS балансувальника навантаження:
http://
- Домену:
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