19.14. 클러스터 활동 모니터링을 위한 RAN 정책 적용
제로 터치 프로비저닝(ZTP)은 RHACM(Red Hat Advanced Cluster Management)을 사용하여 정책 기반 거버넌스 접근 방식을 통해 RAN(Radio Access Network) 정책을 적용하여 클러스터 활동을 자동으로 모니터링합니다.
PolicyGen(정책 생성기)은 사전 정의된 사용자 정의 리소스에서 ACM 정책을 쉽게 생성할 수 있는 Kustomize 플러그인입니다. 세 가지 주요 항목인 Policy categorization, Source CR 정책 및 PolicyGenTemplate이 있습니다. PolicyGen은 이러한 정책을 사용하여 정책 및 해당 배치 바인딩 및 규칙을 생성합니다.
다음 다이어그램에서는 RAN 정책 생성자가 GitOps 및 ACM과 상호 작용하는 방법을 보여줍니다.
RAN 정책은 다음 세 개의 기본 그룹으로 분류됩니다.
- Common
-
일반
범주에 존재하는 정책은 사이트 계획으로 표현할 모든 클러스터에 적용됩니다. - 그룹
-
그룹
범주에 있는 정책은 클러스터 그룹에 적용됩니다. 모든 클러스터 그룹은 그룹 범주에 있는 자체 정책을 보유할 수 있습니다. 예를 들어Groups/group1
에는group1
에 속하는 클러스터에 적용되는 자체 정책이 있을 수 있습니다. - 사이트
-
Sites
범주에 있는 정책은 특정 클러스터에 적용됩니다. 모든 클러스터에는Sites
범주에 있는 자체 정책이 있을 수 있습니다. 예를 들어Sites/cluster1
에는 cluster1
에 적용되는 자체 정책이 적용됩니다.
다음 다이어그램에서는 정책이 생성되는 방법을 보여줍니다.
19.14.1. 소스 사용자 정의 리소스 정책 적용
소스 사용자 정의 리소스 정책에는 다음이 포함됩니다.
- SR-IOV 정책
- PTP 정책
- Performance Add-on Operator 정책
- MachineConfigPool 정책
- SCTP 정책
메타데이터 또는 spec/data에 대한 오버레이를 고려하여 ACM 정책을 생성하는 소스 사용자 지정 리소스를 정의해야 합니다. 예를 들어 common-namespace-policy
에는 모든 관리 클러스터에 있는 네임스페이스
정의가 포함되어 있습니다. 이 네임스페이스
는 Common 카테고리 아래에 배치되며 모든 클러스터에서 해당 사양 또는 데이터를 변경하지 않습니다.
네임스페이스 정책 예
다음 예에서는 이 네임스페이스의 소스 사용자 정의 리소스를 보여줍니다.
apiVersion: v1 kind: Namespace metadata: name: openshift-sriov-network-operator labels: openshift.io/run-level: "1"
출력 예
이 네임스페이스
를 적용하는 정책에는 다음 예와 같이 위의 변경 없이 정의한 네임스페이스
가 포함됩니다.
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: common-sriov-sub-ns-policy namespace: common-sub annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 spec: remediationAction: enforce disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: common-sriov-sub-ns-policy-config spec: remediationAction: enforce severity: low namespaceselector: exclude: - kube-* include: - '*' object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 kind: Namespace metadata: labels: openshift.io/run-level: "1" name: openshift-sriov-network-operator
SRIOV 정책 예
다음 예는 각 클러스터에 대해 다른 사양을 가진 다른 클러스터에 존재하는 SriovNetworkNodePolicy
정의를 보여줍니다. 이 예제에서는 SriovNetworkNodePolicy
의 소스 사용자 정의 리소스도 표시합니다.
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: sriov-nnp namespace: openshift-sriov-network-operator spec: # The $ tells the policy generator to overlay/remove the spec.item in the generated policy. deviceType: $deviceType isRdma: false nicSelector: pfNames: [$pfNames] nodeSelector: node-role.kubernetes.io/worker: "" numVfs: $numVfs priority: $priority resourceName: $resourceName
출력 예
SriovNetworkNodePolicy
이름과 네임스페이스
는 모든 클러스터에 대해 동일하므로 둘 다 소스 SriovNetworkNodePolicy
에 정의됩니다. 그러나 생성된 정책에는 각 클러스터에 대한 정책을 조정하기 위해 입력 매개 변수로
가 필요합니다. 생성된 정책은 다음 예에 표시되어 있습니다.
$deviceType
, $numVfs
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: site-du-sno-1-sriov-nnp-mh-policy namespace: sites-sub annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 spec: remediationAction: enforce disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: site-du-sno-1-sriov-nnp-mh-policy-config spec: remediationAction: enforce severity: low namespaceselector: exclude: - kube-* include: - '*' object-templates: - complianceType: musthave objectDefinition: apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: sriov-nnp-du-mh namespace: openshift-sriov-network-operator spec: deviceType: vfio-pci isRdma: false nicSelector: pfNames: - ens7f0 nodeSelector: node-role.kubernetes.io/worker: "" numVfs: 8 resourceName: du_mh
필수 입력 매개 변수를 $value
(예: $deviceType
)로 정의는 필수가 아닙니다. $
는 정책 생성기를 오버레이에 지시하거나 생성된 정책에서 항목을 제거합니다. 그렇지 않으면 값이 변경되지 않습니다.
19.14.2. PolicyGenTemplate
PolicyGenTemplate.yaml
파일은 PolicyGen에 생성된 정책과 오버레이해야 하는 항목을 분류할 위치를 알려주는 CRD(Custom Resource Definition)입니다.
다음 예제에서는 PolicyGenTemplate.yaml
파일을 보여줍니다.
apiVersion: ran.openshift.io/v1 kind: PolicyGenTemplate metadata: name: "group-du-sno" namespace: "group-du-sno" spec: bindingRules: group-du-sno: "" mcp: "master" sourceFiles: - fileName: ConsoleOperatorDisable.yaml policyName: "console-policy" - fileName: ClusterLogging.yaml policyName: "cluster-log-policy" spec: curation: curator: schedule: "30 3 * * *" collection: logs: type: "fluentd" fluentd: {}
group-du-ranGen.yaml
파일은 group -du라는 그룹에 정책 그룹을
정의합니다. 이 파일은 sourceFiles
에 정의된 기타 정책의 노드 선택기로 사용되는 MachineConfigPool
worker-du
를 정의합니다. ACM 정책은 source Files
에 존재하는 모든 소스 파일에 대해 생성됩니다. 또한 그룹-두
정책에 대한 클러스터 선택 규칙을 적용하기 위해 단일 배치 바인딩 및 배치 규칙이 생성됩니다.
소스 파일 PtpConfigSlave.yaml
을 예로 사용하여 PtpConfigSlave에는 PtpConfig
CR(사용자 정의
리소스)에 대한 정의가 있습니다. PtpConfigSlave
예제에 대해 생성된 정책의 이름은 group-du-ptp-config-policy
입니다. 생성된 group-du-ptp-config-policy
에 정의된 PtpConfig
CR은 du-ptp-slave
로 지정됩니다. PtpConfigSlave.yaml
에 정의된
사양은 소스 파일에 정의된 다른 사양
항목과 함께 du-ptp-slave
아래에 배치됩니다.
다음 예제에서는 group-du-ptp-config-policy
를 보여줍니다.
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: group-du-ptp-config-policy namespace: groups-sub annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 spec: remediationAction: enforce disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: group-du-ptp-config-policy-config spec: remediationAction: enforce severity: low namespaceselector: exclude: - kube-* include: - '*' object-templates: - complianceType: musthave objectDefinition: apiVersion: ptp.openshift.io/v1 kind: PtpConfig metadata: name: slave namespace: openshift-ptp spec: recommend: - match: - nodeLabel: node-role.kubernetes.io/worker-du priority: 4 profile: slave profile: - interface: ens5f0 name: slave phc2sysOpts: -a -r -n 24 ptp4lConf: | [global] # # Default Data Set # twoStepFlag 1 slaveOnly 0 priority1 128 priority2 128 domainNumber 24 .....
19.14.3. 사용자 정의 리소스 정책 생성 시 고려 사항
-
ACM 정책을 생성하는 데 사용되는 사용자 지정 리소스는 메타데이터 및 spec/data의 오버레이를 고려하여 정의해야 합니다. 예를 들어 사용자 지정 리소스
metadata.name
이 클러스터 간에 변경되지 않으면 사용자 정의 리소스 파일에서metadata.name
값을 설정해야 합니다. 사용자 지정 리소스에 동일한 클러스터에 여러 개의 인스턴스가 있는 경우 사용자 지정 리소스metadata.name
을 정책 템플릿 파일에 정의해야 합니다. -
특정 머신 구성 풀에 대한 노드 선택기를 적용하려면 정책 템플릿에서 정의된 mcp 값을 사용하여
$mcp
값을 오버레이하도록 노드 선택기 값을$mcp
로 설정해야 합니다. - 서브스크립션 소스 파일은 변경되지 않습니다.
19.14.4. RAN 정책 생성
사전 요구 사항
- Kustomize 설치
- Kustomize Policy Generator 플러그인설치
절차
policyGenerator
파일을 구성합니다. 다음 예는 PolicyGenerator 정의를 보여줍니다..yaml 파일을 참조하도록 thekustomization
.yamlapiVersion: policyGenerator/v1 kind: PolicyGenerator metadata: name: acm-policy namespace: acm-policy-generator # The arguments should be given and defined as below with same order --policyGenTempPath= --sourcePath= --outPath= --stdout --customResources argsOneLiner: ./ranPolicyGenTempExamples ./sourcePolicies ./out true false
다음과 같습니다.
-
policyGenTempPath
는policyGenTemp
파일의 경로입니다. -
source
path : 소스 정책의 경로입니다. -
outPath
: 생성된 ACM 정책을 저장하는 경로입니다. -
stdout
:true인
경우 생성된 정책을 콘솔에 인쇄합니다. -
customResources
:true
가 ACM 정책이 없는sourcePolicies
파일에서 CR을 생성하는 경우
-
다음 명령을 실행하여 PolicyGen을 테스트합니다.
$ cd cnf-features-deploy/ztp/ztp-policy-generator/
$ XDG_CONFIG_HOME=./ kustomize build --enable-alpha-plugins
다음 예와 같이 예상 정책이 포함된
아웃
디렉터리가 생성됩니다.out ├── common │ ├── common-log-sub-ns-policy.yaml │ ├── common-log-sub-oper-policy.yaml │ ├── common-log-sub-policy.yaml │ ├── common-pao-sub-catalog-policy.yaml │ ├── common-pao-sub-ns-policy.yaml │ ├── common-pao-sub-oper-policy.yaml │ ├── common-pao-sub-policy.yaml │ ├── common-policies-placementbinding.yaml │ ├── common-policies-placementrule.yaml │ ├── common-ptp-sub-ns-policy.yaml │ ├── common-ptp-sub-oper-policy.yaml │ ├── common-ptp-sub-policy.yaml │ ├── common-sriov-sub-ns-policy.yaml │ ├── common-sriov-sub-oper-policy.yaml │ └── common-sriov-sub-policy.yaml ├── groups │ ├── group-du │ │ ├── group-du-mc-chronyd-policy.yaml │ │ ├── group-du-mc-mount-ns-policy.yaml │ │ ├── group-du-mcp-du-policy.yaml │ │ ├── group-du-mc-sctp-policy.yaml │ │ ├── group-du-policies-placementbinding.yaml │ │ ├── group-du-policies-placementrule.yaml │ │ ├── group-du-ptp-config-policy.yaml │ │ └── group-du-sriov-operconfig-policy.yaml │ └── group-sno-du │ ├── group-du-sno-policies-placementbinding.yaml │ ├── group-du-sno-policies-placementrule.yaml │ ├── group-sno-du-console-policy.yaml │ ├── group-sno-du-log-forwarder-policy.yaml │ └── group-sno-du-log-policy.yaml └── sites └── site-du-sno-1 ├── site-du-sno-1-policies-placementbinding.yaml ├── site-du-sno-1-policies-placementrule.yaml ├── site-du-sno-1-sriov-nn-fh-policy.yaml ├── site-du-sno-1-sriov-nnp-mh-policy.yaml ├── site-du-sno-1-sriov-nw-fh-policy.yaml ├── site-du-sno-1-sriov-nw-mh-policy.yaml └── site-du-sno-1-.yaml
공통 정책은 모든 클러스터에 적용되므로 플랫입니다. 그러나 그룹 및 사이트에는 다른 클러스터에 적용되므로 각 그룹 및 사이트의 하위 디렉터리가 있습니다.