AKS 上带有 KEDA 的 Azure Function 始终停止

问题描述 投票:0回答:1

我用 Java 编写了一个示例 Azure 函数,它由 eventhub 消息触发。该函数在 FunctionApp 中部署时工作正常,但当我将其容器化并使用 KEDA 部署时,我始终看到下面的错误消息,并且函数不处理任何消息。

      Worker process started and initialized.
info: Host.General[337]
      Host lock lease acquired by instance ID '00000000000000000000000001DD233B'.
info: Host.Startup[413]
      Host started (7675ms)
info: Host.Startup[0]
      Job host started
info: Microsoft.Azure.WebJobs.Host.DrainModeManager[0]
      DrainMode mode enabled
info: Microsoft.Azure.WebJobs.Host.DrainModeManager[0]
      Calling StopAsync on the registered listeners
info: Host.Startup[0]
      Stopping the listener 'Microsoft.Azure.WebJobs.EventHubs.Listeners.EventHubListener' for function 'MyFirstAKSFunction'
info: Host.Startup[0]
      Stopped the listener 'Microsoft.Azure.WebJobs.EventHubs.Listeners.EventHubListener' for function 'MyFirstAKSFunction'
info: Microsoft.Azure.WebJobs.Host.DrainModeManager[0]
      Call to StopAsync complete, registered listeners are now stopped

Docker 文件:

FROM mcr.microsoft.com/azure-functions/java:4-java17

COPY ./build ./package
RUN mkdir -p /home/site/wwwroot && \
    cd /package/azure-functions/ && \
    cd $(ls -d */|head -n 1) && \
    cp -a . /home/site/wwwroot

ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true

功能启动后立即开始关闭。

java docker azure-functions azure-aks azure-eventhub
1个回答
0
投票

我更新了 dockerfile 并解决了问题。新的 dockerfile 如下

FROM mcr.microsoft.com/azure-functions/java:4-java17

COPY ./build ./package

RUN mkdir -p /home/site/wwwroot && \
    cd /package/azure-functions/ && \
    cd $(ls -d */|head -n 1) && \
    cp -a . /home/site/wwwroot && \
    groupadd appuser -g 2000 && \
    useradd -r -M -s /sbin/nologin -g appuser -c appuser appuser -u 1000 && \
    mkdir -p /home/appuser/.local && \
    chown -R appuser:appuser /azure-functions-host && \
    chown -R appuser:appuser /home/appuser/.local

ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true \
    ASPNETCORE_URLS=http://+:8080 \
    FUNCTIONS_WORKER_RUNTIME=java \
    JAVA_OPTS="--add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED"

# Switch to the user
USER appuser

# Expose the port
EXPOSE 8080
© www.soinside.com 2019 - 2024. All rights reserved.