
Knative — это основанная на Kubernetes платформа для построения, развертывания и управления современными serverless рабочими нагрузками.
В Knative есть три ключевых функции, которые помогают выполнять его serverless-миссию:
Serverless-вычисления — это стиль вычислений, который упрощает написание и поддержку исходного кода, отделяя создание кода от его упаковки и развертывания. Иными словами, можно считать синонимом бессерверных вычислений функцию как услуги (FaaS).
Serverless имеет, по крайней мере, три части, и, следовательно, может означать что-то различное в зависимости от вашей сущности и того, на какую часть вы смотрите — инфраструктуру, используемую для выполнения вашего кода, структуру и инструменты (промежуточное ПО), которые скрывают инфраструктуру, и ваш код, который может быть соединен с промежуточным ПО. На практике бессерверные вычисления могут обеспечить более быстрый и легкий путь к созданию микроуслуг. Вы сможете осуществлять трудоемкое масштабирование, мониторинг и контроль доступности облачных сервисов.
В двух словах: производительность и скорость инноваций. Serverless может помочь вашим разработчикам и операционным командам стать более продуктивными. Такие сотрудники счастливее, они быстрее внедряют инновации. Как это достигается на практике? Как бессерверное управление помогает повысить производительность?
Прежде чем я опишу идею бессерверного решения, я должен отметить, какие могут возникнуть трудности. Как и в любой новой парадигме, некоторые аспекты вычислений становятся проще, а другие — сложнее. Что проще? Акт построения и внедрения программного обеспечения. Что сложнее? Теперь у вас будет гораздо больше функций для мониторинга и управления. Убедитесь, что преимущества превышают недостатки, прежде чем приступать к крупномасштабному проекту.
Knative использует расширенные возможности на Kubernetes. Пользовательские ресурсы (CR) — это распространенный способ расширения Kubernetes. Они позволяют определять новые ресурсы в Kubernetes и регистрировать операции для отслеживания событий, связанных с этими ресурсами.
В дополнение к определению собственных ресурсов, Knative использует Istio для того, чтобы задействовать некоторые из его возможностей, в первую очередь, обслуживания и событий. Для быстрого ознакомления с документацией, посмотрите здесь для сёрвинга, а здесь для эвентов.
Независимо от используемой настольной или серверной операционной системы, я предпочитаю использовать multiass для быстрой настройки ВМ Ubuntu. Есть несколько причин для использования ВМ Ubuntu:
MicroK8s имеет встроенную поддержку Knative и является лучшим инструментом для начала работы со всеми компонентами Knative — построение, обслуживание, eventing, мониторинг. Однако, для большего контроля над версией Knative и/или компонентами существуют отдельные инструкции. В кастомном варианте мы не устанавливаем компоненты мониторинга, что позволяет сэкономить около 6Гб памяти.
Используйте 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
sudo snap install --classic microk8s
microk8s.status --wait-ready
sudo snap alias microk8s.kubectl kubectlВ результате будет установлена стандартная версия 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
Выберите этот способ для более строгого контроля над версией 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
Здесь вы можете поэкспериментировать с несколькими примерами Hello World в Knative. Каждый компонент — сборка, доставка, события — может использоваться самостоятельно. На данный момент в примерах с сервисами используются локальные (docker) сборки, а не knative сборки. Почему? Локальный билд все еще несколько проще, чем knative билд. Предполагаю, что со временем это изменится и появится оптимальная интеграция между компонентами. В следующем материале мы опишем полное решение, которое основано только на knative. Вы на конкретном примере увидите\, как использовать knative для сборки и обслуживания простой функции, а также создавать локальный контейнерный репозиторий для размещения образов.
А пока чтобы протестировать простой пример, просмотрите Hello world. Если вы предпочитаете Java и Spark, попробуйте пример helloworld-java-spark на github.
Мы только познакомились Knative. Следующие публикации будут посвящены основным особенностям Knative. Материалы будут включать в себя руководства по работе с MicroK8 и Knative. Эта комбинация отлично подходит для локальных испытаний, разработки и как часть вашего конвейера непрерывной интеграции.