4.17. KMM 허브 앤 스포크
허브 앤 스포크 시나리오에서는 많은 스포크 클러스터가 중앙의 강력한 허브 클러스터에 연결됩니다. 커널 모듈 관리(KMM)는 허브 앤 스포크 환경에서 작동하기 위해 Red Hat Advanced Cluster Management(RHACM)에 의존합니다.
KMM은 KMM 기능을 분리하여 허브 앤 스포크 환경과 호환됩니다. ManagedClusterModule 사용자 정의 리소스 정의(CRD)는 기존 모듈 CRD를 래핑하고 선택한 Spoke 클러스터로 확장하기 위해 제공됩니다. 또한 허브 클러스터에서 이미지와 서명 모듈을 구축하는 새로운 독립형 컨트롤러인 KMM-Hub도 제공됩니다.
허브 앤 스포크 설정에서 스포크는 허브 클러스터에서 중앙 관리되는 집중적이고 리소스가 제한된 클러스터입니다. 스포크는 리소스를 많이 사용하는 기능이 비활성화된 KMM의 단일 클러스터 버전을 실행합니다. KMM을 이러한 환경에 적용하려면 스포크에서 실행되는 작업 부하를 최소한으로 줄이고, 허브에서 비용이 많이 드는 작업을 처리해야 합니다.
커널 모듈 이미지를 빌드하고 .ko 파일에 서명하는 작업은 허브에서 실행해야 합니다. 모듈 로더와 장치 플러그인 DaemonSets 의 스케줄링은 스포크에서만 발생할 수 있습니다.
4.17.1. KMM-Hub 링크 복사링크가 클립보드에 복사되었습니다!
KMM 프로젝트는 허브 클러스터 전용 KMM 에디션인 KMM-Hub를 제공합니다. KMM-Hub는 스포크에서 실행되는 모든 커널 버전을 모니터링하고 클러스터에서 커널 모듈을 받아야 하는 노드를 결정합니다.
KMM-Hub는 이미지 빌드, kmod 서명과 같은 모든 컴퓨팅 집약적 작업을 실행하고, RHACM을 통해 스포크로 전송될 수 있도록 축소된 모듈을 준비합니다.
KMM-Hub를 사용하여 허브 클러스터에 커널 모듈을 로드할 수 없습니다. 커널 모듈을 로드하려면 KMM 일반 버전을 설치하세요.
4.17.2. KMM-Hub 설치 링크 복사링크가 클립보드에 복사되었습니다!
다음 방법 중 하나를 사용하여 KMM-Hub를 설치할 수 있습니다.
- OLM(Operator Lifecycle Manager)을 사용하여
- KMM 리소스 생성
4.17.2.1. Operator Lifecycle Manager를 사용하여 KMM-Hub 설치 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift 콘솔의 운영자 섹션을 사용하여 KMM-Hub를 설치합니다.
4.17.2.2. KMM 리소스를 생성하여 KMM-Hub 설치 링크 복사링크가 클립보드에 복사되었습니다!
프로세스
-
KMM-Hub를 프로그래밍 방식으로 설치하려면 다음 리소스를 사용하여
Namespace,OperatorGroup및Subscription리소스를 만들 수 있습니다.
---
apiVersion: v1
kind: Namespace
metadata:
name: openshift-kmm-hub
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: kernel-module-management-hub
namespace: openshift-kmm-hub
---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: kernel-module-management-hub
namespace: openshift-kmm-hub
spec:
channel: stable
installPlanApproval: Automatic
name: kernel-module-management-hub
source: redhat-operators
sourceNamespace: openshift-marketplace
4.17.3. ManagedClusterModule CRD 사용 링크 복사링크가 클립보드에 복사되었습니다!
ManagedClusterModule 사용자 정의 리소스 정의(CRD)를 사용하여 스포크 클러스터에서 커널 모듈 배포를 구성합니다. 이 CRD는 클러스터 범위이며 모듈 사양을 래핑하고 다음과 같은 추가 필드를 추가합니다.
apiVersion: hub.kmm.sigs.x-k8s.io/v1beta1
kind: ManagedClusterModule
metadata:
name: <my-mcm>
# No namespace, because this resource is cluster-scoped.
spec:
moduleSpec:
selector:
node-wants-my-mcm: 'true'
spokeNamespace: <some-namespace>
selector:
wants-my-mcm: 'true'
.spec.moduleSpec 에 빌드 또는 서명 지침이 있는 경우 해당 Pod는 운영자 네임스페이스의 허브 클러스터에서 실행됩니다.
.spec.selector matches가 하나 이상의 ManagedCluster 리소스와 일치하는 경우 KMM-Hub는 해당 네임스페이스에 ManifestWork 리소스를 생성합니다. ManifestWork 에는 축소된 모듈 리소스가 포함되어 있으며, 커널 매핑은 보존되지만 모든 빌드 및 서명 하위 섹션은 제거됩니다. 태그로 끝나는 이미지 이름을 포함하는 containerImage 필드는 해당 다이제스트에 대응하는 이미지로 대체됩니다.
4.17.4. 스포크에서 KMM 실행 링크 복사링크가 클립보드에 복사되었습니다!
스포크에 KMM(커널 모듈 관리)을 설치한 후에는 더 이상 작업이 필요하지 않습니다. 허브에서 ManagedClusterModule 객체를 생성하여 스포크 클러스터에 커널 모듈을 배포합니다.
프로세스
RHACM 정책 객체를 통해 스포크 클러스터에 KMM을 설치할 수 있습니다. 정책은 OperatorHub에서 KMM을 설치하고 경량 스포크 모드로 실행하는 것 외에도, RHACM 에이전트에서 모듈 리소스를 관리하는 데 필요한 추가 RBAC를 구성합니다.
다음 RHACM 정책을 사용하여 스포크 클러스터에 KMM을 설치하세요.
--- apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: install-kmm spec: remediationAction: enforce disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: install-kmm spec: severity: high object-templates: - complianceType: mustonlyhave objectDefinition: apiVersion: v1 kind: Namespace metadata: name: openshift-kmm - complianceType: mustonlyhave objectDefinition: apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: kmm namespace: openshift-kmm spec: upgradeStrategy: Default - complianceType: mustonlyhave objectDefinition: apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: kernel-module-management namespace: openshift-kmm spec: channel: stable config: env: - name: KMM_MANAGED1 value: "1" installPlanApproval: Automatic name: kernel-module-management source: redhat-operators sourceNamespace: openshift-marketplace - complianceType: mustonlyhave objectDefinition: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kmm-module-manager rules: - apiGroups: [kmm.sigs.x-k8s.io] resources: [modules] verbs: [create, delete, get, list, patch, update, watch] - complianceType: mustonlyhave objectDefinition: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: klusterlet-kmm subjects: - kind: ServiceAccount name: klusterlet-work-sa namespace: open-cluster-management-agent roleRef: kind: ClusterRole name: kmm-module-manager apiGroup: rbac.authorization.k8s.io --- apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: all-managed-clusters spec: clusterSelector:2 matchExpressions: [] --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: install-kmm placementRef: apiGroup: apps.open-cluster-management.io kind: PlacementRule name: all-managed-clusters subjects: - apiGroup: policy.open-cluster-management.io kind: Policy name: install-kmm