Azure Kubernetes Fleet Manager(미리 보기)를 사용한 지능형 클러스터 간 Kubernetes 리소스 배치
애플리케이션 개발자는 Kubernetes 리소스를 여러 클러스터에 배포해야 하는 경우가 많습니다. Fleet 운영자는 클러스터의 컴퓨팅 비용이나 메모리 및 CPU와 같은 사용 가능한 리소스와 같은 휴리스틱을 기반으로 워크로드를 배치하기 위해 가장 적합한 클러스터를 선택해야 하는 경우가 많습니다. 여러 클러스터에서 이러한 Kubernetes 리소스를 수동으로 만들고, 업데이트하고, 추적하는 것은 지루한 일입니다. 이 문서에서는 Azure Kubernetes Fleet Manager(Fleet)를 통해 지능형 Kubernetes 리소스 배치 기능을 사용하여 이러한 시나리오를 해결할 수 있는 방법을 설명합니다.
개요
Fleet는 다음 속성에 따라 일정을 결정할 수 있는 리소스 배치 기능을 제공합니다.
- 노드 수
- 대상 멤버 클러스터의 컴퓨팅 비용
- 대상 멤버 클러스터의 리소스(CPU/메모리) 가용성
Important
Azure Kubernetes Fleet Manager 미리 보기 기능은 셀프 서비스, 옵트인 기반으로 제공됩니다. 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. Azure Kubernetes Fleet Manager 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다.
이 문서에서는 Azure CLI 또는 Azure Portal을 통해 수행할 수 있는 클러스터 리소스 배치 만들기에 대해 설명합니다. 자세한 내용은 Fleet 허브 클러스터에서 멤버 클러스터로 리소스 전파를 참조하세요.
필수 조건
- 이 빠른 시작에 사용된 개념과 용어를 이해하려면 리소스 전파 개념 개요를 참조하세요.
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- 허브 클러스터와 멤버 클러스터가 있는 Fleet 리소스가 필요합니다. 없는 경우 Azure Kubernetes Fleet Manager 리소스 만들기 및 Azure CLI를 사용하여 멤버 클러스터 조인을 참조하세요.
- 허브 클러스터의 Kubernetes API에 액세스해야 합니다. 액세스 권한이 없으면 Azure Kubernetes Fleet Manager를 사용하여 Fleet 리소스의 Kubernetes API에 액세스를 참조하세요.
멤버 클러스터 속성을 기반으로 예약 시 클러스터 필터링
requiredDuringSchedulingIgnoredDuringExecution 유사성 형식을 사용하면 속성 선택기를 사용하여 배치할 수 있는 멤버 클러스터를 필터링할 수 있습니다. 속성 선택기는 클러스터 속성에 대한 식 조건의 배열입니다.
각 조건에서 다음을 지정합니다.
이름: 속성의 이름이며 형식은 다음과 같아야 합니다.
resources.kubernetes-fleet.io/<CAPACITY-TYPE>-<RESOURCE-NAME>
<CAPACITY-TYPE>
은 확인하려는 용량(사용 정보)에 따라total
,allocatable
또는available
중 하나이고,<RESOURCE-NAME>
은 리소스(CPU/메모리)의 이름입니다.예를 들어, 클러스터의 사용 가능한 CPU 용량을 기준으로 클러스터를 선택하려면 속성 선택기에 사용되는 이름은
resources.kubernetes-fleet.io/available-cpu
여야 합니다. 할당 가능한 메모리 용량의 경우resources.kubernetes-fleet.io/allocatable-memory
를 사용할 수 있습니다.속성의 가능한 값인 값 목록입니다.
제약 조건/원하는 값과 클러스터의 관측 값 사이의 조건을 표현하는 데 사용되는 연산자입니다. 현재 지원되는 연산자는 다음과 같습니다.
Gt
(보다 큼): 지정된 속성에 대해 클러스터에서 관찰된 값은 리소스 배치를 위해 선택되기 전에 조건의 값보다 커야 합니다.Ge
(보다 크거나 같음): 지정된 속성에 대해 클러스터에서 관찰된 값은 리소스 배치를 위해 선택되기 전에 조건의 값보다 크거나 같아야 합니다.Lt
(보다 작음): 지정된 속성에 대해 클러스터에서 관찰된 값은 리소스 배치를 위해 선택되기 전에 조건의 값보다 작아야 합니다.Le
(작거나 같음): 지정된 속성에 대해 클러스터에서 관찰된 값은 리소스 배치를 위해 선택되기 전에 조건의 값보다 작거나 같아야 합니다.Eq
(같음): 지정된 속성에 대해 클러스터에서 관찰된 값은 리소스 배치를 위해 선택되기 전에 조건의 값과 같아야 합니다.Ne
(같지 않음): 지정된 속성에 대해 클러스터에서 관찰된 값은 리소스 배치를 위해 선택되기 전에 조건의 값과 같지 않아야 합니다.
Gt
,Ge
,Lt
,Le
,Eq
또는Ne
연산자를 사용하는 경우 조건의 값 목록에는 정확히 하나의 값이 있어야 합니다.
Fleet은 조건에 지정된 속성을 기반으로 각 클러스터를 평가합니다. requiredDuringSchedulingIgnoredDuringExecution
에 나열된 조건을 충족하지 못하면 리소스 배치에서 이 멤버 클러스터가 제외됩니다.
참고 항목
멤버 클러스터가 조건에 표시된 속성을 소유하지 않으면 자동으로 조건이 실패합니다.
리소스 배치를 위해 노드가 5개 이상인 클러스터만 선택하는 배치 정책 예:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- propertySelector:
matchExpressions:
- name: "kubernetes.azure.com/node-count"
operator: Ge
values:
- "5"
requiredDuringSchedulingIgnoredDuringExecution
선호도 용어 아래에 레이블 및 속성 선택기를 모두 사용하여 이러한 제약 조건 모두에 적합한 멤버 클러스터를 필터링할 수 있습니다.
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
region: east
propertySelector:
matchExpressions:
- name: "kubernetes.azure.com/node-count"
operator: Ge
values:
- "5"
이 예에서 Kubernetes Fleet은 클러스터에 region=east
레이블이 있고 노드 수가 5개 이상인 경우에만 리소스 배치를 위해 클러스터를 고려합니다.
멤버 클러스터 속성을 기준으로 스케줄링 시 순위 클러스터
preferredDuringSchedulingIgnoredDuringExecution
이 사용되면 속성 정렬기는 해당 값을 기준으로 오름차순 또는 내림차순으로 집합의 모든 클러스터 순위를 지정합니다. 가중치는 preferredDuringSchedulingIgnoredDuringExecution
에 지정된 가중치 값을 기준으로 계산됩니다.
속성 분류기는 다음으로 구성됩니다.
- 이름: 이전 섹션에서 다룬 속성 서식에 대한 자세한 정보가 포함된 속성 이름입니다.
- 정렬 순서: 정렬 순서는
Ascending
또는Descending
일 수 있습니다.Ascending
순서가 사용되는 경우 Kubernetes Fleet은 관찰된 값이 더 낮은 멤버 클러스터를 선호합니다.Descending
순서가 사용되는 경우 관찰된 값이 더 높은 멤버 클러스터가 기본 설정됩니다.
정렬 순서가 Descending
인 경우 비례 가중치는 다음 수식을 사용하여 계산됩니다.
((Observed Value - Minimum observed value) / (Maximum observed value - Minimum observed value)) * Weight
예를 들어, 사용 가능한 CPU 용량의 속성을 기준으로 내림차순으로 클러스터 순위를 지정하고 다음과 같은 사용 가능한 CPU가 포함된 클러스터 3개로 구성된 집합이 있다고 가정하겠습니다.
클러스터 | 사용 가능한 CPU 용량 |
---|---|
bravelion |
100 |
smartfish |
20 |
jumpingcat |
10 |
이 경우 분류기는 다음과 같은 가중치를 계산합니다.
클러스터 | 사용 가능한 CPU 용량 | Weight |
---|---|---|
bravelion |
100 | (100 - 10) /(100 - 10) = 가중치의 100% |
smartfish |
20 | (20 - 10) /(100 - 10) = 11.11% 가중치 |
jumpingcat |
10 | (10 - 10) /(100 - 10) = 가중치의 0% |
정렬 순서가 Ascending
인 경우 비례 가중치는 다음 수식을 사용하여 계산됩니다.
(1 - ((Observed Value - Minimum observed value) / (Maximum observed value - Minimum observed value))) * Weight
예를 들어, CPU당 코어 비용을 기준으로 오름차순으로 클러스터 순위를 지정하고 CPU 코어 비용이 다음과 같은 클러스터 3개로 구성된 집합이 있다고 가정하겠습니다.
클러스터 | CPU당 코어 비용 |
---|---|
bravelion |
1 |
smartfish |
0.2 |
jumpingcat |
0.1 |
이 경우 분류기는 다음과 같은 가중치를 계산합니다.
클러스터 | CPU당 코어 비용 | Weight |
---|---|---|
bravelion |
1 | 1 -((1 - 0.1) /(1 - 0.1)) = 0% 가중치 |
smartfish |
0.2 | 1 -((0.2 - 0.1) /(1 - 0.1)) = 88.89% 가중치 |
jumpingcat |
0.1 | 1 -(0.1 - 0.1) /(1 - 0.1) = 100% 가중치 |
아래 예에서는 Descending
순서를 사용하는 속성 정렬기를 보여 줍니다.
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
metricSorter:
name: kubernetes.azure.com/node-count
sortOrder: Descending
이 예에서 Fleet은 노드 수가 더 많은 클러스터를 선호합니다. 노드 수가 가장 많은 클러스터는 가중치 20을 받고, 노드 수가 가장 적은 클러스터는 0을 받습니다. 다른 클러스터는 가중치 계산 수식을 사용하여 계산된 비례 가중치를 받습니다.
preferredDuringSchedulingIgnoredDuringExecution
선호도에서 레이블 선택기와 속성 분류기를 모두 사용할 수 있습니다. 레이블 선택기에 실패한 멤버 클러스터는 가중치를 받지 않습니다. 레이블 선택기를 충족하는 멤버 클러스터는 속성 분류기에서 지정된 대로 비례 가중치를 받습니다.
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp
spec:
resourceSelectors:
- ...
policy:
placementType: PickN
numberOfClusters: 10
affinity:
clusterAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 20
preference:
labelSelector:
matchLabels:
env: prod
metricSorter:
name: resources.kubernetes-fleet.io/total-cpu
sortOrder: Descending
이 예에서 클러스터는 레이블이 env=prod
인 경우에만 추가 가중치를 받습니다. 해당 레이블 기반 제약 조건을 충족하는 경우 해당 멤버 클러스터의 총 CPU 양을 기준으로 클러스터에 비례 가중치가 부여됩니다.
리소스 정리
ClusterResourcePlacement
개체를 더 이상 사용하지 않으려면 kubectl delete
명령을 사용하여 삭제할 수 있습니다. 다음 예에서는 crp
라는 ClusterResourcePlacement
개체를 삭제합니다.
kubectl delete clusterresourceplacement crp
다음 단계
리소스 전파에 대해 자세히 알아보려면 다음 리소스를 참조하세요.
Azure Kubernetes Service