4.12. KMM Hub 및 spoke
허브 및 스포크 시나리오에서 많은 스포크 클러스터는 중앙의 강력한 허브 클러스터에 연결됩니다. KMM(커널 모듈 관리)은 hub 및 spoke 환경에서 작동하는 RHACM(Red Hat Advanced Cluster Management)에 따라 다릅니다.
KMM은 KMM 기능을 분리하여 Hub 및 spoke 환경과 호환됩니다. ManagedClusterModule
CRD(Custom Resource Definition)는 기존 모듈
CRD를 래핑하여 스케이크 클러스터를 선택하도록 확장됩니다. 또한 Hub 클러스터에서 이미지를 빌드하고 서명하는 새로운 독립 실행형 컨트롤러인 KMM-Hub도 제공됩니다.
hub 및 spoke 설정에서 spokes는 hub 클러스터에서 중앙에서 관리하는 리소스 제한 클러스터에 중점을 두고 있습니다. spokes는 리소스 집약적인 기능이 비활성화된 KMM의 단일 클러스터 버전을 실행합니다. KMM을 이 환경에 맞게 조정하려면 허브에서 비용이 많이 드는 작업을 처리하는 동안 스포크에서 실행되는 워크로드를 최소화해야 합니다.
커널 모듈 이미지를 빌드하고 .ko
파일에 서명하면 허브에서 실행해야 합니다. 모듈 로더 및 장치 플러그인 DaemonSet의 예약은 spokes
에서만 발생할 수 있습니다.
4.12.1. KMM-Hub
KMM 프로젝트는 허브 클러스터 전용 KMM-Hub 버전을 제공합니다. KMM-Hub는 spokes에서 실행되는 모든 커널 버전을 모니터링하고 커널 모듈을 수신해야 하는 클러스터의 노드를 결정합니다.
KMM-Hub는 이미지 빌드 및 kmod 서명과 같은 모든 컴퓨팅 집약적인 작업을 실행하고 trimmed-down Module
이 RHACM을 통해 spokes로 전송할 수 있도록 준비합니다.
KMM-Hub는 허브 클러스터에서 커널 모듈을 로드하는 데 사용할 수 없습니다. KMM의 일반 버전을 설치하여 커널 모듈을 로드합니다.
추가 리소스
4.12.2. KMM-Hub 설치
다음 방법 중 하나를 사용하여 KMM-Hub를 설치할 수 있습니다.
- OLM(Operator Lifecycle Manager) 사용
- KMM 리소스 생성
추가 리소스
4.12.2.1. Operator Lifecycle Manager를 사용하여 KMM-Hub 설치
OpenShift 콘솔의 Operators 섹션을 사용하여 KMM-Hub를 설치합니다.
4.12.2.2. KMM 리소스를 생성하여 KMM-Hub 설치
절차
-
KMM-Hub를 프로그래밍 방식으로 설치하려면 다음 리소스를 사용하여
네임스페이스
,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.12.3. ManagedClusterModule
CRD 사용
ManagedClusterModule
CRD(Custom Resource Definition)를 사용하여 spoke 클러스터에서 커널 모듈 배포를 구성합니다. 이 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: 1 selector: 2 node-wants-my-mcm: 'true' spokeNamespace: <some-namespace> 3 selector: 4 wants-my-mcm: 'true'
.spec.moduleSpec
에 빌드 또는 서명 지침이 있는 경우 해당 Pod는 Operator의 네임스페이스의 허브 클러스터에서 실행됩니다.
.spec.selector가 하나 이상의
경우 KMM-Hub는 해당 네임스페이스에 ManagedCluster
리소스와 일치하는ManifestWork
리소스를 생성합니다. ManifestWork
에는 커널 매핑이 유지되지만 모든 build
및 sign
하위 섹션이 제거된 트리다운 모듈
리소스가 포함되어 있습니다. 태그로 끝나는 이미지 이름이 포함된 containerImage
필드는 동일한 다이제스트로 교체됩니다.
4.12.4. spoke에서 KMM 실행
spoke에 KMM을 설치한 후에는 추가 작업이 필요하지 않습니다. 허브에서 ManagedClusterModule
오브젝트를 생성하여 spoke 클러스터에 커널 모듈을 배포합니다.
절차
RHACM 정책
오브젝트를 통해 spokes 클러스터에 KMM을 설치할 수 있습니다. Operator 허브에서 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_MANAGED 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: 1 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
- 1
spec.clusterSelector
필드는 선택한 클러스터만 대상으로 지정하도록 사용자 지정할 수 있습니다.