Openwhisk вне функциональной памяти, без принудительного тайм-аута функции - PullRequest
0 голосов
/ 17 марта 2020

У меня работает Apache Openwhisk на k3s, установленном с помощью helm.

Ниже приведены журналы invoker, сделанные через несколько часов после установки fre sh, с несколькими периодически настроенными функциями. Это сообщение появляется каждые несколько секунд после начала проблемы.

[2020-03-17T13:27:12.691Z] [ERROR] [#tid_sid_invokerHealth] [ContainerPool]
Rescheduling Run message, too many message in the pool, freePoolSize: 0 containers and 0 MB,
busyPoolSize: 8 containers and 4096 MB, maxContainersMemory 4096 MB, userNamespace: whisk.system,
action: ExecutableWhiskAction/whisk.system/invokerHealthTestAction0@0.0.1, needed memory: 128 MB,
waiting messages: 24

Вот запущенные модули. Обратите внимание, что все функциональные модули имеют возраст 11+ часов.

NAME                                                              READY   STATUS      RESTARTS   AGE
openwhisk-gen-certs-n965b                                         0/1     Completed   0          14h
openwhisk-init-couchdb-4s9rh                                      0/1     Completed   0          14h
openwhisk-install-packages-pnvmq                                  0/1     Completed   0          14h
openwhisk-apigateway-78c64dd7c9-2gsw6                             1/1     Running     2          14h
openwhisk-couchdb-844c6df68f-qrxq6                                1/1     Running     2          14h
openwhisk-wskadmin                                                1/1     Running     2          14h
openwhisk-redis-77494b8d44-gkmlt                                  1/1     Running     2          14h
openwhisk-zookeeper-0                                             1/1     Running     2          14h
openwhisk-kafka-0                                                 1/1     Running     2          14h
openwhisk-controller-0                                            1/1     Running     2          14h
openwhisk-nginx-5f795dd747-c228s                                  1/1     Running     4          14h
openwhisk-cloudantprovider-69fd94b6f6-x88f4                       1/1     Running     2          14h
openwhisk-kafkaprovider-544fbfdcc7-kn29p                          1/1     Running     2          14h
openwhisk-alarmprovider-58c5454cc8-q4wbw                          1/1     Running     2          14h
openwhisk-invoker-0                                               1/1     Running     2          14h
wskopenwhisk-invoker-00-1-prewarm-nodejs10                        1/1     Running     0          14h
wskopenwhisk-invoker-00-6-prewarm-nodejs10                        1/1     Running     0          13h
wskopenwhisk-invoker-00-15-whisksystem-checkuserload              1/1     Running     0          13h
wskopenwhisk-invoker-00-31-whisksystem-guacscaleup                1/1     Running     0          12h
wskopenwhisk-invoker-00-30-whisksystem-guacscaledown              1/1     Running     0          12h
wskopenwhisk-invoker-00-37-whisksystem-functionelastalertcheckd   1/1     Running     0          11h
wskopenwhisk-invoker-00-39-whisksystem-checkuserload              1/1     Running     0          11h
wskopenwhisk-invoker-00-40-whisksystem-functionelastalertcheckd   1/1     Running     0          11h
wskopenwhisk-invoker-00-42-whisksystem-guacscaleup                1/1     Running     0          11h
wskopenwhisk-invoker-00-43-whisksystem-functionelastalertcheckd   1/1     Running     0          11h

Разве Openwhisk не должен убивать эти модули после истечения времени ожидания? Время ожидания для всех функций составляет 3 или 5 минут, но Openwhisk, похоже, не обеспечивает этого.

Еще одна вещь, которую я заметил, это то, что для тайм-аутов было установлено значение «тайм-аут».

$ wsk activation get ...
{
   "annotations": [
        ...
        {
            "key": "timeout",
            "value": false
        },
        ...
}

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Хорошо. Я исправил это, изменив реализацию фабрики контейнеров invoker на docker. Я не уверен, почему реализация kubernetes не может уничтожить модули (и освободить память), но мы используем docker в качестве среды выполнения контейнера для k3s.

Чтобы установить это, измените invoker.containerFactory.impl на docker в значениях рулевого графика: https://github.com/apache/openwhisk-deploy-kube/blob/master/helm/openwhisk/values.yaml#L261

Я также увеличил память вызывающего (invoker.jvmHeapMB) до 1024: https://github.com/apache/openwhisk-deploy-kube/blob/master/helm/openwhisk/values.yaml#L257

Вот ссылка, поясняющая заводские настройки контейнера: https://github.com/apache/openwhisk-deploy-kube/blob/master/docs/configurationChoices.md#invoker -container-factory

0 голосов
/ 19 марта 2020

Аннотация timeout указывает c для конкретной активации. Если значение равно true, это означает, что конкретная активация соответствующей функции превысила установленную максимальную длительность, которая является диапазоном значений от 100 мс до 5 минут по умолчанию (для документов ), если не была изменена для Развертывание системы в целом.

Контейнеры используются для выполнения функций - они некоторое время остаются бездействующими, чтобы облегчить теплый запуск в будущем. Призыватель openwhisk прекратит работу этих теплых модулей в конце концов после простоя или когда потребуется ресурс для запуска других модулей.

...