Kubernetes의 Azure Functions 및 KEDA

Azure Functions 런타임을 사용하면 원하는 위치에 원하는 방식으로 유연하게 호스팅할 수 있습니다. KEDA(Kubernetes-based event-driven autoscaling)은 Azure Functions 런타임, 도구와 결합하여 Kubernetes에서 이벤트 기반 스케일을 제공합니다.

Important

KEDA를 사용하거나 직접 배포하여 Kubernetes에서 컨테이너화된 함수 앱을 실행하는 것은 무료로 사용할 수 있는 오픈 소스 작업입니다. 기여자와 커뮤니티에서는 Azure Functions 리포지토리의 GitHub 문제를 사용하여 최상의 지원을 제공합니다. 이러한 문제를 사용하여 버그를 보고하고 기능 요청을 제기하세요. Azure의 관리되는 Kubernetes 클러스터에서 실행되는 Azure Container Apps에 컨테이너화된 함수 앱을 배포하는 작업은 현재 미리 보기로 제공됩니다. 자세한 내용은 Azure Functions의 Azure Container Apps 호스팅을 참조하세요.

Kubernetes 기반 함수의 작동 방식

Azure Functions 서비스는 런타임과 크기 조정 컨트롤러라는 두 가지 주요 구성 요소로 구성됩니다. Functions 런타임은 코드를 실행합니다. 런타임에는 함수 실행을 트리거, 로그 및 관리하는 방법에 대한 논리가 포함되어 있습니다. Azure Functions 런타임은 어디에서나 사용할 수 있습니다. 다른 구성 요소는 크기 조정 컨트롤러입니다. 크기 조정 컨트롤러는 함수를 대상으로 하는 이벤트의 비율을 모니터링하고 앱을 실행하는 인스턴스 수를 사전에 조정합니다. 자세한 내용은 Azure Functions 크기 조정 및 호스팅을 참조하세요.

Kubernetes 기반 Functions는 KEDA를 통해 이벤트 기반 스케일링을 사용하여 Docker 컨테이너에서 Functions 런타임을 제공합니다. KEDA는 (이벤트가 발생하지 않을 때) 0개의 인스턴스로 스케일 인하고 n개의 인스턴스로 스케일 아웃할 수 있습니다. Kubernetes 자동 크기 조정기(Horizontal Pod Autoscaler)에 대한 사용자 지정 메트릭을 노출하여 이를 수행합니다. KEDA에서 Functions 컨테이너를 사용하면 Kubernetes 클러스터 종류에 관계없이 서버리스 함수 기능을 복제할 수 있습니다. 이러한 함수는 서버리스 인프라 구현에 필요한 AKS(Azure Kubernetes Services) 가상 노드 기능을 통해 배포할 수도 있습니다.

Kubernetes에서 KEDA 및 함수 관리

Kubernetes 클러스터에서 Functions를 실행하려면 KEDA 구성 요소를 설치해야 합니다. 이 구성 요소는 다음 방법 중 하나로 설치할 수 있습니다.

  • Azure Functions Core Tools: func kubernetes install 명령을 사용합니다.

  • Helm: Helm을 포함하여 Kubernetes 클러스터에 KEDA를 설치하는 다양한 방법이 있습니다. 배포 옵션은 KEDA 사이트에 설명되어 있습니다.

Kubernetes에 함수 앱 배포

모든 함수 앱을 KEDA를 실행하는 Kubernetes를 실행하는 클러스터에 배포할 수 있습니다. 함수는 Docker 컨테이너에서 실행되므로 프로젝트에 Dockerfile이 필요합니다. func init를 호출하여 프로젝트를 만들 때 --docker 옵션을 사용하여 Dockerfile을 만들 수 있습니다. 이 작업을 수행하지 않은 경우, 언제든지 다음 예제와 같이 Functions 프로젝트 루트에서 --docker-only 옵션을 사용하여 func init를 다시 호출할 수 있습니다.

func init --docker-only

Dockerfile 생성에 대한 자세한 내용은 func init 참조를 참조하세요.

이미지를 빌드하고 함수를 Kubernetes에 배포하려면 다음 명령을 실행합니다.

func kubernetes deploy --name <name-of-function-deployment> --registry <container-registry-username>

이 예제에서는 <name-of-function-deployment>을 함수 앱 이름으로 바꿉니다.

배포 명령은 다음 작업을 수행합니다.

  1. 앞에서 만든 Dockerfile은 함수 앱에 대한 로컬 이미지를 작성하는 데 사용됩니다.
  2. 로컬 이미지는 태그가 지정되고 사용자가 로그인한 컨테이너 레지스트리로 푸시됩니다.
  3. Kubernetes Deployment 리소스, ScaledObject 리소스 및 local.settings.json 파일에서 가져온 환경 변수를 포함하는 Secrets를 정의하는 클러스터에 매니페스트가 생성되고 적용됩니다.

자세한 내용은 func kubernetes deploy 명령을 참조하세요.

프라이빗 레지스트리의 함수 앱 배포

위의 흐름은 프라이빗 레지스트리에서도 작동합니다. 프라이빗 레지스트리에서 컨테이너 이미지를 끌어오는 경우 func kubernetes deploy을(를) 실행할 때 프라이빗 레지스트리 자격 증명을 포함하는 Kubernetes 비밀을 참조하는 --pull-secret 플래그를 포함합니다.

Kubernetes에서 함수 앱 제거

배포한 후에는 연결된 Deployment, ScaledObject, 생성된 Secrets을(를) 제거하여 함수를 제거할 수 있습니다.

kubectl delete deploy <name-of-function-deployment>
kubectl delete ScaledObject <name-of-function-deployment>
kubectl delete secret <name-of-function-deployment>

Kubernetes에서 KEDA 제거

다음 방법 중 하나로 클러스터에서 KEDA를 제거할 수 있습니다.

KEDA에서 지원되는 트리거

KEDA는 다음 Azure 함수 트리거를 지원합니다.

HTTP 트리거 지원

HTTP 트리거를 노출하는 Azure Functions를 사용할 수 있지만 KEDA는 직접 관리하지 않습니다. KEDA prometheus 트리거를 활용하여 HTTP Azure Functions 1에서 n 인스턴스까지 확장할 수 있습니다.

다음 단계

자세한 내용은 다음 리소스를 참조하세요.