0 docker .net-core azure-functions azure-aks
我创建了一个azure持久函数并将其放入docker容器中,一切都在docker桌面中运行,azure持久函数正在使用和MQ兔子触发器。这是代码:
public async Task<List<string>> RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context
)
{
var job = context.GetInput<Job>();
var outputs = new List<string>();
try
{
job.JobCreationIdResult = await context.CallActivityAsync<string>("JobExecutor_CreateJobSimple", job);
}
catch (Exception ex)
{
_logger.ForContext<JobExecutorSimple>().Error(ex.Message, ex);
return outputs;
}
return outputs;
}
[FunctionName("JobExecutor_CreateJobSimple")]
public async Task<string> CreateJob([ActivityTrigger] Job job)
{
_logger.ForContext<JobExecutorSimple>().Information($"result JobId: {job.MktJobId}");
return "done";
}
[FunctionName("JobExecutor_RabbitMQStartSimple")]
public async Task RabbitMQStart(
[RabbitMQTrigger("mkt-executor-q-local", ConnectionStringSetting = "mkt-Executor-RabbitMqConnection")] Job job,
[DurableClient] IDurableOrchestrationClient starter)
{
string instanceId = await starter.StartNewAsync("JobExecutorSimple", job);
_logger.ForContext<JobExecutorSimple>().Information($"Started orchestration with ID = '{instanceId}'.");
}
Run Code Online (Sandbox Code Playgroud)
没什么花哨的,将相同的图像部署到 aks 我收到以下日志:
[40m[32minfo[39m[22m[49m: Host.Startup[0]
Job host started
[40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Host.DrainModeManager[0]
DrainMode mode enabled
[40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Host.DrainModeManager[0]
Calling StopAsync on the registered listeners
[40m[32minfo[39m[22m[49m: Host.Startup[0]
Stopping the listener 'Microsoft.Azure.WebJobs.Extensions.DurableTask.DurableTaskListener' for function 'JobExecutorSimple'
[40m[32minfo[39m[22m[49m: Host.Startup[0]
Stopped the listener 'Microsoft.Azure.WebJobs.Extensions.DurableTask.DurableTaskListener' for function 'JobExecutorSimple'
[40m[32minfo[39m[22m[49m: Host.Startup[0]
Stopping the listener 'Microsoft.Azure.WebJobs.Extensions.DurableTask.DurableTaskListener' for function 'JobExecutor_CreateJobSimple'
[40m[32minfo[39m[22m[49m: Host.Triggers.DurableTask[0]
Stopping task hub worker. IsGracefulStop: False. InstanceId: . Function: . HubName: SimpleFunction. AppName: . SlotName: . ExtensionVersion: 2.6.0. SequenceNumber: 2.
[40m[32minfo[39m[22m[49m: Host.Startup[0]
Stopping the listener 'Microsoft.Azure.WebJobs.Extensions.RabbitMQ.RabbitMQListener' for function 'JobExecutor_RabbitMQStartSimple'
[40m[32minfo[39m[22m[49m: Host.Startup[0]
Stopped the listener 'Microsoft.Azure.WebJobs.Extensions.RabbitMQ.RabbitMQListener' for function 'JobExecutor_RabbitMQStartSimple'
[40m[32minfo[39m[22m[49m: Host.Triggers.DurableTask[0]
Task hub worker stopped. IsGracefulStop: False. Latency: 00:00:01.2084240. InstanceId: . Function: . HubName: SimpleFunction. AppName: . SlotName: . ExtensionVersion: 2.6.0. SequenceNumber: 3.
[40m[32minfo[39m[22m[49m: Host.Startup[0]
Stopped the listener 'Microsoft.Azure.WebJobs.Extensions.DurableTask.DurableTaskListener' for function 'JobExecutor_CreateJobSimple'
[40m[32minfo[39m[22m[49m: Microsoft.Azure.WebJobs.Host.DrainModeManager[0]
Call to StopAsync complete, registered listeners are now stopped
[40m[32minfo[39m[22m[49m: Host.General[337]
Host lock lease acquired by instance ID '000000000000000000000000B7700D04'.
Run Code Online (Sandbox Code Playgroud)
基本上该函数不执行任何操作。
我遇到的第一个错误与无法释放租约有关,因此我必须在主机文件中将其关闭:
"extensions": {
"durableTask": {
"hubName": "SimpleFunction",
"useAppLease": false
}
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以让 azure 持久函数在没有 KEDA 的情况下在 aks 中工作,或者它是强制性的?,我们真的不希望扩展。
小智 7
我\xe2\x80\x99 最近花了几周时间处理同样的问题,其中 DrainMode 会启动并阻止侦听器无缘无故地运行,并且仅在 AKS 上,我们无法在本地重新创建它。
\n在我们的例子中,原因是应用程序启动时,基础映像设置了一个环境变量 ASPNETCORE_URLS 以绑定到端口 80。但是,在 AKS 中,我们在部署中设置了一个安全上下文,以不允许容器以 root 身份运行,并且只有 root 用户可以绑定到 < 1024 的端口。这导致了您共享的相同日志跟踪,其中耗尽模式启动并且侦听器停止,但没有记录发生这种情况的原因。
\n我们的修复方法是在 dockerfile 中公开端口 8080 并将 ASPNETCORE_URLS 设置为 http://+:8080
\n| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |