클러스터 레지스트리 시작
AOSM(Azure Operator Service Manager) CR(클러스터 레지스트리)을 사용하여 클라우드 네이티브 네트워크 함수에 대한 복원력 향상
문서 기록
- 처음 게시됨: 2024년 7월 26일
- HA에 대해 업데이트됨: 2024년 10월 16일
- GC 업데이트: 2024년 11월 5일
기능 종속성
이 기능을 사용하려면 다음과 같은 최소 환경이 필요합니다.
- 최소 AOSM ARM API 버전: 2023-09-01
- 첫 번째 버전, NF(네트워크 함수) kubernetes 확장에 대한 HA(고가용성) 없음: 1.0.2711-7
- 첫 번째 버전, NF kubernetes 확장용 HA 사용: 2.0.2810-144
- 첫 번째 버전, NF kubernetes 확장용 GC 사용: 2.0.2860-160
클러스터 레지스트리 개요
AOSM(Azure Operator Service Manager) CR(클러스터 레지스트리)을 사용하면 Nexus K8s 클러스터에서 컨테이너 이미지의 로컬 복사본을 사용할 수 있습니다. 클러스터 레지스트리를 사용하도록 설정된 상태로 CNF(컨테이너화된 네트워크 함수)를 설치하면 컨테이너 이미지가 원격 AOSM 아티팩트 저장소에서 가져와 이 로컬 클러스터 레지스트리에 저장됩니다. 변경 웹후크를 사용하면 클러스터 레지스트리가 이미지 요청을 자동으로 가로채고 로컬 레지스트리 경로를 대체하여 게시자 패키징 변경을 방지합니다. 클러스터 레지스터를 사용하면 컨테이너 이미지에 대한 CNF 액세스가 원격 아티팩트 저장소에 대한 연결 손실에서 유지됩니다.
주요 사용 사례 및 이점
CNF(클라우드 네이티브 네트워크 기능)는 AOSM 아티팩트 저장소를 사용한 초기 배포 중뿐만 아니라 네트워크 기능을 계속 작동하기 위해 컨테이너 이미지에 액세스해야 합니다. 몇 가지 시나리오는 다음과 같습니다.
- Pod 다시 시작: Pod를 중지하고 시작하면 클러스터 노드가 레지스트리에서 컨테이너 이미지를 끌어올 수 있습니다.
- Kubernetes 스케줄러 작업: Pod에서 노드로 할당하는 동안 새 노드에 컨테이너 이미지가 로컬로 캐시되지 않은 경우 노드는 스케줄러 프로필 규칙에 따라 레지스트리에서 컨테이너 이미지를 가져옵니다.
AOSM 클러스터 레지스트리 사용의 이점:
- AOSM 아티팩트 저장소에 대한 연결이 끊어지는 CNF 중단을 방지하는 데 필요한 로컬 이미지를 제공합니다.
- 이제 각 클러스터 노드가 로컬 레지스트리에서만 이미지를 끌어오기 때문에 AOSM 아티팩트 저장소에서 이미지 끌어오기 수를 줄입니다.
- 변경 웹후크를 사용하여 적절한 로컬 레지스트리 URL 경로를 대체하여 잘못된 형식의 레지스트리 URL 문제를 해결합니다.
클러스터 레지스트리 작동 방식
AOSM 클러스터 레지스트리는 NFO(네트워크 함수 연산자) Arc K8s 확장을 사용하여 사용하도록 설정됩니다. 다음 CLI는 Nexus K8s 클러스터에서 클러스터 레지스트리를 사용하도록 설정하는 방법을 보여 줍니다.
az k8s-extension create --cluster-name
--cluster-type {connectedClusters}
--extension-type {Microsoft.Azure.HybridNetwork}
--name
--resource-group
--scope {cluster}
--release-namespace {azurehybridnetwork}
--release-train {preview, stable}
--config Microsoft.CustomLocation.ServiceAccount=azurehybridnetwork-networkfunction-operator
[--auto-upgrade {false, true}]
[--config global.networkfunctionextension.enableClusterRegistry={false, true}]
[--config global.networkfunctionextension.enableLocalRegistry={false, true}]
[--config global.networkfunctionextension.enableEarlyLoading={false,true}]
[--config global.networkfunctionextension.clusterRegistry.highAvailability.enabled={true, false}]
[--config global.networkfunctionextension.clusterRegistry.autoScaling.enabled={true, false}]
[--config global.networkfunctionextension.webhook.highAvailability.enabled={true, false}]
[--config global.networkfunctionextension.webhook.autoScaling.enabled={true, false}]
[--config global.networkfunctionextension.clusterRegistry.storageClassName=]
[--config global.networkfunctionextension.clusterRegistry.storageSize=]
[--config global.networkfunctionextension.webhook.pod.mutation.matchConditionExpression=]
[--config global.networkfunctionextension.clusterRegistry.clusterRegistryGCCadence=]
[--config global.networkfunctionextension.clusterRegistry.clusterRegistryGCThreshold=]
[--version]
네트워크 기능 운영자 Arc K8s 확장에서 클러스터 레지스트리 기능을 사용하도록 설정하면 AOSM 아티팩트 저장소에서 배포된 모든 컨테이너 이미지는 Nexus K8s 클러스터에서 로컬로 액세스할 수 있습니다. 사용자는 클러스터 레지스트리에 대한 영구 스토리지 크기를 선택할 수 있습니다.
참고 항목
사용자가 값을 입력하지 않으면 100 GB의 기본 영구 볼륨이 사용됩니다.
클러스터 레지스트리 구성 요소
클러스터 레지스트리 기능은 대상 에지 클러스터에 도우미 Pod를 배포하여 NFO 확장을 지원합니다.
구성 요소 조정자
- 이 주 Pod는 클러스터에서 실행되는 Microsoft.Kubernetes RP(리소스 공급자), 하이브리드 릴레이 및 Arc 에이전트의 도움으로 K8sBridge에서 만든 구성 요소 CRO(사용자 지정 리소스 개체)를 조정합니다.
Pod 변경 웹후크
- 이러한 Pod는 Kubernetes 변경 허용 웹후크를 구현하여 변경 API의 인스턴스를 제공합니다. 변경 API는 다음 두 가지 작업을 수행합니다.
- AOSM 아티팩트 저장소 ACR(컨테이너 레지스트리)을 대체하여 이미지 레지스트리 경로를 로컬 레지스트리 IP로 수정합니다.
- 에지 클러스터에 아티팩트 CR을 만듭니다.
아티팩트 조정자
- 이 Pod는 변경 웹후크에서 만든 아티팩트 CRO를 조정합니다.
Registry
- 이 Pod는 CNF에 대한 컨테이너 이미지를 저장하고 검색합니다.
클러스터 레지스트리 가비지 수집
AOSM 클러스터 확장은 GC(백그라운드 가비지 수집) 작업을 실행하여 컨테이너 이미지를 정기적으로 정리합니다. 이 작업은 일정에 따라 실행되고, 클러스터 레지스트리 사용량이 지정된 임계값에 도달했는지 확인하고, 이 경우 가비지 수집 프로세스를 시작합니다. 작업 일정 및 임계값은 최종 사용자가 구성하지만 기본적으로 작업은 0% 사용률 임계값에서 하루에 한 번 실행됩니다.
가비지 이미지 매니페스트 정리
AOSM은 Pod 소유자 리소스와 클러스터 레지스트리의 이미지 사용 간에 참조를 유지 관리합니다. 이미지 정리 프로세스를 시작하면 Pod에 연결되지 않은 이미지가 식별되어 일시 삭제를 실행하여 클러스터 레지스트리에서 제거합니다. 이러한 유형의 일시 삭제는 클러스터 레지스트리 스토리지 공간을 즉시 해제하지 않습니다. 실제 이미지 파일 제거는 아래에 설명된 CNCF 배포 레지스트리 가비지 수집에 따라 달라집니다.
참고 항목
Pod의 소유자와 해당 컨테이너 이미지 간의 참조는 AOSM이 실수로 이미지를 삭제하지 않도록 합니다. 예를 들어 복제본 세트 Pod가 다운되면 AOSM은 컨테이너 이미지를 역참조하지 않습니다. AOSM은 복제본 세트가 삭제될 때만 컨테이너 이미지를 역참조합니다. Kubernetes 작업 및 디먼셋에서 관리하는 Pod에도 동일한 원칙이 적용됩니다.
CNCF 가비지 수집 배포
AOSM은 오픈 소스 CNCF 배포 레지스트리를 사용하여 클러스터 레지스트리를 설정합니다. 따라서 AOSM은 가비지 수집에서 제공하는 가비지 수집 기능을 사용합니다. | CNCF 배포 전반적으로 표준 2단계 "표시 및 스윕" 프로세스를 따라 이미지 파일을 삭제하여 레지스트리 스토리지 공간을 확보합니다.
참고 항목
이 프로세스에는 읽기 전용 모드의 클러스터 레지스트리가 필요합니다. 레지스트리가 읽기 전용 모드가 아닌 경우 이미지를 업로드하는 경우 이미지 계층이 실수로 삭제되어 손상된 이미지가 발생할 위험이 있습니다. 레지스트리에는 최대 1분 동안 읽기 전용 모드로 잠금이 필요합니다. 따라서 AOSM은 읽기 전용 모드에서 클러스터 레지스트리를 사용하는 경우 다른 NF 배포를 연기합니다.
가비지 수집 구성 매개 변수
다음 매개 변수는 가비지 수집 작업에 대한 일정 및 임계값을 구성합니다.
- global.networkfunctionextension.clusterRegistry.clusterRegistryGCCadence
- global.networkfunctionextension.clusterRegistry.clusterRegistryGCThreshold
- 자세한 구성 정보는 최신 네트워크 함수 확장 설치 지침을 참조하세요.
고가용성 및 복원력 고려 사항
AOSM NF 확장은 변경 웹후크 및 에지 레지스트리를 사용하여 주요 기능을 지원합니다.
- 이미지 경로를 사용자 지정할 필요 없이 Helm 차트를 온보딩합니다.
- Pod 작업을 가속화하고 연결이 끊어진 모드 지원을 사용하도록 설정하는 로컬 클러스터 레지스트리입니다. 이러한 필수 구성 요소는 고가용성 및 복원력이 있어야 합니다.
HA에 대한 변경 내용 요약
HA를 사용하면 클러스터 레지스트리 및 웹후크 Pod는 이제 최소 3개의 복제본과 최대 5개의 복제본이 있는 복제본 세트를 지원합니다. 복제본 세트 키 구성은 다음과 같습니다.
- 점진적 출시 업그레이드 전략이 사용됩니다.
- PodDisruptionBudgets(PDB)는 자발적 중단 시 가용성에 사용됩니다.
- Pod 선호도 방지는 노드 간에 Pod를 균등하게 분산하는 데 사용됩니다.
- 준비 상태 프로브는 트래픽을 제공하기 전에 Pod가 준비되었는지 확인하는 데 사용됩니다.
- AOSM 워크로드 Pod는 시스템 노드 풀에만 할당됩니다.
- Pod는 CPU 및 메모리 부하에서 수평으로 확장됩니다.
복제본
- 애플리케이션의 여러 복사본 또는 복제본을 실행하는 클러스터는 첫 번째 수준의 중복성을 제공합니다. 클러스터 레지스트리와 웹후크는 모두 복제본이 3개 이상인 'kind:deployment'로 정의됩니다.
DeploymentStrategy
- rollUpdate 전략은 가동 중지 시간 업그레이드를 달성하고 애플리케이션의 점진적 출시를 지원하는 데 사용됩니다. 기본 maxUnavailable 구성을 사용하면 중복 정책을 충족하기에 충분한 Pod가 생성될 때까지 한 번에 하나의 Pod만 삭제할 수 있습니다.
Pod 중단 예산
- PDB(정책 중단 예산)는 자발적인 중단으로부터 Pod를 보호하고 Deployment, ReplicaSet 또는 StatefulSet 개체와 함께 배포됩니다. AOSM 연산자 Pod의 경우 minAvailable 매개 변수가 2인 PDB가 사용됩니다.
Pod 선호도 방지
- Pod 선호도 방지는 클러스터의 여러 노드에서 애플리케이션 Pod의 배포를 제어합니다. HA를 사용하는 경우 다음 매개 변수를 사용하는 AOSM Pod 선호도 방지:
- 일정 모드는 규칙이 적용되는 방법을 정의하는 데 사용됩니다.
- requiredDuringSchedulingIgnoredDuringExecution(Hard): 정의된 규칙을 충족하는 방식으로 Pod를 예약해야 합니다. 규칙의 요구 사항을 충족하는 토폴로지를 사용할 수 없는 경우 Pod는 예약되지 않습니다.
- preferredDuringSchedulingIgnoredDuringExecution(Soft): 이 규칙 유형은 Pod 예약에 대한 기본 설정을 나타내지만 엄격한 요구 사항을 적용하지는 않습니다. 기본 설정 조건을 충족하는 토폴로지를 사용할 수 있는 경우 Kubernetes는 Pod를 예약합니다. 이러한 토폴로지를 사용할 수 없는 경우에도 기본 설정을 충족하지 않는 다른 노드에서 Pod를 예약할 수 있습니다.
- 레이블 선택기는 선호도가 적용되는 특정 Pod를 대상으로 하는 데 사용됩니다.
- 토폴로지 키는 노드 요구 사항을 정의하는 데 사용됩니다.
- 일정 모드는 규칙이 적용되는 방법을 정의하는 데 사용됩니다.
- Nexus 노드 배치는 의도적으로 영역 전체에 균등하게 분산되므로 노드 간에 Pod를 분산하면 영역 중복도 부여됩니다.
- AOSM 연산자 Pod는 가중치가 100인 소프트 안티 선호도를 사용하고 노드 호스트 이름을 기반으로 하는 토폴로지 키가 사용됩니다.
스토리지
- AOSM 에지 레지스트리에는 노드 간에 분산된 여러 복제본이 있으므로 영구 볼륨은 RWX(ReadWriteMany) 액세스 모드를 지원해야 합니다. PVC "nexus-shared" 볼륨은 Nexus 클러스터에서 사용할 수 있으며 RWX 액세스 모드를 지원합니다.
준비 프로브를 통한 모니터링
- AOSM은 http 준비 상태 프로브를 사용하여 컨테이너가 트래픽 수락을 시작할 준비가 된 시기를 파악합니다. Pod는 모든 컨테이너가 준비되면 준비된 것으로 간주됩니다. Pod가 준비되지 않으면 서비스 부하 분산 장치에서 제거됩니다.
시스템 노드 풀
- 모든 AOSM 연산자 Pod가 시스템 노드 풀에 할당됩니다. 이 풀은 잘못 구성되거나 루즈 애플리케이션 Pod가 시스템 Pod에 영향을 주지 않도록 방지합니다.
수평 크기 조정
- Kubernetes에서 HPA(HorizontalPodAutoscaler)는 수요에 맞게 워크로드 크기를 자동으로 조정하기 위해 워크로드 리소스를 자동으로 업데이트합니다. AOSM 연산자 Pod에는 다음과 같은 HPA 정책 매개 변수가 구성됩니다.
- 최소 복제본은 3개입니다.
- 최대 복제본은 5개입니다.
- 80%의 cpu 및 메모리에 대한 targetAverageUtilization입니다.
리소스 한도
- 리소스 제한은 AOSM Pod가 실행되는 노드에서 리소스 오버로드를 방지하는 데 사용됩니다. AOSM은 두 개의 리소스 매개 변수를 사용하여 CPU 및 메모리 소비를 모두 제한합니다.
- 리소스 요청 - Pod에 예약해야 하는 최소 금액입니다. 이 값은 애플리케이션에 대한 일반 부하에서 리소스 사용량으로 설정해야 합니다.
- 리소스 제한 - 사용량이 종료되는 한도에 도달하는 경우 Pod에서 사용해야 하는 최대 크기입니다. 모든 AOSM 연산자 컨테이너는 적절한 요청, CPU 및 메모리 제한으로 구성됩니다.
알려진 HA 제한 사항
- 시스템 에이전트 풀에 단일 활성 노드가 있는 NAKS(Nexus AKS) 클러스터는 고가용성 클러스터에 적합하지 않습니다. Nexus 프로덕션 토폴로지에서는 시스템 에이전트 풀에서 세 개 이상의 활성 노드를 사용해야 합니다.
- nexus 공유 스토리지 클래스는 NFS(네트워크 파일 시스템) 스토리지 서비스입니다. 이 NFS 스토리지 서비스는 CSN(Cloud Service Network)에서 사용할 수 있습니다. CSN에 연결된 모든 Nexus Kubernetes 클러스터는 이 공유 스토리지 풀에서 영구 볼륨을 프로비전할 수 있습니다. 스토리지 풀은 현재 NC(네트워크 클라우드) 3.10을 기준으로 최대 1TiB 크기로 제한됩니다. 여기서 NC 3.12에는 16TiB 옵션이 있습니다.
- Pod Anti 선호도는 Pod의 초기 배치, 후속 Pod 크기 조정 및 복구만 처리하며 표준 K8s 예약 논리를 따릅니다.
질문과 대답
이전에 배포된 CNF 애플리케이션에서 AOSM 클러스터 레지스트리를 사용할 수 있나요?
클러스터 레지스트리 없이 이미 배포된 CNF 애플리케이션이 있는 경우 컨테이너 이미지를 자동으로 사용할 수 없습니다. AOSM을 사용하여 네트워크 기능을 배포하기 전에 클러스터 레지스트리를 사용하도록 설정해야 합니다.
배포 후 스토리지 크기를 변경할 수 있나요?
초기 배포 후에는 스토리지 크기를 수정할 수 없습니다. 볼륨 크기를 시작 크기의 3배에서 4배로 구성하는 것을 권장합니다.
클러스터 리포지토리에 현재 저장된 파일을 나열할 수 있나요?
다음 명령을 사용하여 사람이 읽을 수 있는 형식으로 파일을 나열할 수 있습니다.
kubectl get artifacts -A -o jsonpath='{range .items[*]}{.spec.sourceArtifact}'
이 명령은 다음과 유사한 출력을 생성해야 합니다.
ppleltestpublisheras2f88b55037.azurecr.io/nginx:1.0.0