Azure / Azure/azure-functions-core-tools

Kubernetes deploy with Durable functions

Open
#2,345 10 comments 0 reactions 0 assignees View on GitHub
Dominant language
C#
Stars
1.5k
Forks
498
Avg merge
4d 20h
Merged PRs (30d)
14

Description

We recently ran into an issue where moving our Durable functions to a Kubernetes Cluster. We are using the "func kubernetes deploy" to generate the Yml file.

By default the Queue based functions are split from the HTTP triggered functions but they share the same Secrets. Because of the Orchestrator function being disabled the HTTP function cannot start a new instance of the orchestrator with this error:

`Error: "The function 'RoadsideBatteryJobWorkflow' doesn't exist, is disabled, or is not an orchestrator function. Additional info: No orchestrator functions are currently registered!" "Asgard.Odin.Workflows.RoadsideBatteryJob.Triggers.StartJobWorkflow" System.ArgumentException: The function 'RoadsideBatteryJobWorkflow' doesn't exist, is disabled, or is not an orchestrator function. Additional info: No orchestrator functions are currently registered! at Microsoft.Azure.WebJobs.Extensions.DurableTask.DurableTaskExtension.ThrowIfFunctionDoesNotExist(String name, FunctionType functionType) in D:\a\r1\a\azure-functions-durable-extension\src\WebJobs.Extensions.DurableTask\DurableTaskExtension.cs:line 1062 at Microsoft.Azure.WebJobs.Extensions.DurableTask.DurableClient.Microsoft.Azure.WebJobs.Extensions.DurableTask.IDurableOrchestrationClient.StartNewAsync[T](String orchestratorFunctionName, String instanceId, T input) in D:\a\r1\a\azure-functions-durable-extension\src\WebJobs.Extensions.DurableTask\ContextImplementations\DurableClient.cs:line 140 at Asgard.Odin.Workflows.RoadsideBatteryJob.Triggers.StartJobWorkflow.Run(HttpRequestMessage request, String instanceId, IDurableClient orchestrationClient) in /src/dotnet-function-app/Asgard.Odin.Workflows.RoadsideBatteryJob/Triggers/StartJobWorkflow.cs:line 59`

I have spoken to the guys at the Durable Function Extensions and the workarounds for this is to have different configuration for each of these two deployments in Kubernetes as the AzureStorageWebJobs setting has to be different.

The question is that is it possible to stop the splitting from happening in the Yml file? Or is there another way to handle this either by Environment Variables in the Yml file?

Thanks in advance

Contributor guide

Open the contributing guide

Research direction

Start with the `func kubernetes deploy` command and inspect how it generates the Kubernetes YAML, especially the split between queue-based and HTTP-triggered functions. Check whether the generated deployments expose configuration through environment variables or whether the split can be disabled; done means one supported deployment configuration is demonstrated and covered by an appropriate test.

Written by the indexing model from the issue text.

Assessment

Tech stack
azure, csharp, kubernetes
Domain
cli, cloud, devops
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.