×

您可以使用基础设施节点隔离基础设施工作负载,主要有两个目的:

  • 防止与订阅数量相关的计费成本

  • 分离维护和管理

您可以使用 OpenShift Container Platform 在基础设施节点上运行 GitOps 控制平面工作负载。这包括 Operator pod 和 Red Hat OpenShift GitOps Operator 在默认情况下在 `openshift-gitops` 命名空间中创建的控制平面工作负载,包括此命名空间中的默认 Argo CD 实例。

使用 GitOps 控制平面工作负载,您可以通过在集群中创建多个隔离的 Argo CD 实例并完全控制 Argo CD 实例的功能来安全且声明式地隔离基础设施工作负载。此外,您可以在多个开发人员命名空间中声明性地管理这些 Argo CD 实例。通过使用污点,您可以确保只有基础设施组件在这些节点上运行。

在用户命名空间中安装的所有其他 Argo CD 实例都不能在基础设施节点上运行。

将 GitOps 控制平面工作负载迁移到基础设施节点

您可以将 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

步骤
  1. 通过运行以下命令将现有节点标记为基础设施节点

    $ oc label node <node-name> node-role.kubernetes.io/infra=
  2. 编辑 `GitOpsService` 自定义资源 (CR) 以添加基础设施节点选择器

    $ oc edit gitopsservice -n openshift-gitops
  3. GitOpsService CR 文件的spec 部分添加runOnInfra 字段并将其设置为true。此字段会将openshift-gitops命名空间中的控制平面工作负载移动到基础设施节点。

    apiVersion: pipelines.openshift.io/v1alpha1
    kind: GitopsService
    metadata:
      name: cluster
    spec:
      runOnInfra: true
  4. 可选:应用污点并隔离基础设施节点上的工作负载,防止其他工作负载调度到这些节点。

    $ oc adm taint nodes -l node-role.kubernetes.io/infra
    infra=reserved:NoSchedule infra=reserved:NoExecute
  5. 可选:如果将污点应用于节点,则可以在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 中手动添加的**节点选择器**和**容忍**将被切换和GitOpsService CR 中的容忍覆盖。

将 GitOps Operator Pod 移动到基础设施节点

您可以将 GitOps Operator Pod 移动到基础设施节点。

前提条件
  • 您已在 OpenShift Container Platform 集群上安装了 Red Hat OpenShift GitOps Operator。

  • 您可以使用cluster-admin权限访问集群。

步骤
  1. 通过运行以下命令将现有节点标记为基础设施节点

    $ oc label node <node_name> node-role.kubernetes.io/infra= (1)
    1 将<node_name>替换为您要标记为基础设施节点的节点名称。
    示例输出
    node/<node_name> labeled
  2. 通过运行以下命令编辑 Red Hat OpenShift GitOps Subscription 资源

    $ oc -n openshift-gitops-operator edit subscription openshift-gitops-operator
  3. Subscription 资源的spec.config字段中添加nodeSelectortolerations

    示例 Subscription
    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
  4. 通过运行以下命令验证 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标签的节点。

其他资源