Kubernetes의 Azure Functions 및 KEDA
Azure Functions 런타임을 사용하면 원하는 위치에 원하는 방식으로 유연하게 호스팅할 수 있습니다. KEDA(Kubernetes-based event-driven autoscaling)은 Azure Functions 런타임, 도구와 결합하여 Kubernetes에서 이벤트 기반 스케일을 제공합니다.
Important
KEDA를 사용하거나 직접 배포하여 Kubernetes에서 컨테이너화된 함수 앱을 실행하는 것은 무료로 사용할 수 있는 오픈 소스 작업입니다. 기여자와 커뮤니티에서는 Azure Functions 리포지토리의 GitHub 문제를 사용하여 최상의 지원을 제공합니다. 이러한 문제를 사용하여 버그를 보고하고 기능 요청을 제기하세요.
완전히 지원되는 Kubernetes 배포의 경우 대신 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을 만들 수 있습니다. Dockerfile을 만드는 것을 잊은 경우 항상 코드 프로젝트의 루트에서 다시 호출 func init
할 수 있습니다.
(선택 사항) Dockerfile을 만들어야 하는 경우 다음 옵션과 함께
--docker-only
명령을 사용합니다func init
.func init --docker-only
Dockerfile 생성에 대한 자세한 내용은
func init
참조를 참조하세요.명령을
func kubernetes deploy
사용하여 이미지를 빌드하고 컨테이너화된 함수 앱을 Kubernetes에 배포합니다.func kubernetes deploy --name <name-of-function-deployment> --registry <container-registry-username>
이 예제에서는
<name-of-function-deployment>
을 함수 앱 이름으로 바꿉니다. 배포 명령은 다음 작업을 수행합니다.- 이전에 만든 Dockerfile은 컨테이너화된 함수 앱에 대한 로컬 이미지를 빌드하는 데 사용됩니다.
- 로컬 이미지는 태그가 지정되고 사용자가 로그인한 컨테이너 레지스트리로 푸시됩니다.
- Kubernetes
Deployment
리소스,ScaledObject
리소스 및local.settings.json
파일에서 가져온 환경 변수를 포함하는Secrets
를 정의하는 클러스터에 매니페스트가 생성되고 적용됩니다.
프라이빗 레지스트리의 함수 앱 배포
이전 배포 단계는 프라이빗 레지스트리에도 작동합니다. 프라이빗 레지스트리에서 컨테이너 이미지를 끌어오는 경우 실행할 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를 제거할 수 있습니다.
Azure Functions Core Tools:
func kubernetes remove
명령을 사용합니다.Helm: KEDA 사이트의 제거 단계를 참조하세요.
KEDA에서 지원되는 트리거
KEDA는 다음 Azure 함수 트리거를 지원합니다.
HTTP 트리거 지원
HTTP 트리거를 노출하는 Azure Functions를 사용할 수 있지만 KEDA는 직접 관리하지 않습니다. KEDA prometheus 트리거를 사용하여 HTTP Azure Functions를 한 인스턴스에서 인스턴스로 확장할 n
수 있습니다.
다음 단계
자세한 내용은 다음 리소스를 참조하세요.