Автор выбрал Фонд открытого Интернета/Свободы слова для получения пожертвования в рамках программы Write for DOnations.
Введение
Kubernetes — это мощный инструмент оркестрации контейнеров, который позволяет развертывать контейнерные приложения и управлять ими, но иногда для управления базовой инфраструктурой может потребоваться время. Бессерверная парадигма помогает пользователям развертывать приложения, не беспокоясь о базовой инфраструктуре. С появлением Serverless 2.0 многие платформы и инструменты теперь позволяют развертывать бессерверные приложения в Kubernetes.
Knative — это платформа на базе Kubernetes, которая предоставляет компоненты для развертывания и управления бессерверными рабочими нагрузками. Knative предлагает интеграцию Kubernetes с открытым исходным кодом, облачную агностицизм, строительные блоки и расширяемость. Такие инструменты, как Openshift от Red Hat, также используют Knative, чтобы пользователи могли развертывать свои бессерверные рабочие нагрузки поверх Kubernetes.
В Knative есть два основных компонента: Eventing и Serving. Eventing управляет событиями, которые запускают бессерверные рабочие нагрузки. Обслуживание — это набор компонентов для развертывания и управления бессерверными рабочими нагрузками. Knative Serving позволяет разработчикам развертывать бессерверные приложения и управлять ими поверх Kubernetes. С помощью Knative Serving разработчики могут быстро и легко развертывать новые сервисы, масштабировать их вверх и вниз и подключать к другим сервисам и источникам событий. Эта функция позволяет разработчикам создавать и развертывать современные облачные приложения, которые являются гибкими, масштабируемыми и простыми в обслуживании.
В этом руководстве вы будете использовать Knative Serving для развертывания приложения Node.js в качестве бессерверной рабочей нагрузки в кластере DigitalOcean Kubernetes. Вы будете использовать doctl
(CLI DigitalOcean) и kn
(CLI Knative) для создания кластера Kubernetes и развертывания приложения.
Предварительные условия
Чтобы выполнить это руководство, вам понадобится следующее:
- Учетная запись DigitalOcean, которую вы будете использовать для запуска кластера Kubernetes с объемом оперативной памяти не менее 4 ГБ и двумя ядрами ЦП. Если у вас его нет, зарегистрируйте новую учетную запись. Эта установка будет использовать кластер DigitalOcean Kubernetes. Чтобы создать кластер Kubernetes в облачной панели DigitalOcean, ознакомьтесь с нашим кратким руководством по Kubernetes.
- Чтобы следовать этому руководству с удаленного сервера, вы можете настроить сервер Ubuntu 22.04 с пользователем без полномочий root и брандмауэром, выполнив нашу первоначальную настройку сервера. Чтобы начать работу с дроплетом DigitalOcean, вы можете воспользоваться нашим кратким руководством по дроплету.
- Клиент командной строки DigitalOcean,
doctl
, установленный на вашем компьютере. Рекомендуется использовать вариант GitHub Download . Дополнительную информацию об использовании doctl см. в разделе «Как использоватьdoctl
. -
kubectl
установленный на вашем компьютере, который вы можете настроить с помощью документации по установке Kubernetes. - На вашем компьютере установлен Docker, который вы можете настроить, выполнив шаги 1 и 2 нашего руководства по установке и использованию Docker.
- Пример приложения Node.js, настроенный в соответствии с руководством «Как создать приложение Node.js с помощью Docker» для создания приложения и отправки его образа контейнера в Docker Hub.
- Учетная запись в Docker Hub для хранения образов Docker, которую вы создадите в ходе этого руководства.
Шаг 1 — Запуск кластера DigitalOcean Kubernetes
Поскольку Knative — это платформа на базе Kubernetes, вы будете использовать ее с кластером Kubernetes в DigitalOcean. Существует несколько способов запустить кластер Kubernetes в DigitalOcean. Вы можете использовать интерфейс DigitalOcean Cloud, интерфейс командной строки DigitalOcean или поставщика Terraform.
В этом руководстве вы будете использовать doctl
, клиент командной строки DigitalOcean, для запуска кластера Kubernetes. Если вы еще не установили doctl
, следуйте инструкциям в официальном руководстве по установке.
Чтобы эффективно использовать Knative в этом руководстве, вам понадобится кластер Kubernetes как минимум с 4GB RAM и 2 CPU cores . Вы можете запустить кластер с именем knative-tutorial
с этими спецификациями, выполнив команду doctl
со следующими флагами:
-
--size
указывает размер удаленного сервера. -
--count
указывает количество узлов, которые будут созданы как часть кластера.
Чтобы создать кластер DigitalOcean Kubernetes, выполните следующую команду:
1 |
<ol><li data-prefix="$"> doctl создание кластера Kubernetes<mark> Knative-учебник</mark> <span class="token parameter variable">--size</span> s-2vcpu-4 ГБ <span class="token parameter variable">--count</span> <span class="token number">3</span></li></ol> |
С помощью этой команды вы создаете кластер с именем knative-tutorial
с size
4 ГБ ОЗУ, 2 ядрами ЦП и count
узлов 3
.
Note: Вы также можете использовать флаг --region
, чтобы указать, в каком регионе будет расположен сервер, хотя в этом руководстве этот параметр не используется. Если вы используете удаленный сервер, например Droplet, возможно, вы захотите разместить свой кластер в том же регионе, что и сервер. Если вы используете панель управления DigitalOcean для создания кластера, вы можете выбрать регион центра обработки данных и сеть VPC. Для получения дополнительной информации о региональной доступности DigitalOcean вы можете обратиться к нашей Матрице региональной доступности.
Выполнение этой команды займет несколько минут. По его завершении вы получите сообщение, подобное следующему:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Примечание. Кластер инициализируется и ожидает запуска кластера......................... ............. Примечание. Кластер создан, получение учетных данных. Примечание. Добавление учетных данных кластера в файл kubeconfig, расположенный в «/home/sammy/.kube/config». : Установка текущего контекста для do-nyc1-knative-tutorial ID Имя Регион Версия Статус автоматического обновления Пулы узлов d2d1f9bc-114b-45e7-b109-104137f9ab62<mark> Knative-учебник</mark> nyc1 1.24.4-do.0 ложный запуск knative-tutorial-default-pool
Теперь кластер готов к использованию.
Теперь вы можете проверить, настроен ли kubectl
в вашей системе и может ли он получить доступ к кластеру DigitalOcean Kubernetes, с помощью следующей команды:
1
<ol><li data-prefix="$"> информация о кластере kubectl</li></ol>
Вы должны получить аналогичный вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Плоскость управления Kubernetes работает на<mark> https://69de217e-0284-4e18-a6d7-5606915a4e88.k8s.ondigitalocean.com</mark> CoreDNS работает на<mark> https://69de217e-0284-4e18-a6d7-5606915a4e88.k8s.ondigitalocean.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy</mark>
Поскольку в выводе перечислены URL-адреса control plane
и службы CoreDNS
(выделены в блоке вывода), вы знаете, что kubectl
правильно настроен в вашей системе и может связаться с кластером.
В рамках процесса создания кластера doctl
автоматически настраивает контекст kubectl
для использования нового кластера. Вы можете убедиться в этом, выполнив следующую команду:
1
<ol><li data-prefix="$"> конфигурация kubectl текущий контекст</li></ol>
Эта команда вернет имя текущего контекста.
Вы должны получить следующий вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div><mark> do-nyc1-knative-учебник</mark>
Вывод указывает, что текущий контекст — do-nyc1-knative-tutorial
, который представляет собой имя созданного вами кластера с указанием региона, в котором он расположен ( nyc1
).
Вы также можете проверить, что кластер работает и узлы готовы принимать рабочие нагрузки с помощью этой команды:
1
<ol><li data-prefix="$"> kubectl получить узлы</li></ol>
Команда kubectl get nodes
выводит список всех узлов в кластере, а также их статус и другую информацию.
Вы должны получить следующий вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> ИМЯ СТАТУС РОЛЬ ВОЗРАСТ ВЕРСИЯ do-nyc1-knative-tutorial-159783000-0v9k5 Готово <нет> 2m52s v1.24.4 do-nyc1-knative-tutorial-159783000-1h4qj Готово <нет> 2m52s v1.24.4 do-nyc1-knative-tutorial -159783000-1q9qf Готов <нет> 2m52s v1.24.4
В выходных данных указано, что в кластере есть три узла, готовых принимать рабочие нагрузки.
На этом этапе вы запустили кластер Kubernetes в DigitalOcean. Теперь вы можете установить Knative для развертывания бессерверной рабочей нагрузки в Kubernetes.
Шаг 2 — Установка Knative Serving
На этом этапе вы установите Knative Serving в свой кластер Kubernetes. Knative Serving отвечает за развертывание и управление вашими бессерверными рабочими нагрузками.
Чтобы установить Knative Serving, вам потребуются основные компоненты Knative и специальные ресурсы. Запустите эти команды, чтобы установить основные компоненты:
1
<ol><li data-prefix="$"> kubectl apply <span class="token parameter variable">-f</span> https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-crds.yaml</li><li data-prefix="$"> kubectl apply <span class="token parameter variable">-f</span> https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-core.yaml</li></ol>
Команда kubectl apply
устанавливает основные компоненты Knative и пользовательские ресурсы в ваш кластер. Флаг -f
указывает файл, содержащий изменения конфигурации. В этом случае изменения конфигурации находятся в файлах YAML, которые вы загружаете из репозитория Knative.
Выполнение этих команд займет несколько минут. Вы получите следующий вывод (вывод ниже сокращен для краткости):
1
<div class="secondary-code-label" title="Выход"> Выход</div> customresourcedefinition.apiextensions.k8s.io/certificates.networking.internal.knative.dev создал customresourcedefinition.apiextensions.k8s.io/clusteringresses.networking.internal.knative.dev создал customresourcedefinition.apiextensions.k8s.io/configurations.serving.knative. dev создал customresourcedefinition.apiextensions.k8s.io/images.caching.internal.knative.dev создал customresourcedefinition.apiextensions.k8s.io/ingresses.networking.internal.knative.dev создал ...
Этот вывод указывает на то, что основные компоненты Knative и пользовательские ресурсы находятся в вашем кластере. Все компоненты находятся в пространстве имен knative-serving
.
После завершения загрузки вы можете убедиться, что Knative Serving установлен:
1
<ol><li data-prefix="$"> kubectl get pods <span class="token parameter variable">--namespace</span> knative-serving</li></ol>
Команда kubectl get pods
получит список всех модулей, запущенных в кластере в пространстве имен knative-serving
. Эта команда определяет модули в вашем кластере, их текущий статус, количество контейнеров в модуле и имена контейнеров в определенном пространстве имен.
Вы должны получить аналогичный вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКАЕТ ВОЗРАСТ activator-5f6b4bf5c8-kfxrv 1/1 Выполняется 0 4m37s autoscaler-bc7d6c9c9-v5jqt 1/1 Выполняется 0 4m34s контроллер-687d88ff56-9g4gz 1/1 Выполняется 0 4m32s domain-mapping-69cc86d8d5-k r57g 1/1 Бег 0 4m29s domainmapping-webhook-65dfdd9b96-nzs9c 1/1 Выполняется 0 4m27s net-kourier-controller-55c99987b4-hkfpl 1/1 Выполняется 0 3m49s webhook-587cdd8dd7-qbb9b 1/1 Выполняется 0 4m22s
В выводе отображаются все модули, работающие в пространстве имен knative-serving
. Модули отвечают за различные компоненты Knative Serving.
Knative требует сетевого уровня для маршрутизации входящего трафика к вашим сервисам. Сетевой уровень в Knative позволяет развертывать и обмениваться микросервисами в распределенной среде. Knative Serving поддерживает Istio, Contour и Kourier в качестве сетевого уровня.
В этом руководстве вы будете использовать Kourier в качестве сетевого уровня, поскольку он легко интегрируется с Knative. Kourier использует те же API и стандарты, что и остальная часть экосистемы Knative, что делает его хорошим вариантом для разработчиков и организаций, уже использующих Knative и желающих извлечь выгоду из его мощных сетевых возможностей.
Установите Kourier с помощью этой команды:
1
<ol><li data-prefix="$"> kubectl apply <span class="token parameter variable">-f</span> https://github.com/knative/net-kourier/releases/download/knative-v1.8.0/kourier.yaml</li></ol>
Вы должны получить следующий вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> namespace/kourier-system настроено configmap/kourier-bootstrap настроено configmap/config-kourier настроено serviceaccount/net-kourier настроеноusterrole.rbac.authorization.k8s.io/net-kourier настроеноusterrolebinding.rbac.authorization.k8s.io/net- настроенный kourier развертывание.apps/net-kourier-controller настроенный сервис/net-kourier-controller настроенный развертывание.apps/3scale-kourier-gateway настроенный сервис/настроенный сервис kourier/kourier-internal настроенный
В выходных данных перечислены все ресурсы, такие как Namespaces
и ConfigMaps
, созданные в рамках процесса установки Kourier в кластере Kubernetes.
Чтобы настроить Knative для использования Kourier в качестве сетевого уровня, вы отредактируете ConfigMap config-network
.
Для этого вам нужно использовать команду kubectl patch
для обновления полей объекта в кластере Kubernetes. Вам также придется включить некоторые флаги в эту команду:
-
--namespace
указывает, где вы можете найти объект, который хотите исправить.
-
--type
указывает, какой патч выполнять при применении конфигураций с помощью команды patch
. Доступные типы: json
, merge
и strategic
.
-
--patch
указывает данные исправления непосредственно в командной строке, а не в файле.
Запустите эту команду со связанными флагами:
1
<ol><li data-prefix="$"> kubectl патч configmap/config-network <span class="token punctuation"></span></li><li data-prefix="$"> <span class="token parameter variable">--namespace</span> knative-serving <span class="token punctuation"></span></li><li data-prefix="$"> <span class="token parameter variable">--type</span> объединить <span class="token punctuation"></span></li><li data-prefix="$"> <span class="token parameter variable">--patch</span> <span class="token string">'{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'</span></li></ol>
Команда kubectl patch
исправляет configmap/config-network
, присваивая namespace
knative-serving
и type
merge
.
Тип исправления merge
позволяет выполнять более целевые обновления, тогда как типы исправлений json
или strategic
обновления позволяют выполнять более комплексные обновления. Тип исправления merge
указывает отдельные поля для обновления без включения всей конфигурации ресурса в команду исправления, как в случае с другими типами. Исправляемые данные идентифицируются флагом patch
.
Вы должны получить следующий вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> configmap/config-network исправлено
Вывод этой команды гарантирует, что Kourier правильно настроен в кластере.
Наконец, получите внешний IP-адрес балансировщика нагрузки Kourier с помощью следующей команды:
1
<ol><li data-prefix="$"> kubectl get svc kourier <span class="token parameter variable">--namespace</span> kourier-system</li></ol>
Команда kubectl get svc
получает информацию о сервисах, запущенных в кластере Kubernetes в указанном пространстве имен (в данном случае kourier-system
). Эта команда выведет список всех служб в кластере с указанием связанных с ними IP-адресов и номеров портов.
Вы должны получить следующий вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> НАЗВАНИЕ ТИП КЛАСТЕР-IP ВНЕШНИЙ IP-ПОРТЫ ВОЗРАСТ курьер LoadBalancer<mark> 10.245.186.153</mark><mark> 138.197.231.61</mark> 80:31245/TCP,443:30762/TCP 2м33с
Вывод команды включает имя службы, тип службы (например, ClusterIP
, NodePort
и т. д.), IP-адрес кластера и номер порта, а также внешний IP-адрес и номер порта. Числа, перечисленные здесь, являются примерами, поэтому в результатах будут отображаться разные числа.
Подготовка балансировщика нагрузки может занять несколько минут. Вы можете увидеть пустое значение или
для поля EXTERNAL-IP
. В этом случае подождите несколько минут и повторите команду.
Note: Прежде чем продолжить работу с этим руководством, вам потребуется подготовить балансировщик нагрузки. После заполнения поля EXTERNAL-IP
для LoadBalancer
вы можете продолжить. В противном случае у вас могут возникнуть проблемы при настройке службы DNS.
Вы также можете настроить DNS для вашего доменного имени, чтобы он указывал на внешний IP-адрес балансировщика нагрузки. Knative предоставляет задание Kubernetes под названием default-domain
, которое автоматически настраивает Knative Serving для использования sslip.io
в качестве DNS-суффикса по умолчанию.
sslip.io
— это служба динамического DNS (системы доменных имен), которая позволяет пользователям получать доступ к своим устройствам, используя собственное доменное имя вместо IP-адреса. Использование sslip.io
улучшает удаленный доступ пользователей к своим устройствам без необходимости запоминать сложные IP-адреса.
Чтобы настроить DNS-суффикс по умолчанию, вам необходимо выполнить следующую команду:
1
<ol><li data-prefix="$"> kubectl apply <span class="token parameter variable">-f</span> https://github.com/knative/serving/releases/download/knative-v1.8.0/serving-default-domain.yaml</li></ol>
Вы получите следующий результат:
1
<div class="secondary-code-label" title="Выход"> Выход</div> job.batch/настроенный сервис домена по умолчанию/настроенный сервис домена по умолчанию
Ресурсы, необходимые для запуска службы Magic DNS, успешно настроены.
Note: При желании вы также можете добавить домен, но это выходит за рамки данной статьи. Вам необходимо настроить поставщика DNS (например, Cloud DNS или Route53) и создать запись A для входного шлюза Knative, которая сопоставлена с IP-адресом вашего кластера Knative. Затем вы обновите конфигурацию входного шлюза Knative, чтобы использовать зону DNS и созданную вами запись A. Вы можете проверить конфигурацию DNS, получив доступ к обслуживающему домену Knative и убедившись, что он разрешается во входной шлюз.
Теперь вы успешно установили Knative Serving в свой кластер Kubernetes. Теперь вы можете развернуть бессерверную рабочую нагрузку с помощью Knative Serving в своем кластере Kubernetes.
Шаг 3. Развертывание бессерверной рабочей нагрузки
На этом этапе вы развернете бессерверную рабочую нагрузку поверх Knative, который в настоящее время работает в вашем кластере Kubernetes. Вы будете использовать приложение Node.js, которое вы создали в рамках предварительных условий.
Прежде чем продолжить, вы создадите новое namespace
для развертывания бессерверной рабочей нагрузки. Вы можете сделать это, выполнив следующую команду:
1
<ol><li data-prefix="$"> kubectl создать пространство имен<mark> бессерверная рабочая нагрузка</mark></li></ol>
Эта команда создаст новое пространство имен под названием serverless-workload
.
Вы должны получить следующий вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> настроено пространство имен/бессерверная рабочая нагрузка
Вывод гарантирует, что пространство имен было успешно создано.
Knative Serving использует специальный ресурс под названием Service
для развертывания и управления бессерверными рабочими нагрузками. Ресурс Service
определяется Knative Serving API.
Как только вы создадите или измените ресурс Service
, Knative Serving автоматически создаст новую Revision
. Revision
— это моментальный снимок вашей рабочей нагрузки на определенный момент времени.
Всякий раз, когда создается новая Revision
, трафик будет направляться к новой Revision
по Route
. Knative Serving автоматически создает Route
для каждой службы. Вы можете получить доступ к своей рабочей нагрузке, используя доменное имя из Route
.
Чтобы развернуть бессерверную рабочую нагрузку на Knative, необходимо создать ресурс Service
. Вы можете добиться этого двумя разными способами:
- Используя
kn
, официальный инструмент Knative CLI.
- Использование инструмента командной строки
kubectl
для применения файлов YAML к вашему кластеру Kubernetes.
В следующих подразделах вы будете использовать каждый из этих методов.
Вариант 1 — Использование Knative CLI
Knative CLI, kn
, представляет собой интерфейс командной строки, позволяющий взаимодействовать с Knative.
Сначала установите kn
, загрузив последнюю версию двоичного файла Knative CLI:
1
<ol><li data-prefix="$"> <span class="token function">wget</span> https://github.com/knative/client/releases/download/knative-v1.8.1/kn-linux-amd64</li></ol>
Команда wget
получит инструмент.
Затем переместите двоичный файл в папку kn
:
1
<ol><li data-prefix="$"> <span class="token function">МВ</span> КН-Linux-AMD64 КН</li></ol>
Затем сделайте его исполняемым с помощью следующей команды:
1
<ol><li data-prefix="$"> <span class="token function">chmod</span> +x кн</li></ol>
Наконец, переместите исполняемый двоичный файл в каталог по вашему PATH
:
1
<ol><li data-prefix="$"> <span class="token function">cp</span> kn /usr/local/bin/</li></ol>
Убедитесь, что kn
установлен:
1
<ol><li data-prefix="$"> кн-версия</li></ol>
Вы должны получить аналогичный вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Версия: v1.8.1 Дата сборки: 20 октября 2022 г., 16:09:37 Версия Git: 1db36698 Поддерживаемые API: * Обслуживание —serving.knative.dev/v1 (knative-serving v1.8.0) * Обработка событий — source.knative. dev/v1 (knative-eventing v1.8.0) - eventing.knative.dev/v1 (knative-eventing v1.8.0)
В выводе этой команды указано, что kn
установлен.
Чтобы развернуть приложение Node.js с помощью kn
, вы будете использовать команду kn service create
. С помощью этой команды вы добавите несколько флагов:
-
--image
указывает образ контейнера, который вы хотите развернуть.
-
--port
указывает порт, который прослушивает ваше приложение.
-
--name
указывает имя Service
, которую вы хотите создать.
-
--namespace
указывает пространство имен, в котором вы хотите развернуть рабочую нагрузку.
Чтобы развернуть приложение Node.js, выполните следующую команду и обновите выделенную часть своим именем пользователя DockerHub:
1
<ol><li data-prefix="$"> <span class="token function">служба</span> kn создания узла-службы <span class="token punctuation"></span></li><li data-prefix="$"> <span class="token parameter variable">--изображение</span><mark> ваше_dockerhub_имя_пользователя</mark> /nodejs-image-demo <span class="token punctuation"></span></li><li data-prefix="$"> <span class="token parameter variable">--порт</span> <span class="token number">8080</span> <span class="token punctuation"></span></li><li data-prefix="$"> <span class="token parameter variable">--namespace</span> бессерверная рабочая нагрузка</li></ol>
Команда kn service
создает Knative Service с именем node-service
с port
, установленным на 8080
, и флагом namespace
, установленным на serverless-workload
. Флаг image
указывает расположение контейнера приложения, загруженного в Dockerhub.
Вы должны получить следующий вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Создание службы «node-service» в пространстве имен «serverless-workload»: 0,236 с. Конфигурация «node-service» ожидает готовности версии. 2.230с... 2.311с Вход еще не согласован. 2,456 с. Ожидание готовности балансировщика нагрузки. 2,575 с. Готов к работе. Сервис node-service, созданный в последней версии node-service-00001, доступен по URL: http://node-service.serverless-workload.138.197.231.61.sslip.io.
Эти выходные данные предоставляют статус создания Service
Knative. После создания Service
вы найдете URL-адрес Route
, связанного с Service
.
Выполните следующую команду, чтобы убедиться, что ресурс Service
создан:
1
<ol><li data-prefix="$"> список <span class="token function">служб</span> kn <span class="token parameter variable">--namespace</span> serverless-workload</li></ol>
Команда kn service list
перечисляет все службы, развернутые в настоящее время с помощью Knative Serving в определенном пространстве имен в кластере Kubernetes. Эта команда позволяет вам получить доступ к сведениям о каждой службе, включая ее имя, статус и URL-адрес.
Вы должны получить аналогичный вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> ИМЯ URL ПОСЛЕДНИЕ ВОЗРАСТНЫЕ УСЛОВИЯ ГОТОВНОСТЬ ПРИЧИНА node-service http://node-service.serverless-workload.138.197.231.61.sslip.io node-service-00001 88s 3 OK / 3 True
Из этих выходных данных вы можете убедиться, что новая Service
Knative была создана командой kn service
, которую вы выполнили ранее. Вы также найдете URL-адрес Route
, Age
и Status
службы.
В этом разделе вы установили Knative CLI и использовали его для развертывания бессерверной рабочей нагрузки для вашего приложения Node.js.
Вариант 2. Создание ресурса службы с использованием файлов YAML.
Вы также можете развернуть ресурс Service
, создав файл YAML, который определяет ресурс. Этот метод полезен для обеспечения контроля версий ваших рабочих нагрузок.
Сначала вы создадите подкаталог в каталоге, содержащем ваш Dockerfile
. В этом руководстве для подкаталога используется имя knative
. Создайте папку:
1
<ol><li data-prefix="$"> <span class="token function">мкдир</span><mark> родной</mark></li></ol>
Далее вы создадите файл YAML с именем service.yaml
в каталоге knative
:
1
<ol><li data-prefix="$"> <span class="token function">нано</span><mark> родной</mark> /service.yaml</li></ol>
Во вновь созданный файл service.yaml
добавьте следующие строки, чтобы определить Service
, которая будет развертывать ваше приложение Node.js:
~/node_project/knative/service.yaml
1
<span class="token key atrule">apiVersion</span> <span class="token punctuation">:</span> serving.knative.dev/v1 <span class="token key atrule">kind</span> <span class="token punctuation">:</span> Service <span class="token key atrule">metadata</span> <span class="token punctuation">:</span> <span class="token key atrule">name</span> <span class="token punctuation">:</span></code> узел <span class="token punctuation">—</span> yaml <span class="token punctuation">—</span> служба <span class="token key atrule">пространство имен</span> <span class="token punctuation">:</span><mark> бессерверный режим <span class="token punctuation">—</span> рабочая нагрузка</mark> <span class="token key atrule">спецификация</span> <span class="token punctuation">:</span> <span class="token key atrule">шаблон</span> <span class="token punctuation">:</span> <span class="token key atrule">метаданные</span> <span class="token punctuation">:</span> <span class="token key atrule">имя</span> <span class="token punctuation">:</span><mark> узел <span class="token punctuation">—</span> yaml <span class="token punctuation">—</span> сервис <span class="token punctuation">—</span> v1</mark> <span class="token key atrule">спецификация</span> <span class="token punctuation">:</span> <span class="token key atrule">контейнеры</span> <span class="token punctuation">:</span> <span class="token punctuation">-</span> <span class="token key atrule">изображение</span> <span class="token punctuation">:</span> docker.io/<mark> ваше_dockerhub_имя_пользователя</mark> /nodejs <span class="token punctuation">-</span> image <span class="token punctuation">-</span> демо <span class="token key atrule">-</span> <span class="token key atrule">порты</span> <span class="token punctuation">:</span> <span class="token punctuation">-ContainerPort</span> <span class="token punctuation">:</span><mark> <span class="token number">8080</span></mark>
YAML-файл Knative Service содержит следующую информацию:
-
name
в первом разделе metadata
указывает name
ресурса Service
.
-
namespace
указывает namespace
, в котором вы хотите развернуть рабочую нагрузку.
-
name
в первом разделе spec
указывает name
Revision
.
-
image
во втором разделе spec
указывает image
контейнера, который вы хотите развернуть.
-
containerPort
указывает port
прослушивает ваше приложение.
Обязательно обновите выделенный текст информацией, которую вы выбрали для своего приложения и системы, а также своим именем пользователя DockerHub.
Сохраните и закройте файл.
Теперь вы можете развернуть ресурс Service
, выполнив следующую команду:
1
<ol><li data-prefix="$"> kubectl применить <span class="token parameter variable">-f</span><mark> родной</mark> /service.yaml</li></ol>
Вы должны получить следующий вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> service.serving.knative.dev/node-yaml-service создан.
Вывод показывает, что ресурс Service
был успешно создан.
Выполните следующую команду, чтобы убедиться, что ресурс Service
создан:
1
<ol><li data-prefix="$"> список <span class="token function">служб</span> kn <span class="token parameter variable">--namespace</span> serverless-workload</li></ol>
Команда kn service list
перечисляет все службы, развернутые в настоящее время с помощью Knative Serving в определенном пространстве имен. Эта команда позволяет вам получить доступ к подробной информации о каждой услуге.
Вы должны получить следующий вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> ИМЯ URL ПОСЛЕДНИЕ ВОЗРАСТНЫЕ УСЛОВИЯ ГОТОВНОСТЬ ПРИЧИНА node-service http://node-service.serverless-workload.174.138.127.211.sslip.io node-service-00001 9d 3 OK / 3 True<mark> узел-yaml-сервис</mark> http://node-yaml-service.serverless-workload.174.138.127.211.sslip.io node-yaml-service-v1 9d 3 OK/3 True
Вы можете убедиться, что новая Service
Knative была создана на основе YAML-файла Knative Service, который вы выполнили ранее. В этом разделе вы создали node-yaml-service
. Вы также можете найти URL-адрес Knative Route
.
В этом разделе вы использовали файл YAML для создания бессерверной рабочей нагрузки для вашего приложения Node.js.
На этом этапе вы создали ресурс Knative Service
, используя инструмент kn
CLI и файл YAML. Далее вы получите доступ к рабочей нагрузке приложения, которое вы развернули с помощью Knative.
Шаг 4. Доступ к рабочей нагрузке приложения
Теперь, когда вы развернули бессерверную рабочую нагрузку, вы можете получить к ней доступ с помощью URL-адреса из Knative Route
, созданного как часть бессерверной рабочей нагрузки. Knative Route определяет, как входящий HTTP-трафик должен направляться к определенной службе или приложению.
Чтобы получить список всех маршрутов Knative, выполните следующую команду:
1
<ol><li data-prefix="$"> список маршрутов kn <span class="token parameter variable">--namespace</span> serverless-workload</li></ol>
Команда kn route list
перечисляет все маршруты Knative в определенном пространстве имен в кластере Kubernetes.
Вы должны получить аналогичный вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> ИМЯ URL ГОТОВЫЙ node-service http://node-service.serverless-workload.138.197.231.61.sslip.io True node-yaml-service http://node-yaml-service.serverless-workload.138.197.231.61.sslip .io Правда
Вы будете использовать URL-адреса, сгенерированные для Knative Routes, чтобы убедиться, что все работает должным образом.
Откройте любой из URL-адресов в браузере. Когда вы заходите на сайт в браузере, загружается целевая страница вашего приложения Node:
Бессерверная рабочая нагрузка
Вы успешно развернули бессерверную рабочую нагрузку с помощью Knative в своем кластере Kubernetes.
Заключение
В этом руководстве вы развернули бессерверную рабочую нагрузку с помощью Knative. Вы создали ресурс Knative Service
с помощью инструмента kn
CLI и файлов YAML. Этот ресурс развернул приложение Node.js в вашем кластере Kubernetes, к которому вы получили доступ с помощью URL-адреса Route
.
Дополнительные сведения о функциях, предлагаемых Knative, таких как автоматическое масштабирование модулей, постепенное внедрение трафика в версию и компонент Eventing, см. в официальной документации Knative.
Чтобы продолжить сборку с помощью DigitalOcean Kubernetes (DOKS), обратитесь к нашей документации Kubernetes How-To. Вы также можете узнать больше о DOKS, например о функциях и доступности. Для устранения неполадок DOKS вы можете обратиться к нашим руководствам по поддержке Kubernetes.
Продолжайте разработку с помощью управляемого DockerHosting.
Инженер-программист
Технический редактор