Как начать работу с serverless вычислениями с помощью Knative
О технологиях

Как начать работу с serverless вычислениями с помощью Knative

849
13 минут

Что такое 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:

  1. Эти инструкции полезнее, чем другие.
  2. Все установленное программное обеспечение ограничено виртуальной машиной (ВМ)
  3. Это означает, что вы можете легко удалить все, удалив ВМ, или вы можете остановить ВМ, которая прекратит работу всех связанные с ней запущенных процессов
  4. Эти инструкции будут работать в любой ВМ — на вашем ноутбуке или в облаке.
  5. Вы можете ограничить потребляемые ресурсы. Это важно — если вы включите динамический мониторинг, будет потребляться гораздо больше памяти и процессорной мощности, из-за чего система станет перегруженной

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. Эта комбинация отлично подходит для локальных испытаний, разработки и как часть вашего конвейера непрерывной интеграции.

20 ноября 2023
Что такое Kubernetes? Знакомимся с дико популярной платформой контейнерной оркестрации
С появлением микросервисной архитектуры и технологии контейнеризации разработчики и администраторы стали совсем по-другому тестировать и развертывать современное ПО.
1 минута
3770
19 июня 2023
Семь трендов на рынке облачных услуг в 2023 году
До 2022 года на рынке облаков в России главенствовали мировые тренды, но сейчас наша страна пошла своим путем. О том, для чего сейчас компании используют облачные технологии и как меняется рынок, рассказал директор бизнес-юнита K2 Cloud Сергей Зинкевич.
1 минута
1021
29 марта 2023
Сетевые балансировщики нагрузки и другие обновления К2 Облака

Мы рады вам представить новый сервис K2 Облака для распределения трафика между экземплярами – Балансировщики нагрузки. Кроме того, мы автоматизировали обновление сертификатов Kubernetes и добавили возможность удаления рабочих узлов из кластера Kubernetes.

2 минуты
320
12 января 2023
Российский Kubernetes, какой он? Знакомьтесь, платформа Deckhouse

Если бизнес работает в цифре, строит свои решения на базе микросервисной архитектуры и контейнеров и до последнего времени использовал для этого западную платформу контейнеризации, то актуальная задача сегодня — найти ей адекватную замену.

2 минуты
1568
26 декабря 2022
Что выгоднее — использовать готовую платформу для управления контейнерами или разрабатывать своими силами?
Совсем недавно мы провели опрос среди ИТ-руководителей, чтобы выяснить, насколько они знакомы с технологией Kubernetes и используют ли ее в ИТ-инфраструктуре своей компании, личных проектах и т.д. Результаты показали, что 63% опрошенных уже работает с Kubernetes прямо сейчас, 23% пока не дошли и 14% участников планируют в ближайшее время.
1 минута
551
scrollup