Kubernetes стал де-факто инструментом для оркестровки контейнеров и имеет солидное сообщество. Вся эра облачных решений началась с эволюции Kubernetes и продолжает развиваться. В результате Kubernetes не просто популярен, а стал способом развертывания приложений для обеспечения их высокой доступности и масштабируемости. Сообщество разработчиков уделяет большое внимание этому инструменту, и каждый день многие компании используют Kubernetes для безопасного развертывания своих приложений на производстве. Поскольку о Kubernetes заговорили в городе облачных решений, мы решили показать вам, как можно легко использовать Kubernetes для развертывания простого приложения на python.
Предварительные условия:
- Скачайте и установите Python 3 с официального сайта.
- Установите Fastapi с помощью команды
pip install fastapi
. - Вам также понадобится ASGI-сервер для производства, например, Uvicorn, установите его командой
pip install "uvicorn[standard]"
. - Зарегистрируйтесь на платформе Harness [модуль CD].
- Получите доступ к кластеру Kubernetes для развертывания нашего приложения. Вы также можете использовать Minikube или Kind.
Учебник:
Предполагая, что вы знаете концепции Kubernetes, мы перейдем непосредственно к написанию простого приложения на python. Сначала создадим очень простое python-приложение в Fastapi. Что такое Fastapi? Согласно их собственному сайту, «FastAPI — это современный, быстрый (высокопроизводительный) веб-фреймворк для создания API с Python 3.6+ на основе стандартных подсказок типов Python».
Скопируйте приведенный ниже код в файл main.py
,
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
Вы можете запустить сервер с помощью следующей команды,
uvicorn main:app --reload
При посещении сайта http://127.0.0.1:8000/ вы должны увидеть следующий результат.
Создайте Docker-файл для этого приложения, чтобы запустить его как контейнер.
FROM python:3.8.10
COPY requirements.txt /
RUN pip3 install -r /requirements.txt
COPY . /app
WORKDIR /app
ENTRYPOINT ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8500", "--reload"]
Создайте файл requirements.txt
и включите две библиотеки в качестве зависимостей.
Сначала соберите приложение в виде образа локально с помощью следующей команды,
docker build -t simple_app .
Пометьте образ и отправьте его в Docker Hub с помощью следующих команд,
docker tag simple_app:latest [dockerhub username]/simple_app:latest
docker push [dockerhub username]/simple_app:latest
Создайте файлы манифеста Kubernetes для развертывания и демонстрации приложения в качестве сервиса.
Создайте файл deployment.yaml
в корне приложения и добавьте следующие спецификации кода/манифеста,
apiVersion: apps/v1
kind: Deployment
metadata:
name: simple-deployment
labels:
app: simple-app
spec:
replicas: 1
selector:
matchLabels:
app: simple-app
template:
metadata:
labels:
app: simple-app
spec:
containers:
- name: fastapi
image: docker hub username/simple_app:latest
ports:
- containerPort: 8500
Создайте файл service.yaml
и добавьте следующие спецификации кода/манифеста,
apiVersion: v1
kind: Service
metadata:
name: simple-service
labels:
app: ecommerce
spec:
selector:
app: simple-app
type: LoadBalancer
ports:
- port: 8500
targetPort: 8500
Далее примените команды kubectl к файлам deployment и service yaml.
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
Затем проверьте работоспособность капсул, как и ожидалось, командой kubectl get pods
.
Теперь пришло время увидеть наше приложение во внешнем мире.
Используйте команду kubectl get svc
.
Вы увидите внешний IP-адрес, и мы можем использовать его для просмотра работы нашего приложения.
curl 192.168.0.107:8500
{«Hello»: «World»}
Добавьте простую тестовую конфигурацию для тестирования приложения.
Вы можете легко использовать Harness для непрерывной интеграции и развертывания любых приложений с помощью простых шагов и конфигураций.
Для простоты и в соответствии с современной тенденцией мы рассмотрели в качестве примера развертывание Kubernetes. Мы использовали кластер GCP Kubernetes, и именно на нем будет происходить наше развертывание. Вы можете выбрать своего любимого облачного провайдера, чтобы создать кластер Kubernetes для развертывания приложения.
Harness имеет довольно изящный пользовательский интерфейс и может помочь разработчикам без особых усилий выполнять CI/CD. После регистрации в Harness выберите вкладку Try NextGen, и перед вами откроется новый опыт и возможности CI/CD. Начните с понравившегося модуля, в нашем случае мы выберем Continuous Integration и Continuous Delivery. Сначала выберите модуль Continuous Integration, добавьте необходимые шаги и запустите его перед выполнением Continuous Delivery.
Убедитесь, что все необходимые коннекторы запущены. Также убедитесь, что на целевом кластере установлен Delegate.
Вы можете спросить — что такое Delegate и зачем он нужен? Ну, Harness Delegate — это служба/программа, которую необходимо установить/запустить на целевом кластере [кластер Kubernetes в нашем случае] для подключения ваших артефактов, инфраструктуры, совместной работы, проверки и других провайдеров к Harness Manager. Когда вы впервые устанавливаете Harness, вы устанавливаете Harness Delegate.
Мы не будем углубляться в Delegate в этой статье, поскольку это может быть отдельным блогом. Пока просто знайте, что делегат выполняет все операции по развертыванию за вас. Если вы хотите узнать больше о делегате, вы можете прочитать здесь.
Я только что показал вам, как развернуть простое python-приложение в Kubernetes с помощью kubectl и Harness. У нас есть хорошо документированный репозиторий приложений MERN Stack, который вы можете форкнуть и начать понимать полный конвейер CI/CD. Код приложения находится в репозитории harnessapps/MERN-Stack-Example, конфигурация Kubernetes — в репозитории harnessapps/MERN-Stack-Example-DevOps.
Готовы приступить к практической работе с Harness CI/CD?
Нижеприведенные ссылки помогут вам разобраться с непрерывной интеграцией и доставкой.
- Начало работы с Harness Continuous Integration
- Непрерывное развертывание с помощью Harness CD
Счастливого DevOpsing!