Как начать работу с serverless вычислениями с помощью Knative
Содержание:
- 1. Что такое Knative?
- 2. Что такое Serverless?
- 3. Почему важен serverless?
- 4. Как это работает?
- 5. Начинаем работу Knative на Ubuntu с MicroK8s
- 6. a. Создайте ВМ
- 7. b. Установите Microk8s
- 8. c. Установите Knative (целиком)
- 9. d. Установите Knative (кастомный)
- 10. e. Hello World
- 11. f. Краткое описание этапов
- 12. Следующие шаги
Что такое Knative?
Knative — это основанная на Kubernetes платформа для построения, развертывания и управления современными serverless рабочими нагрузками. В Knative есть три ключевых функции, которые помогают выполнять его serverless-миссию:
- Build — предоставляет простые в использовании сборки из исходных текстов в контейнеры. Вы выигрываете, применяя стандартные механизмы и конструкции построения.
- Serving — Knative заботится о деталях работы в сети, автомасштабировании (даже до нуля) и отслеживании версий. Вам необходимо лишь сконцентрироваться на основной логике.
- Eventing — универсальная подписка, доставка и управление событиями. Вы можете создавать современные приложения, прикрепляя к потоку данных контейнеры с декларативной связью событий и удобной для разработчиков объектной моделью.
Что такое Serverless?
Serverless-вычисления — это стиль вычислений, который упрощает написание и поддержку исходного кода, отделяя создание кода от его упаковки и развертывания. Иными словами, можно считать синонимом бессерверных вычислений функцию как услуги (FaaS).
Serverless имеет, по крайней мере, три части, и, следовательно, может означать что-то различное в зависимости от вашей сущности и того, на какую часть вы смотрите — инфраструктуру, используемую для выполнения вашего кода, структуру и инструменты (промежуточное ПО), которые скрывают инфраструктуру, и ваш код, который может быть соединен с промежуточным ПО. На практике бессерверные вычисления могут обеспечить более быстрый и легкий путь к созданию микроуслуг. Вы сможете осуществлять трудоемкое масштабирование, мониторинг и контроль доступности облачных сервисов.
Почему важен serverless?
В двух словах: производительность и скорость инноваций. Serverless может помочь вашим разработчикам и операционным командам стать более продуктивными. Такие сотрудники счастливее, они быстрее внедряют инновации. Как это достигается на практике? Как бессерверное управление помогает повысить производительность?
Прежде чем я опишу идею бессерверного решения, я должен отметить, какие могут возникнуть трудности. Как и в любой новой парадигме, некоторые аспекты вычислений становятся проще, а другие — сложнее. Что проще? Акт построения и внедрения программного обеспечения. Что сложнее? Теперь у вас будет гораздо больше функций для мониторинга и управления. Убедитесь, что преимущества превышают недостатки, прежде чем приступать к крупномасштабному проекту.
Как это работает?
Knative использует расширенные возможности на Kubernetes. Пользовательские ресурсы (CR) — это распространенный способ расширения Kubernetes. Они позволяют определять новые ресурсы в Kubernetes и регистрировать операции для отслеживания событий, связанных с этими ресурсами.
В дополнение к определению собственных ресурсов, Knative использует Istio для того, чтобы задействовать некоторые из его возможностей, в первую очередь, обслуживания и событий. Для быстрого ознакомления с документацией, посмотрите здесь для сёрвинга, а здесь для эвентов.
Начинаем работу Knative на Ubuntu с MicroK8s
Независимо от используемой настольной или серверной операционной системы, я предпочитаю использовать multiass для быстрой настройки ВМ Ubuntu. Есть несколько причин для использования ВМ Ubuntu:
- Эти инструкции полезнее, чем другие.
- Все установленное программное обеспечение ограничено виртуальной машиной (ВМ)
- Это означает, что вы можете легко удалить все, удалив ВМ, или вы можете остановить ВМ, которая прекратит работу всех связанные с ней запущенных процессов
- Эти инструкции будут работать в любой ВМ — на вашем ноутбуке или в облаке.
- Вы можете ограничить потребляемые ресурсы. Это важно — если вы включите динамический мониторинг, будет потребляться гораздо больше памяти и процессорной мощности, из-за чего система станет перегруженной
MicroK8s имеет встроенную поддержку Knative и является лучшим инструментом для начала работы со всеми компонентами Knative — построение, обслуживание, eventing, мониторинг. Однако, для большего контроля над версией Knative и/или компонентами существуют отдельные инструкции. В кастомном варианте мы не устанавливаем компоненты мониторинга, что позволяет сэкономить около 6Гб памяти.
a. Создайте ВМ
Используйте multipass для создания виртуальной машины Ubuntu. Это работает на Windows, Mac и Linux после установки multipass. В качестве альтернативы запустите VM ubuntu в выбранной среде, такой как AWS, GCP, Azure, OpenStack и др. памяти.
multipass launch --mem 10G --cpus 6 --disk 20G --name knative
multipass shell knative
b. Установите Microk8s
sudo snap install --classic microk8s
microk8s.status --wait-ready
sudo snap alias microk8s.kubectl kubectl
c. Установите Knative (целиком)
В результате будет установлена стандартная версия MicroK8s и конфигурация Knative, включая все компоненты Knative. Пропустите этот шаг, если вы хотите настроить установку, выбрав собственную версию или набор компонентов.
# This is all you need!
echo 'N;' | microk8s.enable knative
# check status of knative pods
kubectl get pods -n knative-serving
kubectl get pods -n knative-build
kubectl get pods -n knative-eventing
kubectl get pods -n knative-monitoring
# You can review Knative version, and configuration, by looking at the configuration files.
# Here's an example for Knative serving.
cat /snap/microk8s/current/actions/knative/serving.yaml
d. Установите Knative (кастомный)
Выберите этот способ для более строгого контроля над версией Knative и/или компонентами.
######################
# Install Istio first
######################
echo 'N;' | microk8s.enable istio
# Ensure Istio is running before proceeding
# All pods should be either 'running' or completed
kubectl get pods -n istio-system
######################
# Install Knative - select version and components
######################
export KNATIVE_071=releases/download/v0.7.1
export KNATIVE_070=releases/download/v0.7.0
export KNATIVE_URL=https://github.com/knative
# if you see errors, re-run next command
kubectl apply --selector knative.dev/crd-install=true \
--filename ${KNATIVE_URL}/serving/${KNATIVE_071}/serving.yaml \
--filename ${KNATIVE_URL}/build/${KNATIVE_070}/build.yaml \
--filename ${KNATIVE_URL}/eventing/${KNATIVE_071}/release.yaml \
--filename ${KNATIVE_URL}/serving/${KNATIVE_071}/monitoring.yaml
# After this command, total of ~5G of disk and ~2G of memory used
kubectl apply \
--filename ${KNATIVE_URL}/serving/${KNATIVE_071}/serving.yaml \
--filename ${KNATIVE_URL}/build/${KNATIVE_070}/build.yaml \
--filename ${KNATIVE_URL}/eventing/${KNATIVE_071}/release.yaml
# ensure all pods are running
kubectl get pods -n knative-serving
kubectl get pods -n knative-build
kubectl get pods -n knative-eventing
############
# Monitoring wasn't installed, but you can install it with this command
# Note: it will consume about 6GB more memory and additional CPU
############
kubectl apply \
--filename ${KNATIVE_URL}/serving/${KNATIVE_071}/monitoring.yaml
# check that all monitoring pods are running
kubectl get pods -n knative-monitoring
e. Hello World
Здесь вы можете поэкспериментировать с несколькими примерами Hello World в Knative. Каждый компонент — сборка, доставка, события — может использоваться самостоятельно. На данный момент в примерах с сервисами используются локальные (docker) сборки, а не knative сборки. Почему? Локальный билд все еще несколько проще, чем knative билд. Предполагаю, что со временем это изменится и появится оптимальная интеграция между компонентами. В следующем материале мы опишем полное решение, которое основано только на knative. Вы на конкретном примере увидите\, как использовать knative для сборки и обслуживания простой функции, а также создавать локальный контейнерный репозиторий для размещения образов.
А пока чтобы протестировать простой пример, просмотрите Hello world. Если вы предпочитаете Java и Spark, попробуйте пример helloworld-java-spark на github.
f. Краткое описание этапов
############
# Launch a VM capable of running all four components of knative
############
multipass launch --mem 10G --cpus 6 --disk 20G --name knative
multipass shell knative
############
# Install MicroK8s
############
sudo snap install --classic microk8s
microk8s.status --wait-ready
sudo snap alias microk8s.kubectl kubectl
############
# Install Knative - everything
# NOTE: for customer Knative install, skip this step
############
echo 'N;' | microk8s.enable knative
############
# --OR-- Install custom Knative
############
# Install Istio
echo 'N;' | microk8s.enable istio
# check status of istio pods
kubectl get pods -n istio-system
# Install essential components of knative
export KNATIVE_071=releases/download/v0.7.1
export KNATIVE_070=releases/download/v0.7.0
export KNATIVE_URL=https://github.com/knative
# if you see errors, re-run next command as is
kubectl apply --selector knative.dev/crd-install=true \
--filename ${KNATIVE_URL}/serving/${KNATIVE_071}/serving.yaml \
--filename ${KNATIVE_URL}/build/${KNATIVE_070}/build.yaml \
--filename ${KNATIVE_URL}/eventing/${KNATIVE_071}/release.yaml \
--filename ${KNATIVE_URL}/serving/${KNATIVE_071}/monitoring.yaml
# After this command, total of ~5G of disk and ~2G of memory used
kubectl apply \
--filename ${KNATIVE_URL}/serving/${KNATIVE_071}/serving.yaml \
--filename ${KNATIVE_URL}/build/${KNATIVE_070}/build.yaml \
--filename ${KNATIVE_URL}/eventing/${KNATIVE_071}/release.yaml
# ensure all pods are running
kubectl get pods -n knative-serving
kubectl get pods -n knative-build
kubectl get pods -n knative-eventing
############
# Install Monitoring if needed .. extra 6GB of memory required
############
kubectl apply \
--filename ${KNATIVE_URL}/serving/${KNATIVE_071}/monitoring.yaml
# check that all monitoring pods are running
kubectl get pods -n knative-monitoring
Следующие шаги
Мы только познакомились Knative. Следующие публикации будут посвящены основным особенностям Knative. Материалы будут включать в себя руководства по работе с MicroK8 и Knative. Эта комбинация отлично подходит для локальных испытаний, разработки и как часть вашего конвейера непрерывной интеграции.