第 4 章 管理员任务
4.1. 在集群中添加 Operator
通过使用 Operator Lifecycle Manager (OLM),集群管理员可将基于 OLM 的 Operator 安装到 OpenShift Container Platform 集群。
如需有关 OLM 如何处理在同一命名空间中并置安装的 Operator 的更新,以及使用自定义全局 Operator 组安装 Operator 的替代方法,请参阅多租户和 Operator 共处。
4.1.1. 关于使用 OperatorHub 安装 Operator
OperatorHub 是一个发现 Operator 的用户界面,它与 Operator Lifecycle Manager(OLM)一起工作,后者在集群中安装和管理 Operator。
作为具有适当权限的用户,您可以使用 OpenShift Container Platform Web 控制台或 CLI 安装来自 OperatorHub 的 Operator。
安装过程中,您必须为 Operator 确定以下初始设置:
- 安装模式
- 选择要在其中安装 Operator 的特定命名空间。
- 更新频道
- 如果某个 Operator 可通过多个频道获得,则可任选您想要订阅的频道。例如,要通过 stable 频道部署(如果可用),则从列表中选择这个选项。
- 批准策略
您可以选择自动或者手动更新。
如果选择自动更新某个已安装的 Operator,则当所选频道中有该 Operator 的新版本时,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需人为干预。
如果选择手动更新,则当有新版 Operator 可用时,OLM 会创建更新请求。作为集群管理员,您必须手动批准该更新请求,才可将 Operator 更新至新版本。
其他资源
4.1.2. 使用 Web 控制台从 OperatorHub 安装
您可以使用 OpenShift Container Platform Web 控制台从 OperatorHub 安装并订阅 Operator。
先决条件
-
使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 - 使用具有 Operator 安装权限的账户访问 OpenShift Container Platform 集群。
流程
-
在 Web 控制台中导航至 Operators
OperatorHub 页面。 找到您需要的 Operator(滚动页面会在 Filter by keyword 框中输入查找关键字)。例如,输入
advanced
来查找 Advanced Cluster Management for Kubernetes Operator。您还可以根据基础架构功能过滤选项。例如,如果您希望 Operator 在断开连接的环境中工作,请选择 Disconnected。
选择要显示更多信息的 Operator。
注意选择 Community Operator 会警告红帽没有认证社区 Operator ; 您必须确认该警告方可继续。
- 阅读 Operator 信息并单击 Install。
在 Install Operator 页面中:
任选以下一项:
-
All namespaces on the cluster (default),选择该项会将 Operator 安装至默认
openshift-operators
命名空间,以便供集群中的所有命名空间监视和使用。该选项并非始终可用。 - A specific namespace on the cluster,该项支持您选择单一特定命名空间来安装 Operator。该 Operator 仅限在该单一命名空间中监视和使用。
-
All namespaces on the cluster (default),选择该项会将 Operator 安装至默认
- 选择要在其中安装 Operator 的特定单一命名空间。该 Operator 仅限在该单一命名空间中监视和使用。
如果集群处于 AWS STS 模式,在 role ARN 字段中输入服务帐户的 AWS IAM 角色的 Amazon Resource Name (ARN)。
要创建角色的 ARN,请按照 准备 AWS 帐户 中所述的步骤进行操作。
- 如果有多个更新频道可用,请选择一个 更新频道。
如前面所述,选择自动或手动批准策略。
重要如果 Web 控制台显示集群为"STS 模式",您必须将 Update approval 设置为 Manual。
不建议使用具有自动更新批准的订阅,因为更新前可能会有权限更改。使用手动批准的订阅可确保管理员有机会验证更新版本的权限,并在更新前采取必要的操作。
点击 Install 使 Operator 可供 OpenShift Container Platform 集群上的所选命名空间使用。
如果选择了手动批准策略,订阅的升级状态将保持在 Upgrading 状态,直至您审核并批准安装计划。
在 Install Plan 页面批准后,订阅的升级状态将变为 Up to date。
- 如果选择了 Automatic 批准策略,升级状态会在不用人工参与的情况下变为 Up to date。
在订阅的升级状态成为 Up to date 后,选择 Operators
Installed Operators 来验证已安装 Operator 的 ClusterServiceVersion(CSV)是否最终出现了。状态最终会在相关命名空间中变为 InstallSucceeded。 注意对于 All namespaces… 安装模式,状态在
openshift-operators
命名空间中解析为 InstallSucceeded,但如果检查其他命名空间,则状态为 Copied。如果没有:
-
检查
openshift-operators
项目(如果选择了 A specific namespace… 安装模式)中的 openshift-operators 项目中的 pod 的日志,这会在 WorkloadsPods 页面中报告问题以便进一步排除故障。
-
检查
4.1.3. 使用 CLI 从 OperatorHub 安装
您可以使用 CLI 从 OperatorHub 安装 Operator,而不必使用 OpenShift Container Platform Web 控制台。使用 oc
命令来创建或更新一个订阅
对象。
先决条件
- 使用具有 Operator 安装权限的账户访问 OpenShift Container Platform 集群。
-
已安装 OpenShift CLI(
oc
)。
流程
查看 OperatorHub 中集群可用的 Operator 列表:
$ oc get packagemanifests -n openshift-marketplace
输出示例
NAME CATALOG AGE 3scale-operator Red Hat Operators 91m advanced-cluster-management Red Hat Operators 91m amq7-cert-manager Red Hat Operators 91m ... couchbase-enterprise-certified Certified Operators 91m crunchy-postgres-operator Certified Operators 91m mongodb-enterprise Certified Operators 91m ... etcd Community Operators 91m jaeger Community Operators 91m kubefed Community Operators 91m ...
记录下所需 Operator 的目录。
检查所需 Operator,以验证其支持的安装模式和可用频道:
$ oc describe packagemanifests <operator_name> -n openshift-marketplace
一个 Operator 组(由
OperatorGroup
对象定义),在其中选择目标命名空间,在其中为与 Operator 组相同的命名空间中的所有 Operator 生成所需的 RBAC 访问权限。订阅 Operator 的命名空间必须具有与 Operator 的安装模式相匹配的 Operator 组,可采用
AllNamespaces
模式,也可采用SingleNamespace
模式。如果要安装的 Operator 使用AllNamespaces
模式,openshift-operators
命名空间已有适当的global-operators
Operator 组。如果要安装的 Operator 采用
SingleNamespace
模式,而您没有适当的 Operator 组,则必须创建一个。注意-
在选择
SingleNamespace
模式时,该流程的 Web 控制台版本会在后台自动为您处理OperatorGroup
和Subscription
对象的创建。 - 每个命名空间只能有一个 Operator 组。如需更多信息,请参阅 "Operator 组"。
创建
OperatorGroup
对象 YAML 文件,如operatorgroup.yaml
:OperatorGroup
对象示例apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: <operatorgroup_name> namespace: <namespace> spec: targetNamespaces: - <namespace>
警告Operator Lifecycle Manager (OLM) 为每个 Operator 组创建以下集群角色:
-
<operatorgroup_name>-admin
-
<operatorgroup_name>-edit
-
<operatorgroup_name>-view
当手动创建 Operator 组时,您必须指定一个没有与现有集群角色或其他 Operator 组冲突的唯一名称。
-
创建
OperatorGroup
对象:$ oc apply -f operatorgroup.yaml
-
在选择
创建一个
Subscription
对象 YAML 文件,以便为 Operator 订阅一个命名空间,如sub.yaml
:Subscription
对象示例apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: <subscription_name> namespace: openshift-operators 1 spec: channel: <channel_name> 2 name: <operator_name> 3 source: redhat-operators 4 sourceNamespace: openshift-marketplace 5 config: env: 6 - name: ARGS value: "-v=10" envFrom: 7 - secretRef: name: license-secret volumes: 8 - name: <volume_name> configMap: name: <configmap_name> volumeMounts: 9 - mountPath: <directory_name> name: <volume_name> tolerations: 10 - operator: "Exists" resources: 11 requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" nodeSelector: 12 foo: bar
- 1
- 对于默认的
AllNamespaces
安装模式用法,请指定openshift-operators
命名空间。另外,如果创建了自定义全局命名空间,您可以指定一个自定义全局命名空间。否则,为SingleNamespace
安装模式使用指定相关单一命名空间。 - 2
- 要订阅的频道的名称。
- 3
- 要订阅的 Operator 的名称。
- 4
- 提供 Operator 的目录源的名称。
- 5
- 目录源的命名空间。将
openshift-marketplace
用于默认的 OperatorHub 目录源。 - 6
env
参数定义必须存在于由 OLM 创建的 pod 中所有容器中的环境变量列表。- 7
envFrom
参数定义要在容器中填充环境变量的源列表。- 8
volumes
参数定义 OLM 创建的 pod 上必须存在的卷列表。- 9
volumeMounts
参数定义由 OLM 创建的 pod 中必须存在的卷挂载列表。如果volumeMount
引用不存在的卷
,OLM 无法部署 Operator。- 10
tolerations
参数为 OLM 创建的 pod 定义 Tolerations 列表。- 11
resources
参数为 OLM 创建的 pod 中所有容器定义资源限制。- 12
nodeSelector
参数为 OLM 创建的 pod 定义NodeSelector
。
如果集群为 STS 模式,在
Subscription
对象中包含以下字段:kind: Subscription # ... spec: installPlanApproval: Manual 1 config: env: - name: ROLEARN value: "<role_arn>" 2
创建
Subscription
对象:$ oc apply -f sub.yaml
此时,OLM 已了解所选的 Operator。Operator 的集群服务版本(CSV)应出现在目标命名空间中,由 Operator 提供的 API 应可用于创建。
其他资源
4.1.4. 安装 Operator 的特定版本
您可以通过在 Subscription
对象中设置集群服务版本(CSV)来安装 Operator 的特定版本。
先决条件
- 使用具有 Operator 安装权限的账户访问 OpenShift Container Platform 集群。
-
已安装 OpenShift CLI(
oc
)。
流程
运行以下命令,查找您要安装的 Operator 的可用版本和频道:
命令语法
$ oc describe packagemanifests <operator_name> -n <catalog_namespace>
例如,以下命令从 OperatorHub 打印 Red Hat Quay Operator 可用频道和版本:
示例命令
$ oc describe packagemanifests quay-operator -n openshift-marketplace
例 4.1. 输出示例
Name: quay-operator Namespace: operator-marketplace Labels: catalog=redhat-operators catalog-namespace=openshift-marketplace hypershift.openshift.io/managed=true operatorframework.io/arch.amd64=supported operatorframework.io/os.linux=supported provider=Red Hat provider-url= Annotations: <none> API Version: packages.operators.coreos.com/v1 Kind: PackageManifest ... Current CSV: quay-operator.v3.7.11 ... Entries: Name: quay-operator.v3.7.11 Version: 3.7.11 Name: quay-operator.v3.7.10 Version: 3.7.10 Name: quay-operator.v3.7.9 Version: 3.7.9 Name: quay-operator.v3.7.8 Version: 3.7.8 Name: quay-operator.v3.7.7 Version: 3.7.7 Name: quay-operator.v3.7.6 Version: 3.7.6 Name: quay-operator.v3.7.5 Version: 3.7.5 Name: quay-operator.v3.7.4 Version: 3.7.4 Name: quay-operator.v3.7.3 Version: 3.7.3 Name: quay-operator.v3.7.2 Version: 3.7.2 Name: quay-operator.v3.7.1 Version: 3.7.1 Name: quay-operator.v3.7.0 Version: 3.7.0 Name: stable-3.7 ... Current CSV: quay-operator.v3.8.5 ... Entries: Name: quay-operator.v3.8.5 Version: 3.8.5 Name: quay-operator.v3.8.4 Version: 3.8.4 Name: quay-operator.v3.8.3 Version: 3.8.3 Name: quay-operator.v3.8.2 Version: 3.8.2 Name: quay-operator.v3.8.1 Version: 3.8.1 Name: quay-operator.v3.8.0 Version: 3.8.0 Name: stable-3.8 Default Channel: stable-3.8 Package Name: quay-operator
提示您可以运行以下命令来以 YAML 格式输出 Operator 的版本和频道信息:
$ oc get packagemanifests <operator_name> -n <catalog_namespace> -o yaml
如果在命名空间中安装多个目录,请运行以下命令从特定目录中查找 Operator 的可用版本和频道:
$ oc get packagemanifest \ --selector=catalog=<catalogsource_name> \ --field-selector metadata.name=<operator_name> \ -n <catalog_namespace> -o yaml
重要如果没有指定 Operator 的目录,运行
oc get packagemanifest
和oc describe packagemanifest
命令可能会在满足以下条件时从一个意料外的目录中返回一个软件包:- 在同一命名空间中安装多个目录。
- 目录包含具有相同名称的相同 Operator 或 Operator。
由
OperatorGroup
对象定义的 Operator 组选择目标命名空间,在其中为与 Operator 组相同的命名空间中的所有 Operator 生成所需的基于角色的访问控制 (RBAC) 访问权限。订阅 Operator 的命名空间必须具有与 Operator 的安装模式相匹配的 Operator 组,可采用
AllNamespaces
模式,也可采用SingleNamespace
模式。如果您要使用AllNamespaces
模式安装的 Operator,则openshift-operators
命名空间已有适当的 Operator 组。如果要安装的 Operator 采用
SingleNamespace
模式,而您没有适当的 Operator 组,则必须创建一个:创建
OperatorGroup
对象 YAML 文件,如operatorgroup.yaml
:OperatorGroup
对象示例apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: <operatorgroup_name> namespace: <namespace> spec: targetNamespaces: - <namespace>
警告Operator Lifecycle Manager (OLM) 为每个 Operator 组创建以下集群角色:
-
<operatorgroup_name>-admin
-
<operatorgroup_name>-edit
-
<operatorgroup_name>-view
当手动创建 Operator 组时,您必须指定一个没有与现有集群角色或其他 Operator 组冲突的唯一名称。
-
创建
OperatorGroup
对象:$ oc apply -f operatorgroup.yaml
通过设置
startingCSV
字段,创建一个Subscription
对象 YAML 文件,向带有特定版本的 Operator 订阅一个命名空间。将installPlanApproval
字段设置为Manual
,以便在目录中存在更新的版本时防止 Operator 自动升级。例如,可以使用以下
sub.yaml
文件安装 Red Hat Quay Operator,专门用于版本 3.7.10:带有特定起始 Operator 版本的订阅
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: quay-operator namespace: quay spec: channel: stable-3.7 installPlanApproval: Manual 1 name: quay-operator source: redhat-operators sourceNamespace: openshift-marketplace startingCSV: quay-operator.v3.7.10 2
创建
Subscription
对象:$ oc apply -f sub.yaml
- 手动批准待处理的安装计划以完成 Operator 安装。
4.1.5. 在 web 控制台中安装 Operator 的特定版本
您可以使用 Web 控制台中的 OperatorHub 安装 Operator 的特定版本。您可以在其可能具有的任何频道中浏览 Operator 的各种版本,查看该频道和版本的元数据,然后选择您要安装的确切版本。
先决条件
- 您必须具有管理员特权。
流程
-
在 Web 控制台中,点 Operators
OperatorHub。 - 选择您要安装的 Operator。
在所选的 Operator 中,您可以从列表中选择一个 Channel 和 Version。
注意版本选择默认为所选频道的最新版本。如果选择了该频道的最新版本,则默认启用自动批准策略。如果没有为所选频道安装最新版本,则需要手动批准。
手动批准适用于命名空间中安装的所有 Operator。
使用手动批准安装 Operator 会导致命名空间中安装的所有 Operator 并使用 Manual 批准策略和所有 Operator 一起更新。将 Operator 安装到单独的命名空间中,以独立更新。
- 点 Install
验证
安装 Operator 时,元数据会指示安装了哪个频道和版本。
注意频道和版本下拉菜单仍可查看此目录上下文中的其他版本元数据。
4.1.6. 为多租户集群准备多个 Operator 实例
作为集群管理员,您可以添加多个 Operator 实例以用于多租户集群。这是使用标准 All namespaces 安装模式的替代解决方案,可被视为违反最小特权的原则,或 Multinamespace 模式(没有被广泛采用)。如需更多信息,请参阅"多租户集群中的Operator"。
在以下步骤中,租户 是为一组部署的工作负载共享通用访问和特权的用户或组。租户 Operator 是 Operator 实例,仅用于由该租户使用。
先决条件
您要安装的 Operator 的所有实例都必须在给定集群中相同。
重要有关这个限制和其他限制的更多信息,请参阅"多租户集群中的Operator"。
流程
在安装 Operator 前,为租户 Operator 创建一个命名空间,该 Operator 与租户的命名空间分开。例如,如果租户的命名空间是
team1
,您可以创建一个team1-operator
命名空间:定义
Namespace
资源并保存 YAML 文件,如team1-operator.yaml
:apiVersion: v1 kind: Namespace metadata: name: team1-operator
运行以下命令创建命名空间:
$ oc create -f team1-operator.yaml
为租户 Operator 创建 Operator 组,范围到租户的命名空间,只有
spec.targetNamespaces
列表中有一个命名空间条目:定义
OperatorGroup
资源并保存 YAML 文件,如team1-operatorgroup.yaml
:apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: team1-operatorgroup namespace: team1-operator spec: targetNamespaces: - team1 1
- 1
- 仅在
spec.targetNamespaces
列表中定义租户的命名空间。
运行以下命令来创建 Operator 组:
$ oc create -f team1-operatorgroup.yaml
后续步骤
在租户 Operator 命名空间中安装 Operator。通过在 Web 控制台中使用 OperatorHub 而不是 CLI,可以更轻松地执行此任务;请参阅 使用 Web 控制台从 OperatorHub 安装。
注意完成 Operator 安装后,Operator 驻留在租户 Operator 命名空间中,并监视租户命名空间,但 Operator 的 pod 及其服务帐户都无法被租户可见或可用。
其他资源
4.1.7. 在自定义命名空间中安装全局 Operator
在使用 OpenShift Container Platform Web 控制台安装 Operator 时,默认行为会将支持 All namespaces 安装模式的 Operator 安装到默认的 openshift-operators
全局命名空间中。这可能导致与命名空间中所有 Operator 共享安装计划和更新策略相关的问题。有关这些限制的详情,请参阅 "Multitenancy 和 Operator colocation"。
作为集群管理员,您可以通过创建自定义全局命名空间并使用该命名空间安装单个或范围 Operator 及其依赖项来手动绕过此默认行为。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
在安装 Operator 前,为所需 Operator 安装创建一个命名空间。此安装命名空间将成为自定义全局命名空间:
定义
Namespace
资源并保存 YAML 文件,如global-operators.yaml
:apiVersion: v1 kind: Namespace metadata: name: global-operators
运行以下命令创建命名空间:
$ oc create -f global-operators.yaml
创建自定义 全局 Operator 组,这是监视所有命名空间的 Operator 组:
定义
OperatorGroup
资源并保存 YAML 文件,如global-operatorgroup.yaml
。省略spec.selector
和spec.targetNamespaces
字段,使其成为一个全局 Operator 组,该组选择所有命名空间:apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: global-operatorgroup namespace: global-operators
注意创建的全局 OperatorGroup 的
status.namespace
包含空字符串 (""
),而该字符串会向正在使用的 Operator 发出信号,要求其监视所有命名空间。运行以下命令来创建 Operator 组:
$ oc create -f global-operatorgroup.yaml
后续步骤
在自定义全局命名空间中安装所需的 Operator。因为 Web 控制台没有在 Operator 安装过程中使用自定义全局命名空间填充 Installed Namespace 菜单,所以此任务只能使用 OpenShift CLI (
oc
) 执行。具体步骤请参阅使用 CLI 从 OperatorHub 安装。注意启动 Operator 安装时,如果 Operator 有依赖项,依赖项也会自动安装到自定义全局命名空间中。因此,它对依赖项 Operator 有效,使其具有相同的更新策略和共享安装计划。
其他资源
4.1.8. Operator 工作负载的 Pod 放置
默认情况下,Operator Lifecycle Manager(OLM)在安装 Operator 或部署 Operand 工作负载时,会将 pod 放置到任意 worker 节点上。作为管理员,您可以使用节点选择器、污点和容限组合使用项目来控制将 Operator 和 Operands 放置到特定节点。
控制 Operator 和 Operand 工作负载的 pod 放置有以下先决条件:
-
根据您的要求,确定 pod 的目标节点或一组节点。如果可用,请注意现有标签,如
node-role.kubernetes.io/app
,用于标识节点。否则,使用计算机器集或直接编辑节点来添加标签,如myoperator
。您将在以后的步骤中使用此标签作为项目上的节点选择器。 -
如果要确保只有具有特定标签的 pod 才能在节点上运行,同时将不相关的工作负载加载到其他节点,通过使用一个计算机器集或直接编辑节点为节点添加污点。使用一个效果来确保与污点不匹配的新 pod 不能调度到节点上。例如,
myoperator:NoSchedule
污点确保与污点不匹配的新 pod 不能调度到该节点上,但节点上现有的 pod 可以保留。 - 创建使用默认节点选择器配置的项目,如果您添加了污点,则创建一个匹配的容限。
此时,您创建的项目可在以下情况下用于将 pod 定向到指定节点:
- 对于 Operator pod
-
管理员可以在项目中创建
Subscription
对象,如以下部分所述。因此,Operator pod 放置在指定的节点上。 - 对于 Operand pod
- 通过使用已安装的 Operator,用户可以在项目中创建一个应用程序,这样可将 Operator 拥有的自定义资源(CR)放置到项目中。因此,Operand pod 放置到指定节点上,除非 Operator 在其他命名空间中部署集群范围对象或资源,在这种情况下,不会应用这个自定义的 pod 放置。
其他资源
- 手动向节点或计算机器集添加污点和容限
- 创建项目范围节点选择器
- 使用节点选择器和容限创建项目
4.1.9. 控制安装 Operator 的位置
默认情况下,当安装 Operator 时,OpenShift Container Platform 会随机将 Operator pod 安装到其中一个 worker 节点。然而,在某些情况下,您可能希望该 pod 调度到特定节点或一组节点上。
以下示例描述了您可能希望将 Operator pod 调度到特定节点或一组节点的情况:
-
如果 Operator 需要特定的平台,如
amd64
或arm64
- 如果 Operator 需要特定的操作系统,如 Linux 或 Windows
- 如果您希望 Operator 在同一个主机上或位于同一机架的主机上工作
- 如果您希望 Operator 在整个基础架构中分散,以避免因为网络或硬件问题而停机
您可以通过在 Operator 的 Subscription
对象中添加节点关联性、pod 关联性或 pod 反关联性限制来控制 Operator pod 的安装位置。节点关联性是由调度程序用来确定 pod 的可放置位置的一组规则。pod 关联性允许您确保将相关的 pod 调度到同一节点。通过 Pod 反关联性,您可以防止 pod 调度到节点上。
以下示例演示了如何使用节点关联性或 pod 反关联性将自定义 Metrics Autoscaler Operator 实例安装到集群中的特定节点:
将 Operator pod 放置到特定节点的节点关联性示例
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-custom-metrics-autoscaler-operator
namespace: openshift-keda
spec:
name: my-package
source: my-operators
sourceNamespace: operator-registries
config:
affinity:
nodeAffinity: 1
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- ip-10-0-163-94.us-west-2.compute.internal
#...
- 1
- 要求 Operator 的 pod 调度到名为
ip-10-0-163-94.us-west-2.compute.internal
的节点关联性。
将 Operator pod 放置到带有特定平台的节点关联性示例
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-custom-metrics-autoscaler-operator
namespace: openshift-keda
spec:
name: my-package
source: my-operators
sourceNamespace: operator-registries
config:
affinity:
nodeAffinity: 1
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
- key: kubernetes.io/os
operator: In
values:
- linux
#...
- 1
- 要求 Operator 的 pod 调度到具有
kubernetes.io/arch=arm64
和kubernetes.io/os=linux
标签的节点上。
将 Operator pod 放置到一个或多个特定节点的 Pod 关联性示例
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-custom-metrics-autoscaler-operator
namespace: openshift-keda
spec:
name: my-package
source: my-operators
sourceNamespace: operator-registries
config:
affinity:
podAffinity: 1
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- test
topologyKey: kubernetes.io/hostname
#...
- 1
- 将 Operator 的 pod 放置到具有
app=test
标签的 pod 的节点上的 pod 关联性。
防止 Operator pod 来自一个或多个特定节点的 Pod 反关联性示例
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-custom-metrics-autoscaler-operator
namespace: openshift-keda
spec:
name: my-package
source: my-operators
sourceNamespace: operator-registries
config:
affinity:
podAntiAffinity: 1
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: cpu
operator: In
values:
- high
topologyKey: kubernetes.io/hostname
#...
- 1
- 一个 pod 反关联性,它可防止 Operator 的 pod 调度到具有
cpu=high
标签的 pod 的节点上。
流程
要控制 Operator pod 的放置,请完成以下步骤:
- 照常安装 Operator。
- 如果需要,请确保您的节点已标记为正确响应关联性。
编辑 Operator
Subscription
对象以添加关联性:apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: openshift-custom-metrics-autoscaler-operator namespace: openshift-keda spec: name: my-package source: my-operators sourceNamespace: operator-registries config: affinity: 1 nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - ip-10-0-185-229.ec2.internal #...
- 1
- 添加
nodeAffinity
、podAffinity
或podAntiAffinity
。有关创建关联性的详情,请参考下面的附加资源部分。
验证
要确保 pod 部署到特定的节点上,请运行以下命令:
$ oc get pods -o wide
输出示例
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES custom-metrics-autoscaler-operator-5dcc45d656-bhshg 1/1 Running 0 50s 10.131.0.20 ip-10-0-185-229.ec2.internal <none> <none>