3.2. 安装模板概述
安装模板是用来生成安装工件集合的数据驱动的模板。这些模板采用 Golang 文本/模板格式,并使用来自 ClusterInstance 自定义资源的数据进行实例化。这可为每个具有类似配置但具有不同值的每个目标集群动态创建安装清单。
您还可以根据不同的安装方法或集群拓扑创建多个集合。SiteConfig operator 支持以下类型的安装模板:
- cluster_level
- 只能引用特定于集群的字段的模板。
- 节点级别
- 可引用特定于集群和特定于节点的字段的模板。
有关安装模板的更多信息,请参阅以下文档:
3.2.1. 模板功能 复制链接链接已复制到粘贴板!
您可以自定义模板字段。SiteConfig 操作符支持Sprig 库中的所有函数。
另外,ClusterInstance API 提供了在创建自定义清单时可以使用以下功能:
toYamltoYaml函数将项目编码为 YAML 字符串。如果项目无法转换为 YAML,则函数会返回空字符串。请参阅以下
ClusterInstance.Spec.Proxy字段中的.toYaml规格示例:
{{ if .Spec.Proxy }}
proxy:
{{ .Spec.Proxy | toYaml | indent 4 }}
{{ end }}
3.2.2. 默认模板集合 复制链接链接已复制到粘贴板!
SiteConfig operator 在安装 Operator 的同一命名空间中提供以下默认、验证和不可变模板集合:
| 安装方法 | 模板类型 | 文件名 | 模板内容 |
|---|---|---|---|
| 支持的安装程序 | 集群级别模板 |
|
|
| 节点级别模板 |
|
| |
| Image Based Install Operator | 集群级别模板 |
|
|
| 节点级别模板 |
|
|
有关ClusterInstance API 的更多信息,请参阅ClusterInstance API 。
3.2.3. 特殊模板变量 复制链接链接已复制到粘贴板!
SiteConfig operator 提供了一组可在模板中使用的特殊模板变量。请参见以下列表:
CurrentNode- SiteConfig operator 明确控制节点对象的迭代,并公开此变量来访问模板中处理的当前节点的所有内容。
InstallConfigOverrides-
包含合并的
networkType、cpuPartitioningMode和installConfigOverrides内容。 ControlPlaneAgents-
由 control plane 代理的数量组成,它会自动从
ClusterInstance节点对象衍生而来。 WorkerAgents-
由 worker 代理数量组成,它会自动从
ClusterInstance节点对象派生而来。
在文本模板中使用字段名称来创建自定义模板字段。
例如,ClusterInstance spec 字段使用 .Spec 前缀引用。但是,您必须使用 .SpecialVars 前缀引用特殊变量字段。
重要: 对于 spec.nodes 字段使用 .Spec.Nodes 前缀,您必须使用 .SpecialVars.CurrentNode 特殊模板变量引用它。
例如,如果要使用 CurrentNode 特殊模板变量为当前节点指定 名称和命名空间,请使用以下格式的字段名称:
name: "{{ .SpecialVars.CurrentNode.HostName }}"
namespace: "{{ .Spec.ClusterName }}"
3.2.4. 自定义清单顺序 复制链接链接已复制到粘贴板!
您可以使用 siteconfig.open-cluster-management.io/sync-wave 注解来控制创建、更新和删除清单的顺序。该注解使用一个整数作为值,该整数则作为 wave 组成。
您可以将一个或多个清单添加到单个 wave 中。如果没有指定值,注解将使用默认值 0。
SiteConfig operator 在创建或更新资源时以升序协调清单,并以降序删除资源。
在以下示例中,如果 SiteConfig 操作员创建或更新清单,则AgentClusterInstall和ClusterDeployment自定义资源将在第一波中进行协调,而KlusterletAddonConfig和ManagedCluster自定义资源将在第三波中进行协调:
apiVersion: v1
data:
AgentClusterInstall: |-
...
siteconfig.open-cluster-management.io/sync-wave: "1"
...
ClusterDeployment: |-
...
siteconfig.open-cluster-management.io/sync-wave: "1"
...
InfraEnv: |-
...
siteconfig.open-cluster-management.io/sync-wave: "2"
...
KlusterletAddonConfig: |-
...
siteconfig.open-cluster-management.io/sync-wave: "3"
...
ManagedCluster: |-
...
siteconfig.open-cluster-management.io/sync-wave: "3"
...
kind: ConfigMap
metadata:
name: assisted-installer-templates
namespace: example-namespace
如果 SiteConfig operator 删除资源,KlusterletAddonConfig 和 ManagedCluster 自定义资源是第一个被删除,而 AgentClusterInstall 和 ClusterDeployment 自定义资源是最后一个。
3.2.5. 配置额外注解和标签 复制链接链接已复制到粘贴板!
您可以使用 ClusterInstance API 中的 extraAnnotations 和 extraLabels 字段为集群级别和节点级别的安装清单配置额外的注解和标签。SiteConfig Operator 将额外注解和标签应用到您在 ClusterInstance 资源中指定的清单。
在创建额外的注解和标签时,您必须指定清单类型,以允许 SiteConfig 操作器将它们应用到所有匹配的清单。但是,注解和标签是任意的,您可以设置对应用程序有意义的任何键值对。
注: 附加注解和标签只适用于通过引用模板呈现的资源。
查看以下 extraAnnotations 和 extraLabels 应用程序示例:
apiVersion: siteconfig.open-cluster-management.io/v1alpha1
kind: ClusterInstance
metadata:
name: "example-sno"
namespace: "example-sno"
spec:
[...]
clusterName: "example-sno"
extraAnnotations:
ClusterDeployment:
myClusterAnnotation: success
extraLabels:
ManagedCluster:
common: "true"
group-du: ""
nodes:
- hostName: "example-sno.example.redhat.com"
role: "master"
extraAnnotations:
BareMetalHost:
myNodeAnnotation: success
extraLabels:
BareMetalHost:
"testExtraLabel": "success"
您可以运行以下命令来验证您的附加标签是否已应用:
oc get managedclusters example-sno -ojsonpath='{.metadata.labels}' | jq
查看以下应用标签示例:
{
"common": "true",
"group-du": "",
...
}
您可以运行以下命令来验证您的附加注解是否已应用:
oc get bmh example-sno.example.redhat.com -n example-sno -ojsonpath='{.metadata.annotations}' | jq
查看以下应用的注解示例:
{
"myNodeAnnotation": "success",
...
}
3.2.6. 配置完成后允许的更改 复制链接链接已复制到粘贴板!
您可能想要更改集群配置,但在配置期间不允许对集群进行更改。但是,集群配置完成后,您可以修改以下字段:
-
spec.extraAnnotations -
spec.extraLabels -
spec.suppressedManifests -
spec.pruneManifests -
spec.clusterImageSetNameRef -
spec.nodes.<node-id>.extraAnnotations -
spec.nodes.<node-id>.extraLabels -
spec.nodes.<node-id>.suppressedManifests -
spec.nodes.<node-id>.pruneManifests
注意: <node-id>代表更新后的NodeSpec对象。