Бөлісу құралы:


Использование OpenFaaS в Служба Azure Kubernetes (AKS)

OpenFaaS — это платформа, которая использует контейнеры для создания бессерверных функций. Как проект с открытым кодом она стала очень популярной в сообществе. В этом документе описано, как установить и использовать OpenFaas в кластере Службы Azure Kubernetes (AKS).

Подготовка к работе

Добавьте репозиторий с чартом Helm для OpenFaaS

  1. Перейдите в Azure Cloud Shell.

  2. Добавьте репозиторий диаграммы Helm OpenFaaS и обновите его до последней версии, используя следующие helm команды.

    helm repo add openfaas https://openfaas.github.io/faas-netes/
    helm repo update
    

Развертывание OpenFaaS

Рекомендуется, чтобы OpenFaaS и функции OpenFaaS хранились в собственном пространстве имен Kubernetes.

  1. Создайте пространство имен для системы OpenFaaS и функций с помощью kubectl apply команды.

    kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
    
  2. Создайте пароль для портала пользовательского интерфейса OpenFaaS и REST API с помощью следующих команд. Диаграмма helm использует этот пароль для включения базовой проверки подлинности на шлюзе OpenFaaS, который предоставляется в Интернете через облако LoadBalancer.

    # generate a random password
    PASSWORD=$(head -c 12 /dev/urandom | shasum| cut -d' ' -f1)
    
    kubectl -n openfaas create secret generic basic-auth \
    --from-literal=basic-auth-user=admin \
    --from-literal=basic-auth-password="$PASSWORD"
    

    Внимание

    Использование имени пользователя и пароля для проверки подлинности является небезопасным шаблоном. Если у вас есть корпоративная лицензия OpenFaaS, мы рекомендуем использовать управление удостоверениями и доступом (IAM) для OpenFaaS .

  3. Получите значение пароля с помощью следующей echo команды.

    echo $PASSWORD
    
  4. Разверните OpenFaaS в кластере AKS с помощью helm upgrade команды.

    helm upgrade openfaas --install openfaas/openfaas \
        --namespace openfaas  \
        --set basic_auth=true \
        --set functionNamespace=openfaas-fn \
        --set serviceType=LoadBalancer
    

    Выходные данные должны выглядеть примерно так:

    NAME: openfaas
    LAST DEPLOYED: Tue Aug 29 08:26:11 2023
    NAMESPACE: openfaas
    STATUS: deployed
    ...
    NOTES:
    To verify that openfaas has started, run:
    
    kubectl --namespace=openfaas get deployments -l "release=openfaas, app=openfaas"
    ...
    
  5. Для получения доступа к шлюзу OpenFaaS создается общедоступный IP-адрес. Получите IP-адрес с помощью kubectl get service команды.

    kubectl get service -l component=gateway --namespace openfaas
    

    Выходные данные должны выглядеть примерно так:

    NAME               TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)          AGE
    gateway            ClusterIP      10.0.156.194   <none>         8080/TCP         7m
    gateway-external   LoadBalancer   10.0.28.18     52.186.64.52   8080:30800/TCP   7m
    
  6. Проверьте систему OpenFaaS, перейдя по внешнему IP-адресу через порт 8080, http://52.186.64.52:8080 в этом примере вам будет предложено войти в систему. Пользователь по умолчанию и admin пароль можно получить с помощью echo $PASSWORD.

    Снимок экрана: пользовательский интерфейс OpenFaaS.

  7. Задайте $OPENFAAS_URL URL-адрес внешнего IP-адреса через порт 8080 и войдите в систему с помощью Azure CLI, выполнив следующие команды.

    export OPENFAAS_URL=http://52.186.64.52:8080
    echo -n $PASSWORD | ./faas-cli login -g $OPENFAAS_URL -u admin --password-stdin
    

