19.14. 应用 RAN 策略来监控集群活动
ZTP 使用 Red Hat Advanced Cluster Management (RHACM) 来使用基于策略的监管方法自动监控集群活动,以应用无线访问网络 (RAN) 策略。
策略生成器 (PolicyGen) 是一个 Kustomize 插件,可帮助从预定义的自定义资源创建 ACM 策略。有三个主要项目:策略类别、源 CR 策略和 PolicyGenTemplate。PolicyGen 依赖于这些策略生成策略及其放置绑定和规则。
下图显示了 RAN 策略生成器如何与 GitOps 和 ACM 交互。
RAN 策略分为三个主要组:
- Common
-
Common category中存在的策略应用于由站点计划表示的所有集群。 - 组
-
Groups类别中存在的策略应用到一组集群。每个集群组都可以具有自己在组类别下的策略。例如,Groups/group1可以具有自己的策略,应用到属于group1 的群集。 - Sites
-
Sites类别中存在的策略应用到特定的集群。任何集群可能有自己的策略,它们存在于Sites类别中。例如,Sites/cluster1会将自己的策略应用到cluster1。
下图显示了策略的生成方式。
19.14.1. 应用源自定义资源策略 复制链接链接已复制到粘贴板!
源自定义资源策略包括以下几项:
- SR-IOV 策略
- PTP 策略
- Performance Add-on Operator 策略
- MachineConfigPool 策略
- SCTP 策略
您需要定义用于生成 ACM 策略的源自定义资源,并考虑可能的元数据或 spec/data 覆盖。例如,common-namespace-policy 包含所有受管集群中存在的 Namespace 定义。此 命名空间 放置在 Common 类别下,其 spec 或所有集群中的数据没有更改。
命名空间策略示例
以下示例显示了此命名空间的源自定义资源:
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 名称和 namespace 相同,因此在 source 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 文件是一个自定义资源定义(CRD),用于告知 PolicyGen 在何处对生成的策略和需要过量的策略进行分类。
以下示例显示了 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 的组中定义了一组策略。此文件定义 MachineConfigPool worker-du,用作 sourceFiles 中定义的任何其他策略的节点选择器。为 sourceFiles 中的所有源文件生成 ACM 策略。此外,生成单个放置绑定和放置规则,为 group-du 策略应用集群选择规则。
使用源文件 PtpConfigSlave.yaml 作为示例,PtpConfigSlave 具有 PtpConfig 自定义资源 (CR) 的定义。为 PtpConfigSlave 示例生成的策略名为 group-du-ptp-config-policy。生成的 group-du-ptp-config-policy 中定义的 PtpConfig CR 被命名为 du-ptp-slave。PtpConfigSlave.yaml 中定义的 spec 放置在 du-ptp-slave 下,以及与源文件中定义的其他 spec 项目一起放置。
以下示例显示了 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 策略生成器插件
流程
配置
kustomization.yaml文件来引用policyGenerator.yaml文件。以下示例显示了 PolicyGenerator 定义:apiVersion: 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文件的路径。 -
sourcePath:是源策略的路径。 -
outPath:是保存生成的 ACM 策略的路径。 -
stdout:如果为true,请将生成的策略输出到控制台。 -
CustomResources:如果为true,从sourcePolicies文件生成没有 ACM 策略的 CR。
-
运行以下命令来测试 PolicyGen:
$ cd cnf-features-deploy/ztp/ztp-policy-generator/$ XDG_CONFIG_HOME=./ kustomize build --enable-alpha-pluginsout目录会创建并带有预期的策略,如下例所示: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通用策略是扁平的,因为它们将应用到所有群集。但是,组和站点具有每个组和站点的子目录,因为它们将应用到不同的群集。