第 9 章 使用 PolicyGenerator 资源管理集群策略
9.1. 使用 PolicyGenerator 资源配置受管集群策略 复制链接链接已复制到粘贴板!
应用的 Policy 自定义资源 (CR) 配置您置备的受管集群。您可以自定义 Red Hat Advanced Cluster Management (RHACM) 如何使用 PolicyGenerator CR 生成应用的 Policy CR。
在 GitOps ZTP 中使用 PolicyGenerator 资源只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
有关 PolicyGenerator 资源的更多信息,请参阅 RHACM 策略生成器 文档。
9.1.1. 比较 RHACM 策略生成器和 PolicyGenTemplate 资源补丁 复制链接链接已复制到粘贴板!
在 GitOps ZTP 中可以使用 PolicyGenerator 自定义资源 (CR) 和 PolicyGenTemplate CR 为受管集群生成 RHACM 策略。
当涉及到使用 GitOps ZTP 修补 OpenShift Container Platform 资源时,使用 PolicyGenerator CR 而不是 PolicyGenTemplate CR 有优点。使用 RHACM PolicyGenerator API 提供了一种通用方法来修补资源,这些资源无法使用 PolicyGenTemplate 资源。
PolicyGenerator API 是 Open Cluster Management 标准的一部分,而 PolicyGenTemplate API 不是。下表描述了 PolicyGenerator 和 PolicyGenTemplate 资源补丁和放置策略的比较。
使用 PolicyGenTemplate CR 管理和监控对受管集群的策略将在即将发布的 OpenShift Container Platform 发行版本中弃用。使用 Red Hat Advanced Cluster Management (RHACM) 和 PolicyGenerator CR 提供了等效的和改进的功能。
有关 PolicyGenerator 资源的更多信息,请参阅 RHACM 策略生成器 文档。
| PolicyGenerator 补丁 | PolicyGenTemplate 补丁 |
|---|---|
| 使用 Kustomize 战略性合并来合并资源。如需更多信息,请参阅使用 Kustomize 管理 Kubernetes 对象。 | 将变量替换为补丁所定义的值。与 Kustomize 合并策略相比,这不太灵活。 |
|
支持 |
不支持 |
| 依赖于补丁,不需要替换嵌入的变量。 | 覆盖补丁中定义的变量值。 |
| 不支持合并补丁中的合并列表。支持替换合并补丁中的列表。 | 合并和替换列表会有限,您只能在列表中合并一个对象。 |
|
目前不支持资源补丁的 OpenAPI 规格。这意味着补丁中需要额外的指令来合并不遵循模式的内容,如 | 将字段和值替换为补丁所定义的值。 |
|
需要额外的指令,例如,补丁中的 |
将源 CR 中定义的字段和值替换为补丁中定义的值,如 |
|
可以修补引用源 CR 中定义的 |
可以修补引用源 CR 中定义的 |
9.1.2. 关于 PolicyGenerator CRD 复制链接链接已复制到粘贴板!
PolicyGenerator 自定义资源定义(CRD) 告知 PolicyGen 策略生成器在集群配置中包含哪些自定义资源 (CR),如何将 CR 组合到生成的策略中,以及这些 CR 中的项目需要使用 overlay 内容更新。
以下示例显示了从 ztp-site-generate 引用容器中提取的 PolicyGenerator CR (acm-common-du-ranGen.yaml)。acm-common-du-ranGen.yaml 文件定义了两个 Red Hat Advanced Cluster Management (RHACM) 策略。策略管理配置 CR 集合,每个 CR 中的 policyName 值对应一个。acm-common-du-ranGen.yaml 创建一个单个放置绑定和一个放置规则,根据 policyDefaults.placement.labelSelector 部分中列出的标签将策略绑定到集群。
示例 PolicyGenerator CR - acm-common-ranGen.yaml
apiVersion: policy.open-cluster-management.io/v1
kind: PolicyGenerator
metadata:
name: common-latest
placementBindingDefaults:
name: common-latest-placement-binding
policyDefaults:
namespace: ztp-common
placement:
labelSelector:
matchExpressions:
- key: common
operator: In
values:
- "true"
- key: du-profile
operator: In
values:
- latest
remediationAction: inform
severity: low
namespaceSelector:
exclude:
- kube-*
include:
- '*'
evaluationInterval:
compliant: 10m
noncompliant: 10s
policies:
- name: common-latest-config-policy
policyAnnotations:
ran.openshift.io/ztp-deploy-wave: "1"
manifests:
- path: source-crs/ReduceMonitoringFootprint.yaml
- path: source-crs/DefaultCatsrc.yaml
patches:
- metadata:
name: redhat-operators-disconnected
spec:
displayName: disconnected-redhat-operators
image: registry.example.com:5000/disconnected-redhat-operators/disconnected-redhat-operator-index:v4.9
- path: source-crs/DisconnectedICSP.yaml
patches:
- spec:
repositoryDigestMirrors:
- mirrors:
- registry.example.com:5000
source: registry.redhat.io
- name: common-latest-subscriptions-policy
policyAnnotations:
ran.openshift.io/ztp-deploy-wave: "2"
manifests:
- path: source-crs/SriovSubscriptionNS.yaml
- path: source-crs/SriovSubscriptionOperGroup.yaml
- path: source-crs/SriovSubscription.yaml
- path: source-crs/SriovOperatorStatus.yaml
- path: source-crs/PtpSubscriptionNS.yaml
- path: source-crs/PtpSubscriptionOperGroup.yaml
- path: source-crs/PtpSubscription.yaml
- path: source-crs/PtpOperatorStatus.yaml
- path: source-crs/ClusterLogNS.yaml
- path: source-crs/ClusterLogOperGroup.yaml
- path: source-crs/ClusterLogSubscription.yaml
- path: source-crs/ClusterLogOperatorStatus.yaml
- path: source-crs/StorageNS.yaml
- path: source-crs/StorageOperGroup.yaml
- path: source-crs/StorageSubscription.yaml
- path: source-crs/StorageOperatorStatus.yaml
PolicyGenerator CR 可以使用任意数量的包含 CR 来构建。在 hub 集群中应用以下示例 CR 来生成包含单个 CR 的策略:
apiVersion: policy.open-cluster-management.io/v1
kind: PolicyGenerator
metadata:
name: group-du-sno
placementBindingDefaults:
name: group-du-sno-placement-binding
policyDefaults:
namespace: ztp-group
placement:
labelSelector:
matchExpressions:
- key: group-du-sno
operator: Exists
remediationAction: inform
severity: low
namespaceSelector:
exclude:
- kube-*
include:
- '*'
evaluationInterval:
compliant: 10m
noncompliant: 10s
policies:
- name: group-du-sno-config-policy
policyAnnotations:
ran.openshift.io/ztp-deploy-wave: '10'
manifests:
- path: source-crs/PtpConfigSlave-MCP-master.yaml
patches:
- metadata: null
name: du-ptp-slave
namespace: openshift-ptp
annotations:
ran.openshift.io/ztp-deploy-wave: '10'
spec:
profile:
- name: slave
interface: $interface
ptp4lOpts: '-2 -s'
phc2sysOpts: '-a -r -n 24'
ptpSchedulingPolicy: SCHED_FIFO
ptpSchedulingPriority: 10
ptpSettings:
logReduce: 'true'
ptp4lConf: |
[global]
#
# Default Data Set
#
twoStepFlag 1
slaveOnly 1
priority1 128
priority2 128
domainNumber 24
#utc_offset 37
clockClass 255
clockAccuracy 0xFE
offsetScaledLogVariance 0xFFFF
free_running 0
freq_est_interval 1
dscp_event 0
dscp_general 0
dataset_comparison G.8275.x
G.8275.defaultDS.localPriority 128
#
# Port Data Set
#
logAnnounceInterval -3
logSyncInterval -4
logMinDelayReqInterval -4
logMinPdelayReqInterval -4
announceReceiptTimeout 3
syncReceiptTimeout 0
delayAsymmetry 0
fault_reset_interval -4
neighborPropDelayThresh 20000000
masterOnly 0
G.8275.portDS.localPriority 128
#
# Run time options
#
assume_two_step 0
logging_level 6
path_trace_enabled 0
follow_up_info 0
hybrid_e2e 0
inhibit_multicast_service 0
net_sync_monitor 0
tc_spanning_tree 0
tx_timestamp_timeout 50
unicast_listen 0
unicast_master_table 0
unicast_req_duration 3600
use_syslog 1
verbose 0
summary_interval 0
kernel_leap 1
check_fup_sync 0
clock_class_threshold 7
#
# Servo Options
#
pi_proportional_const 0.0
pi_integral_const 0.0
pi_proportional_scale 0.0
pi_proportional_exponent -0.3
pi_proportional_norm_max 0.7
pi_integral_scale 0.0
pi_integral_exponent 0.4
pi_integral_norm_max 0.3
step_threshold 2.0
first_step_threshold 0.00002
max_frequency 900000000
clock_servo pi
sanity_freq_limit 200000000
ntpshm_segment 0
#
# Transport options
#
transportSpecific 0x0
ptp_dst_mac 01:1B:19:00:00:00
p2p_dst_mac 01:80:C2:00:00:0E
udp_ttl 1
udp6_scope 0x0E
uds_address /var/run/ptp4l
#
# Default interface options
#
clock_type OC
network_transport L2
delay_mechanism E2E
time_stamping hardware
tsproc_mode filter
delay_filter moving_median
delay_filter_length 10
egressLatency 0
ingressLatency 0
boundary_clock_jbod 0
#
# Clock description
#
productDescription ;;
revisionData ;;
manufacturerIdentity 00:00:00
userDescription ;
timeSource 0xA0
recommend:
- profile: slave
priority: 4
match:
- nodeLabel: node-role.kubernetes.io/master
使用源文件 PtpConfigSlave.yaml 作为示例,文件会定义一个 PtpConfig CR。为 PtpConfigSlave 示例生成的策略名为 group-du-sno-config-policy。生成的 group-du-sno-config-policy 中定义的 PtpConfig CR 被命名为 du-ptp-slave。PtpConfigSlave.yaml 中定义的 spec 放置在 du-ptp-slave 下,以及与源文件中定义的其他 spec 项目一起放置。
以下示例显示了 group-du-sno-config-policy CR:
---
apiVersion: policy.open-cluster-management.io/v1
kind: PolicyGenerator
metadata:
name: du-upgrade
placementBindingDefaults:
name: du-upgrade-placement-binding
policyDefaults:
namespace: ztp-group-du-sno
placement:
labelSelector:
matchExpressions:
- key: group-du-sno
operator: Exists
remediationAction: inform
severity: low
namespaceSelector:
exclude:
- kube-*
include:
- '*'
evaluationInterval:
compliant: 10m
noncompliant: 10s
policies:
- name: du-upgrade-operator-catsrc-policy
policyAnnotations:
ran.openshift.io/ztp-deploy-wave: "1"
manifests:
- path: source-crs/DefaultCatsrc.yaml
patches:
- metadata:
name: redhat-operators
spec:
displayName: Red Hat Operators Catalog
image: registry.example.com:5000/olm/redhat-operators:v4.14
updateStrategy:
registryPoll:
interval: 1h
status:
connectionState:
lastObservedState: READY
9.1.3. 自定义 PolicyGenerator CR 时的建议 复制链接链接已复制到粘贴板!
在自定义站点配置 PolicyGenerator 自定义资源 (CR) 时请考虑以下最佳实践:
-
根据需要使用一些策略。使用较少的策略需要较少的资源。每个附加策略会为 hub 集群和部署的受管集群创建 CPU 负载增加。CR 根据
PolicyGeneratorCR 中的policyName字段合并到策略中。同一PolicyGenerator中的 CR,在单个策略下管理相同的policyName值。 -
在断开连接的环境中,通过将 registry 配置为包含所有 Operator 的单个索引,为所有 Operator 使用单个目录源。受管集群中的每个额外
CatalogSourceCR 会增加 CPU 用量。 -
MachineConfigCR 应包含在siteConfigCR 中作为extraManifests,以便在安装过程中应用它们。这可减少在集群就绪部署应用程序前所花费的总时间。 -
PolicyGeneratorCR 应该覆盖 channel 字段来明确识别所需的版本。这样可确保源 CR 在升级过程中的更改不会更新生成的订阅。
在 hub 集群中管理大量 spoke 集群时,请最小化策略数量来减少资源消耗。
将多个配置 CR 分组到单个或有限的策略中,一种方法是减少 hub 集群上的总体策略数量。在使用 common/group/site 层次结构来管理站点配置时,务必要将特定于站点的配置组合成单一策略。
9.1.4. RAN 部署的 PolicyGenerator CR 复制链接链接已复制到粘贴板!
使用 PolicyGenerator 自定义资源 (CR) 使用 GitOps Zero Touch Provisioning (ZTP) 管道自定义应用到集群的配置。PolicyGenerator CR 允许您生成一个或多个策略来管理集群中的配置 CR 集合。PolicyGenerator CR 标识一组受管 CR,将它们捆绑到策略中,构建与这些 CR 相关的策略,并使用标签绑定规则将策略与集群相关联。
从 GitOps ZTP 容器获取的参考配置旨在提供一组关键功能和节点调优设置,以确保集群可以支持字符串的性能和资源利用率限制,典型的 RAN 分布式单元(DU)应用程序。来自基准配置的更改或禁止可能会影响功能可用性、性能和资源利用率。使用引用 PolicyGenerator CR 作为基础来创建根据您的特定站点要求量身定制的配置文件的层次结构。
为 RAN DU 集群配置定义的基准 PolicyGenerator CR 可以从 GitOps ZTP ztp-site-generate 容器中提取。如需了解更多详细信息,请参阅"准备 GitOps ZTP 站点配置存储库"。
PolicyGenerator CR 可以在 ./out/argocd/example/acmpolicygenerator/ 文件夹中找到。参考架构具有共同、组和特定站点的配置 CR。每个 PolicyGenerator CR 都引用可在 ./out/source-crs 文件夹中找到的其他 CR。
与 RAN 集群配置相关的 PolicyGenerator CR 如下所述。为组 PolicyGenerator CR 提供变体,以考虑单节点、三节点紧凑和标准集群配置中的差别。同样,为单节点集群和多节点(compact 或 standard)集群提供了特定于站点的配置变体。使用与部署相关的组和特定于站点的配置变体。
| PolicyGenerator CR | 描述 |
|---|---|
|
| 包含一组应用于多节点集群的 CR。这些 CR 配置 SR-IOV 功能,用于 RAN 安装。 |
|
| 包含一组应用于单节点 OpenShift 集群的 CR。这些 CR 配置 SR-IOV 功能,用于 RAN 安装。 |
|
| 包含一组应用于多节点集群的通用 RAN 策略配置。 |
|
| 包含一组应用于所有集群的通用 RAN CR。这些 CR 订阅一组 operator,提供典型的 RAN 和基准集群调整功能。 |
|
| 仅包含三节点集群的 RAN 策略。 |
|
| 仅包含单节点集群的 RAN 策略。 |
|
| 包含标准三个 control-plane 集群的 RAN 策略。 |
|
|
用于生成三节点集群所需的各种策略的 |
|
|
用于生成标准集群所需的各种策略的 |
|
|
用于生成单节点 OpenShift 集群所需的各种策略的 |
9.1.5. 使用 PolicyGenerator CR 自定义受管集群 复制链接链接已复制到粘贴板!
使用以下步骤自定义应用于使用 GitOps Zero Touch Provisioning (ZTP) 管道置备的受管集群的策略。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
已以具有
cluster-admin权限的用户身份登录到 hub 集群。 - 配置了 hub 集群来生成所需的安装和策略 CR。
- 您创建了 Git 存储库,用于管理自定义站点配置数据。该存储库必须可从 hub 集群访问,并定义为 Argo CD 应用程序的源仓库。
流程
为特定于站点的配置 CR 创建
PolicyGeneratorCR。-
从
out/argocd/example/acmpolicygenerator/文件夹中选择适当的 CR 示例,例如acm-example-sno-site.yaml或acm-example-multinode-site.yaml。 更改示例文件中的
policyDefaults.placement.labelSelector字段,以匹配SiteConfigCR 中包含的特定于站点的标签匹配。在示例SiteConfig文件中,特定于站点的标签是sites: example-sno。注意确保
PolicyGeneratorpolicyDefaults.placement.labelSelector字段中定义的标签与相关受管集群SiteConfigCR 中定义的标签对应。- 更改示例文件中的内容,使其与所需配置匹配。
-
从
可选:为应用到整个集群的任何通用配置 CR 创建一个
PolicyGeneratorCR。-
从
out/argocd/example/acmpolicygenerator/文件夹中选择适当的 CR 示例,例如acm-common-ranGen.yaml。 - 更改示例文件中的内容,使其与所需配置匹配。
-
从
可选:为应用到团队中特定集群组的任何组配置 CR 创建一个
PolicyGeneratorCR。确保 overlaid spec 文件的内容与您的所需最终状态匹配。作为参考,
out/source-crs目录包含可用于包含和由 PolicyGenerator 模板提供的 source-crs 的完整列表。注意根据集群的特定要求,每个集群类型可能需要一个组策略,特别是考虑示例组策略各自有一个
PerformancePolicy.yaml文件,如果这些集群是由相同的硬件配置,则只能在一组集群中共享。-
从
out/argocd/example/acmpolicygenerator/文件夹中选择适当的 CR 示例,例如acm-group-du-sno-ranGen.yaml。 - 更改示例文件中的内容,使其与所需配置匹配。
-
从
-
可选。当 GitOps ZTP 安装和配置完成后,创建一个验证器通知策略
PolicyGeneratorCR。如需更多信息,请参阅"创建验证器通知策略"。 在 YAML 文件中定义所有策略命名空间,类似于示例
out/argocd/example/acmpolicygenerator//ns.yaml文件。重要不要在带有
PolicyGeneratorCR 的同一文件中包括NamespaceCR。-
将
PolicyGeneratorCR 和NamespaceCR 添加到 generators 部分中的kustomization.yaml文件中,类似于out/argocd/example/acmpolicygenerator/kustomization.yaml所示的示例。 在 Git 存储库中提交
PolicyGeneratorCR、NamespaceCR 和关联的kustomization.yaml文件并推送更改。ArgoCD 管道检测到更改并开始受管集群部署。您可以同时将更改推送到
SiteConfigCR 和PolicyGeneratorCR。
9.1.6. 监控受管集群策略部署进度 复制链接链接已复制到粘贴板!
ArgoCD 管道使用 Git 中的 PolicyGenerator CR 来生成 RHACM 策略,然后将其同步到 hub 集群。您可以在辅助服务在受管集群中安装 OpenShift Container Platform 后监控受管集群策略同步的进度。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
已以具有
cluster-admin权限的用户身份登录到 hub 集群。
流程
Topology Aware Lifecycle Manager(TALM)应用绑定到集群的配置策略。
集群安装完成后,集群变为
Ready,ClusterGroupUpgradeCR 对应于此集群,且由run.openshift.io/ztp-deploy-wave annotations定义的已排序策略列表由 TALM 自动创建。集群的策略按ClusterGroupUpgradeCR 中列出的顺序应用。您可以使用以下命令监控配置策略协调的高级进度:
$ export CLUSTER=<clusterName>$ oc get clustergroupupgrades -n ztp-install $CLUSTER -o jsonpath='{.status.conditions[-1:]}' | jq输出示例
{ "lastTransitionTime": "2022-11-09T07:28:09Z", "message": "Remediating non-compliant policies", "reason": "InProgress", "status": "True", "type": "Progressing" }您可以使用 RHACM 仪表板或命令行监控详细的集群策略合规状态。
要使用
oc检查策略合规性,请运行以下命令:$ oc get policies -n $CLUSTER输出示例
NAME REMEDIATION ACTION COMPLIANCE STATE AGE ztp-common.common-config-policy inform Compliant 3h42m ztp-common.common-subscriptions-policy inform NonCompliant 3h42m ztp-group.group-du-sno-config-policy inform NonCompliant 3h42m ztp-group.group-du-sno-validator-du-policy inform NonCompliant 3h42m ztp-install.example1-common-config-policy-pjz9s enforce Compliant 167m ztp-install.example1-common-subscriptions-policy-zzd9k enforce NonCompliant 164m ztp-site.example1-config-policy inform NonCompliant 3h42m ztp-site.example1-perf-policy inform NonCompliant 3h42m要从 RHACM Web 控制台检查策略状态,请执行以下操作:
-
点 Governance
Find policies。 - 点集群策略检查其状态。
-
点 Governance
当所有集群策略都合规时,集群的 GitOps ZTP 安装和配置已完成。ztp-done 标签添加到集群中。
在引用配置中,合规的最终策略是 *-du-validator-policy 策略中定义的。此策略当在一个集群中合规时,确保所有集群配置、Operator 安装和 Operator 配置已完成。
9.1.7. 验证配置策略 CR 的生成 复制链接链接已复制到粘贴板!
Policy 自定义资源 (CR) 在与创建它们的 PolicyGenerator 相同的命名空间中生成。相同的故障排除流程适用于从 PolicyGenerator 生成的所有策略 CR,无论它们是 ztp-common、ztp-group 还是 ztp-site,如以下命令所示:
$ export NS=<namespace>
$ oc get policy -n $NS
应该会显示预期的策略嵌套 CR 集合。
如果策略失败的同步,请使用以下故障排除步骤。
流程
要显示策略的详细信息,请运行以下命令:
$ oc describe -n openshift-gitops application policies检查
Status: Conditions:来显示错误日志。例如,将无效的sourceFile条目设置为fileName:生成以下错误:Status: Conditions: Last Transition Time: 2021-11-26T17:21:39Z Message: rpc error: code = Unknown desc = `kustomize build /tmp/https___git.com/ran-sites/policies/ --enable-alpha-plugins` failed exit status 1: 2021/11/26 17:21:40 Error could not find test.yaml under source-crs/: no such file or directory Error: failure in plugin configured via /tmp/kust-plugin-config-52463179; exit status 1: exit status 1 Type: ComparisonError检查
Status: Sync:。如果Status: Conditions:中存在日志错误,则Status: Sync:显示Unknown或Error:Status: Sync: Compared To: Destination: Namespace: policies-sub Server: https://kubernetes.default.svc Source: Path: policies Repo URL: https://git.com/ran-sites/policies/.git Target Revision: master Status: Error当 Red Hat Advanced Cluster Management(RHACM)识别策略应用到
ManagedCluster对象时,策略 CR 对象应用到集群命名空间。检查策略是否已复制到集群命名空间中:$ oc get policy -n $CLUSTER输出示例
NAME REMEDIATION ACTION COMPLIANCE STATE AGE ztp-common.common-config-policy inform Compliant 13d ztp-common.common-subscriptions-policy inform Compliant 13d ztp-group.group-du-sno-config-policy inform Compliant 13d ztp-group.group-du-sno-validator-du-policy inform Compliant 13d ztp-site.example-sno-config-policy inform Compliant 13dRHACM 将所有适用的策略复制到集群命名空间中。复制的策略名称的格式为:
<PolicyGenerator.Namespace>.<PolicyGenerator.Name>-<policyName>。检查放置规则中是否有没有复制到集群命名空间中的策略。这些策略的
Placement中的matchSelector应与ManagedCluster对象上的标签匹配:$ oc get Placement -n $NS使用以下命令,注意适合缺少策略、通用、组或站点的
Placement名称:$ oc get Placement -n $NS <placement_rule_name> -o yaml- status-decisions 应该包括集群名称。
-
spec 中
matchSelector的键值对必须与受管集群上的标签匹配。
使用以下命令检查
ManagedCluster对象上的标签:$ oc get ManagedCluster $CLUSTER -o jsonpath='{.metadata.labels}' | jq使用以下命令查看合规哪些策略:
$ oc get policy -n $CLUSTER如果
Namespace、OperatorGroup和Subscription策略兼容,但 Operator 配置策略不兼容,则 Operator 可能不会在受管集群中安装。这会导致 Operator 配置策略无法应用,因为 CRD 还没有应用到 spoke。
9.1.8. 重启策略协调 复制链接链接已复制到粘贴板!
当发生意外合规问题时,您可以重启策略协调,例如 ClusterGroupUpgrade 自定义资源 (CR) 超时时。
流程
在受管集群变为
Ready后,Topology Aware Lifecycle Manager 在命名空间ztp-install中生成ClusterGroupUpgradeCR:$ export CLUSTER=<clusterName>$ oc get clustergroupupgrades -n ztp-install $CLUSTER如果出现意外问题,且策略无法在配置超时(默认为 4 小时)内变为合规,
ClusterGroupUpgradeCR 的状态会显示UpgradeTimedOut:$ oc get clustergroupupgrades -n ztp-install $CLUSTER -o jsonpath='{.status.conditions[?(@.type=="Ready")]}'UpgradeTimedOut状态的ClusterGroupUpgradeCR 每小时自动重启其策略协调。如果更改了策略,可以通过删除现有ClusterGroupUpgradeCR 来启动立即重试。这会触发自动创建新的ClusterGroupUpgradeCR,以开始立即协调策略:$ oc delete clustergroupupgrades -n ztp-install $CLUSTER
请注意,当 ClusterGroupUpgrade CR 完成,其状态为 UpgradeCompleted,且受管集群应用了 ztp-done 标签,您可以使用 PolicyGenerator 创建额外的配置更改。删除现有的 ClusterGroupUpgrade CR 将无法生成新的 CR。
此时,GitOps ZTP 完成了与集群的交互,任何进一步的交互都应被视为更新,并为补救策略创建新的 ClusterGroupUpgrade CR。
9.1.9. 使用策略更改应用的受管集群 CR 复制链接链接已复制到粘贴板!
您可以通过策略从受管集群中部署的自定义资源(CR)中删除内容。
默认情况下,从 PolicyGenerator CR 创建的所有 Policy CR 将 complianceType 字段设置为 musthave。没有删除内容的 musthave 策略仍然合规,因为受管集群上的 CR 具有所有指定的内容。使用这个配置,当从 CR 中删除内容时,TALM 从策略中删除内容,但不会从受管集群的 CR 中删除内容。
当 complianceType 字段为 mustonlyhave 时,策略可确保集群中的 CR 与策略中指定的内容完全匹配。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
已以具有
cluster-admin权限的用户身份登录到 hub 集群。 - 您已从运行 RHACM 的 hub 集群部署了受管集群。
- 您已在 hub 集群中安装了 Topology Aware Lifecycle Manager。
流程
从受影响的 CR 中删除您不再需要的内容。在本例中,
disableDrain: false行已从SriovOperatorConfigCR 中删除。CR 示例
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovOperatorConfig metadata: name: default namespace: openshift-sriov-network-operator spec: configDaemonNodeSelector: "node-role.kubernetes.io/$mcp": "" disableDrain: true enableInjector: true enableOperatorWebhook: true在
acm-group-du-sno-ranGen.yaml文件中将受影响策略的complianceType更改为mustonlyhave。YAML 示例
# ... policyDefaults: complianceType: "mustonlyhave" # ... policies: - name: config-policy policyAnnotations: ran.openshift.io/ztp-deploy-wave: "" manifests: - path: source-crs/SriovOperatorConfig.yaml创建
ClusterGroupUpdatesCR,并指定必须接收 CR 更改的集群:ClusterGroupUpdates CR 示例
apiVersion: ran.openshift.io/v1alpha1 kind: ClusterGroupUpgrade metadata: name: cgu-remove namespace: default spec: managedPolicies: - ztp-group.group-du-sno-config-policy enable: false clusters: - spoke1 - spoke2 remediationStrategy: maxConcurrency: 2 timeout: 240 batchTimeoutAction:运行以下命令来创建
ClusterGroupUpgradeCR:$ oc create -f cgu-remove.yaml当您准备好应用更改时,例如在适当的维护窗口中,运行以下命令将
spec.enable字段的值改为true:$ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-remove \ --patch '{"spec":{"enable":true}}' --type=merge
验证
运行以下命令,检查策略的状态:
$ oc get <kind> <changed_cr_name>输出示例
NAMESPACE NAME REMEDIATION ACTION COMPLIANCE STATE AGE default cgu-ztp-group.group-du-sno-config-policy enforce 17m default ztp-group.group-du-sno-config-policy inform NonCompliant 15h当策略的
COMPLIANCE STATE为Compliant时,这意味着已更新 CR,并删除不需要的内容。在受管集群中运行以下命令来检查策略是否已从目标集群中移除:
$ oc get <kind> <changed_cr_name>如果没有结果,则会从受管集群中删除 CR。
9.1.10. 假定为 GitOps ZTP 安装 复制链接链接已复制到粘贴板!
GitOps Zero Touch Provisioning (ZTP) 简化了检查集群的 GitOps ZTP 安装状态的过程。GitOps ZTP 状态分为三个阶段:集群安装、集群配置和 GitOps ZTP。
- 集群安装阶段
-
集群安装阶段由
ManagedClusterCR 中的ManagedClusterJoined和ManagedClusterAvailable条件显示。如果ManagedClusterCR 没有这些条件,或者条件设置为False,集群仍然处于安装阶段。有关安装的更多信息,请参阅AgentClusterInstall和ClusterDeploymentCR。如需更多信息,请参阅"Troubleshooting GitOps ZTP"。 - 集群配置阶段
-
集群配置阶段由
ztp-running标签显示,在集群中应用ManagedClusterCR。 - 完成 GitOps ZTP
集群安装和配置在 GitOps ZTP 完成。这可以通过删除
ztp-running标签并在ManagedClusterCR 中添加ztp-done标签来显示。ztp-done标签显示应用了配置,基准 DU 配置已完成集群调整。对 GitOps ZTP 完成状态的改变是 Red Hat Advanced Cluster Management (RHACM) 验证通知策略合规状态的条件。这个策略捕获了已完成的安装的现有条件,并确认只有在受管集群的 GitOps ZTP 置备完成后才会变为合规状态。
验证器通知策略可确保完全应用集群的配置,Operator 已完成初始化。策略验证以下内容:
-
目标
MachineConfigPool包含预期的条目,并已完成更新。所有节点都可用,且没有降级。 -
至少有一个
SriovNetworkNodeState带有syncStatus: Succeeded则代表 SR-IOV Operator 已完成初始化。 - PTP Operator 守护进程集已存在。
-
目标