Создание первой функции

  1. Перейдите к системе OpenFaaS с помощью URL-адреса OpenFaaS.

  2. Создайте функцию с помощью портала OpenFaas, выбрав "Развернуть новую функцию " и найдите Figlet.

  3. Выберите функцию Figlet и нажмите кнопку "Развернуть".

    Снимок экрана: диалоговое окно

  4. Вызовите функцию с помощью следующей curl команды. Замените IP-адрес в следующем примере адресом шлюза OpenFaaS.

    curl -X POST http://52.186.64.52:8080/function/figlet -d "Hello Azure"
    

    Выходные данные должны выглядеть примерно так:

     _   _      _ _            _
    | | | | ___| | | ___      / \    _____   _ _ __ ___
    | |_| |/ _ \ | |/ _ \    / _ \  |_  / | | | '__/ _ \
    |  _  |  __/ | | (_) |  / ___ \  / /| |_| | | |  __/
    |_| |_|\___|_|_|\___/  /_/   \_\/___|\__,_|_|  \___|
    

Создание второй функции

Настройка экземпляра Azure Cosmos DB

  1. Перейдите в Azure Cloud Shell.

  2. Создайте новую группу ресурсов для экземпляра Azure Cosmos DB с помощью az group create команды.

    az group create --name serverless-backing --location eastus
    
  3. Разверните экземпляр MongoDB Azure Cosmos DB типа с помощью az cosmosdb create команды. Замените openfaas-cosmos собственным уникальным именем экземпляра.

    az cosmosdb create --resource-group serverless-backing --name openfaas-cosmos --kind MongoDB
    
  4. Получите базу данных Azure Cosmos DB строка подключения и сохраните ее в переменной az cosmosdb keys list с помощью команды. Замените значение --resource-group аргумента именем группы ресурсов и --name аргумент именем экземпляра Azure Cosmos DB.

    COSMOS=$(az cosmosdb keys list \
      --type connection-strings \
      --resource-group serverless-backing \
      --name openfaas-cosmos \
      --output tsv)
    
  5. Заполните Azure Cosmos DB тестированными данными, создав файл с именем plans.json и скопируйте его в следующем json.

    {
        "name" : "two_person",
        "friendlyName" : "Two Person Plan",
        "portionSize" : "1-2 Person",
        "mealsPerWeek" : "3 Unique meals per week",
        "price" : 72,
        "description" : "Our basic plan, delivering 3 meals per week, which will feed 1-2 people.",
        "__v" : 0
    }
    

Создание функции

  1. Установите средства MongoDB. В следующем примере команда устанавливает эти средства с помощью пивоварения. Дополнительные варианты установки см. в документации по MongoDB.

    brew install mongodb
    
  2. Загрузите экземпляр Azure Cosmos DB с данными с помощью средства mongoimport .

    mongoimport --uri=$COSMOS -c plans < plans.json
    

    Выходные данные должны выглядеть примерно так:

    2018-02-19T14:42:14.313+0000    connected to: localhost
    2018-02-19T14:42:14.918+0000    imported 1 document
    
  3. Создайте функцию с помощью faas-cli deploy команды. Обязательно обновите значение аргумента -g с помощью адреса шлюза OpenFaaS.

    faas-cli deploy -g http://52.186.64.52:8080 --image=shanepeckham/openfaascosmos --name=cosmos-query --env=NODE_ENV=$COSMOS
    

    После развертывания выходные данные должны выглядеть примерно так:

    Deployed. 202 Accepted.
    URL: http://52.186.64.52:8080/function/cosmos-query
    
  4. Проверьте функцию с помощью следующей curl команды. Обязательно обновите IP-адрес с помощью адреса шлюза OpenFaaS.

    curl -s http://52.186.64.52:8080/function/cosmos-query
    

    Выходные данные должны выглядеть примерно так:

    [{"ID":"","Name":"two_person","FriendlyName":"","PortionSize":"","MealsPerWeek":"","Price":72,"Description":"Our basic plan, delivering 3 meals per week, which will feed 1-2 people."}]
    

    Примечание.

    Вы также можете протестировать функцию в пользовательском интерфейсе OpenFaaS:

    Снимок экрана: пользовательский интерфейс OpenFaas.

Следующие шаги

Продолжайте учиться на семинаре OpenFaaS, который включает набор практических лабораторий, охватывающих такие темы, как создание собственного бота GitHub, использование секретов, просмотр метрик и автомасштабирование.