OpenFaaS — это платформа с открытым исходным кодом для запуска функций (FaaS) поверх Kubernetes. Она упрощает деплой небольших единиц кода, которые выполняются по запросу или событию.
В основе OpenFaaS лежит модель Function as a Service (FaaS), при которой вы пишете функцию и оборачиваете ее в Docker-образ. OpenFaaS отвечает за масштабирование, сетевые вызовы и управление жизненным циклом.
Для взаимодействия используется удобный веб-интерфейс и CLI-утилита faas-cli. Функции можно писать на популярных языках — Python, Node.js, Go и других — с помощью готовых шаблонов.
Полная документация по OpenFaaS Kubernetes доступна на официальном сайте дополнения.
Установка плагина
Для установки OpenFaaS Kubernetes откройте раздел «Дополнения» в панели управления кластером. Найдите «OpenFaaS Kubernetes» в списке и нажмите на него.
В открывшемся окне можно изменить параметры установки. Найдите секцию ingress
и включите ее — установите enabled: true
, а также укажите свой домен в параметре host
. Это упростит доступ к дашборду и позволит использовать faas-cli
.
Если вы включаете ingress
, можно отключить exposeServices
, который используется по умолчанию.
После указания параметров нажмите кнопку «Установить» и дождитесь завершения установки.
Чтобы убедиться, что все работает, проверьте состояние подов в неймспейсе openfaas-fn
:
kubectl get pods -n openfaas-fn
Пример вывода:
NAME READY STATUS RESTARTS AGE
alertmanager-57767d864c-hdqdn 1/1 Running 0 19h
gateway-5f9c4b5754-ksr6x 2/2 Running 1 (19h ago) 19h
nats-6ddf479847-dxr2g 1/1 Running 0 19h
prometheus-6cbd946f66-wqdf8 1/1 Running 0 19h
queue-worker-57c7479989-bw282 1/1 Running 0 19h
Если все поды в статусе Running — установка прошла успешно.
Установка CLI
Для работы с OpenFaaS из консоли потребуется утилита faas-cli
. С ее помощью можно создавать функции, собирать и отправлять образы, деплоить их в кластер, вызывать функции и просматривать их статус.
Утилита доступна для Linux, macOS и Windows. Для ее установки выполните следующие команды:
Linux
curl -sSL https://cli.openfaas.com | sh
MacOS
curl -sSL https://cli.openfaas.com | sh
Или через Homebrew:
brew install faas-cli
Windows (PowerShell)
$version = (Invoke-WebRequest "https://api.github.com/repos/openfaas/faas-cli/releases/latest" | ConvertFrom-Json)[0].tag_name
(New-Object System.Net.WebClient).DownloadFile("https://github.com/openfaas/faas-cli/releases/download/$version/faas-cli.exe", "faas-cli.exe")
После установки убедитесь, что все работает корректно:
faas-cli version
Пример использования
Рассмотрим пример использования OpenFaaS. Развернем плагин, привяжем домен для удобного доступа к дашборду и обращения к OpenFaaS через CLI, установим функцию из встроенного стора и создадим собственную функцию с деплоем через Docker Hub.
Предварительные требования:
- Домен или поддомен, по которому будет доступен OpenFaaS;
- установленное дополнение Nginx Ingress;
- аккаунт в Docker Hub (для кастомных функций);
- установленная утилита faas-cli;
- установленный Docker.
Перейдите к установке плагина OpenFaaS в панели управления. В разделе «Конфигурация» найдите секцию ingress
и включите ее, изменив enabled: false
на enabled: true
. Также задайте значение host
, указав домен, по которому будет доступен дашборд. Запустите установку плагина.
Теперь необходимо создать балансировщик нагрузки. Создайте манифест loadbalancer.yaml
:
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx-lb
namespace: ingress-nginx
spec:
selector:
app.kubernetes.io/name: ingress-nginx
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80
appProtocol: k8s.timeweb.cloud/proto-http
- name: https
port: 443
targetPort: 443
appProtocol: k8s.timeweb.cloud/proto-https
Примените манифест:
kubectl apply -f loadbalancer.yaml
После создания балансировщика, привяжите A-запись к домену. Если домен размещен на наших NS-серверах — просто выберите созданный балансировщик, при настройке А-записи домена. Если используется сторонний DNS, получите IP-адрес балансировщика и добавьте запись вручную:
kubectl get svc --all-namespaces --field-selector spec.type=LoadBalancer
IP будет в колонке EXTERNAL-IP
.
Перейдите по домену, указанному при установке. Откроется окно базовой авторизации.
- Логин:
admin
- Пароль: можно получить командой:
kubectl -n openfaas-fn get secret basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode
После входа откроется главный экран дашборда.
Перейдем к использованию функций. Установим функцию из встроенного стора OpenFaaS.
Сначала авторизуйтесь через CLI. Это позволит выполнять команды, связанные с управлением функциями:
faas-cli login \
--gateway http://<домен> \
--username admin \
--password <пароль>
Где:
- домен — адрес, указанный при установке OpenFaaS;
- admin — имя пользователя по умолчанию;
- пароль — пароль можно получить при выполнении команды:
kubectl -n openfaas-fn get secret basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode
Теперь установим функцию figlet
, которая преобразует текст в ASCII-арт:
faas-cli store deploy figlet \
--gateway http://<домен>
Убедитесь, что функция установилась:
faas-cli list \
--gateway http://<домен>
В списке появится функция figlet
со статусом Ready
.
Вызовите функцию с передачей строки на вход:
echo "TimewebCloud" | faas-cli invoke figlet \
--gateway http://<домен>
В ответ вы получите ASCII-арт с переданным текстом.
Теперь рассмотрим деплой кастомной функции. Выберите шаблон:
faas-cli template store list
Создайте новую функцию на базе нужного шаблона, например python3-http
:
faas-cli new hello-k8s --lang python3-http
Будут созданы:
hello-k8s/handler.py
— код функции;stack.yaml
— манифест функции.
Перед сборкой отредактируйте файл stack.yaml
, указав путь до образа в Docker Hub. Например:
functions:
hello-k8s:
lang: python3-http
handler: ./hello-k8s
image: dockerhubuser/hello-k8s:latest
В поле image укажите имя пользователя Docker Hub и название образа. Обратите внимание, что в OpenFaaS Community Edition разрешена работа только с публичными образами.
Соберите образ:
faas-cli build -f stack.yaml
После сборки образа опубликуйте его в Docker Hub:
faas-cli push -f stack.yaml
И наконец, задеплойте функцию в кластер:
faas-cli deploy -f stack.yaml \
--gateway http://<домен>
После выполнения команды появится ссылка, по которой доступна функция.
Перейдите по ссылке — вы увидите результат выполнения — сообщение «Hello from OpenFaaS!».