$ oc label node <node-name> node-role.kubernetes.io/infra=
您可以使用基础设施节点隔离基础设施工作负载,主要有两个目的:
防止与订阅数量相关的计费成本
分离维护和管理
您可以使用 OpenShift Container Platform 在基础设施节点上运行 GitOps 控制平面工作负载。这包括 Operator pod 和 Red Hat OpenShift GitOps Operator 在默认情况下在 `openshift-gitops` 命名空间中创建的控制平面工作负载,包括此命名空间中的默认 Argo CD 实例。
使用 GitOps 控制平面工作负载,您可以通过在集群中创建多个隔离的 Argo CD 实例并完全控制 Argo CD 实例的功能来安全且声明式地隔离基础设施工作负载。此外,您可以在多个开发人员命名空间中声明性地管理这些 Argo CD 实例。通过使用污点,您可以确保只有基础设施组件在这些节点上运行。
在用户命名空间中安装的所有其他 Argo CD 实例都不能在基础设施节点上运行。 |
您可以将 Red Hat OpenShift GitOps 安装的 GitOps 控制平面工作负载迁移到基础设施节点。以下是可以迁移的控制平面工作负载:
集群部署
(后端服务)
openshift-gitops-applicationset-controller 部署
openshift-gitops-dex-server 部署
openshift-gitops-redis 部署
openshift-gitops-redis-ha-haproxy 部署
openshift-gitops-repo-sever 部署
openshift-gitops-server 部署
openshift-gitops-application-controller statefulset
openshift-gitops-redis-server statefulset
通过运行以下命令将现有节点标记为基础设施节点
$ oc label node <node-name> node-role.kubernetes.io/infra=
编辑 `GitOpsService` 自定义资源 (CR) 以添加基础设施节点选择器
$ oc edit gitopsservice -n openshift-gitops
在GitOpsService
CR 文件的spec
部分添加runOnInfra
字段并将其设置为true
。此字段会将openshift-gitops
命名空间中的控制平面工作负载移动到基础设施节点。
apiVersion: pipelines.openshift.io/v1alpha1
kind: GitopsService
metadata:
name: cluster
spec:
runOnInfra: true
可选:应用污点并隔离基础设施节点上的工作负载,防止其他工作负载调度到这些节点。
$ oc adm taint nodes -l node-role.kubernetes.io/infra
infra=reserved:NoSchedule infra=reserved:NoExecute
可选:如果将污点应用于节点,则可以在GitOpsService
CR 中添加容忍。
spec:
runOnInfra: true
tolerations:
- effect: NoSchedule
key: infra
value: reserved
- effect: NoExecute
key: infra
value: reserved
要验证工作负载是否已调度到 Red Hat OpenShift GitOps 命名空间中的基础设施节点,请单击任何 Pod 名称,并确保已添加**节点选择器**和**容忍**。
在默认 Argo CD CR 中手动添加的**节点选择器**和**容忍**将被切换和 |
您可以将 GitOps Operator Pod 移动到基础设施节点。
您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps Operator。
您可以使用cluster-admin
权限访问集群。
通过运行以下命令将现有节点标记为基础设施节点
$ oc label node <node_name> node-role.kubernetes.io/infra= (1)
1 | 将<node_name>替换为您要标记为基础设施节点的节点名称。 |
node/<node_name> labeled
通过运行以下命令编辑 Red Hat OpenShift GitOps Subscription
资源
$ oc -n openshift-gitops-operator edit subscription openshift-gitops-operator
在Subscription
资源的spec.config
字段中添加nodeSelector
和tolerations
。
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-gitops-operator
namespace: openshift-gitops-operator
spec:
config:
nodeSelector: (1)
node-role.kubernetes.io/infra: ""
tolerations: (2)
- key: node-role.kubernetes.io/infra
operator: Exists
effect: NoSchedule
1 | 这确保了 Operator Pod 仅调度到基础设施节点上。 |
2 | 这确保了 Pod 被基础设施节点接受。 |
subscription.operators.coreos.com/openshift-gitops-operator edited
通过运行以下命令验证 GitOps Operator Pod 是否正在基础设施节点上运行
$ oc -n openshift-gitops-operator get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
openshift-gitops-operator-controller-manager-abcd 2/2 Running 0 11m 94.142.44.126 <node_name> <none> <none> (1)
1 | 确保列出的<node_name> 是具有node-role.kubernetes.io/infra 标签的节点。 |
有关污点和容忍的更多信息,请参见 使用节点污点控制 Pod 部署位置。
有关基础设施机器集的更多信息,请参见 创建基础设施机器集。