5.7. 通过部署带有集群配置的应用程序来配置 OpenShift 集群


使用 Red Hat OpenShift GitOps,您可以将 Argo CD 配置为将 Git 目录的内容与包含集群自定义配置的应用程序递归同步。

先决条件

  • 以管理员身份登录到 OpenShift Container Platform 集群。
  • 在集群中安装了 Red Hat OpenShift GitOps Operator。
  • 已登录到 Argo CD 实例。

5.7.1. 使用 Argo CD 实例管理集群范围的资源

要管理集群范围的资源,请更新 Red Hat OpenShift GitOps Operator 的现有 Subscription 对象,并将 Argo CD 实例的命名空间添加到 spec 部分中的 ARGOCD_CLUSTER_CONFIG_NAMESPACES 环境变量中。

流程

  1. 在 Web 控制台的 Administrator 视角中,进入到 Operators Installed Operators Red Hat OpenShift GitOps Subscription
  2. Actions 下拉菜单,然后点 Edit Subscription
  3. openshift-gitops-operator 订阅详情页面的 YAML 选项卡下,通过将 Argo CD 实例的命名空间添加到 spec 部分中的 ARGOCD_CLUSTER_CONFIG_NAMESPACES 环境变量来编辑 Subscription YAML 文件:

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-gitops-operator
      namespace: openshift-operators
    ...
    spec:
      config:
        env:
        - name: ARGOCD_CLUSTER_CONFIG_NAMESPACES
          value: openshift-gitops, <list of namespaces of cluster-scoped Argo CD instances>
    ...
  4. 要验证 Argo 实例是否已配置有集群角色来管理集群范围的资源,请执行以下步骤:

    1. 进入到 User Management Roles,然后从 Filter 下拉菜单中选择 Cluster-wide Roles
    2. 使用 Search by name 字段搜索 argocd-application-controller

      Roles 页面显示创建的集群角色。

      提示

      或者,在 OpenShift CLI 中运行以下命令:

      oc auth can-i create oauth -n openshift-gitops --as system:serviceaccount:openshift-gitops:openshift-gitops-argocd-application-controller

      输出 yes 代表 Argo 实例配置了集群角色来管理集群范围的资源。否则,检查您的配置并根据需要执行必要的步骤。

5.7.2. Argocd 实例的默认权限

默认情况下,Argo CD 实例具有以下权限:

  • Argo CD 实例具有 admin 权限,以便仅管理部署它的命名空间中的资源。例如,在 foo 命名空间中部署的 Argo CD 实例具有 admin 权限,仅管理该命名空间的资源。
  • Argo CD 具有以下集群范围的权限,因为 Argo CD 需要对资源进行集群范围的读取权限才能正常工作:

    - verbs:
        - get
        - list
        - watch
       apiGroups:
        - '*'
       resources:
        - '*'
     - verbs:
        - get
        - list
       nonResourceURLs:
        - '*'
注意
  • 您可以编辑运行 Argo CD 的 argocd-serverargocd-application-controller 组件使用的集群角色,以便写入权限仅限于您希望 Argo CD 管理的命名空间和资源。

    $ oc edit clusterrole argocd-server
    $ oc edit clusterrole argocd-application-controller

5.7.3. 在集群级别运行 Argo CD 实例

默认 Argo CD 实例和附带的控制器(由 Red Hat OpenShift GitOps Operator 安装)现在可以通过设置一个简单的配置切换在集群的基础架构节点上运行。

流程

  1. 标记现有节点:

    $ oc label node <node-name> node-role.kubernetes.io/infra=""
  2. 可选:如果需要,您还可以在基础架构节点上应用污点并隔离工作负载,并防止其他工作负载在这些节点上调度:

    $ oc adm taint nodes -l node-role.kubernetes.io/infra \
    infra=reserved:NoSchedule infra=reserved:NoExecute
  3. GitOpsService 自定义资源中添加 runOnInfra 切换:

    apiVersion: pipelines.openshift.io/v1alpha1
    kind: GitopsService
    metadata:
      name: cluster
    spec:
      runOnInfra: true
  4. 可选:如果将污点添加到节点,则在 GitOpsService 自定义资源中添加 容限,例如:

      spec:
        runOnInfra: true
        tolerations:
        - effect: NoSchedule
          key: infra
          value: reserved
        - effect: NoExecute
          key: infra
          value: reserved
  5. 通过在控制台 UI 中查看 Pods Pod details,验证 openshift-gitops 命名空间中的工作负载现在已调度到基础架构节点上。
注意

任何手工添加到默认 Argo CD 自定义资源中的 nodeSelectorstolerations,都会被 GitOpsService 自定义资源的 tolerations 覆盖。

其他资源

5.7.4. 使用 Argo CD 仪表板创建应用程序

Argo CD 提供了一个仪表板,供您创建应用程序。

此示例工作流逐步指导您完成将 Argo CD 配置为递归将 cluster 目录中的内容同步到 cluster-configs- 应用程序。目录定义了 OpenShift Container Platform Web 控制台集群配置,在 web 控制台中的 red hat applications menu icon 菜单下向 Red Hat Developer Blog - Kubernetes 添加链接,并在集群中定义命名空间 spring-petclinic

流程

  1. 在 Argo CD 控制面板中,单击 NEW APP 以添加新 Argo CD 应用。
  2. 对于此工作流,使用以下配置创建一个 cluster-configs 应用程序:

    应用程序名称
    cluster-configs
    project
    default
    同步策略
    Manual(手动)
    仓库 URL
    https://github.com/redhat-developer/openshift-gitops-getting-started
    修订
    HEAD
    路径
    cluster
    目的地
    https://kubernetes.default.svc
    命名空间
    spring-petclinic
    Directory Recurse
    checked
  3. 单击 CREATE 以创建应用程序。
  4. 打开 Web 控制台的 Administrator 视角,并导航到左侧菜单中的 Administration Namespaces
  5. 搜索并选择命名空间,然后在 Label 字段中输入 argocd.argoproj.io/managed-by=openshift-gitops,以便 openshift-gitops 命名空间中的 Argo CD 实例可以管理您的命名空间。

5.7.5. 使用 oc 工具创建应用程序

您可以使用 oc 工具在终端中创建 Argo CD 应用程序。

流程

  1. 下载 示例应用程序

    $ git clone git@github.com:redhat-developer/openshift-gitops-getting-started.git
  2. 创建应用程序:

    $ oc create -f openshift-gitops-getting-started/argo/app.yaml
  3. 运行 oc get 命令以查看所创建的应用程序:

    $ oc get application -n openshift-gitops
  4. 在部署应用程序的命名空间中添加标签,以便 openshift-gitops 命名空间中的 Argo CD 实例可以管理它:

    $ oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitops

5.7.6. 将应用程序与 Git 存储库同步

流程

  1. 在 Argo CD 仪表板中,cluster-configs Argo CD 应用程序的状态为 MissingOutOfSync。因为应用程序配置了手动同步策略,所以 Argo CD 不会自动同步。
  2. cluster-configs 标题上的 SYNC,查看更改,然后点 SYNCHRONIZE。Argo CD 将自动检测 Git 存储库中的任何更改。如果更改了配置,Argo CD 会将 cluster-configs 的状态改为 OutOfSync。您可以修改 Argo CD 的同步策略,以自动将 Git 存储库中的更改应用到集群。
  3. 现在,cluster-configs Argo CD 应用程序的状态为 HealthySynced。点 cluster-configs 标题检查同步资源的详情及其在集群中的状态。
  4. 进入到 OpenShift Container Platform Web 控制台并点击 red hat applications menu icon 以验证 Red Hat Developer Blog - Kubernetes 的链接现在是否存在。
  5. 导航到 Project 页面并搜索 spring-petclinic 命名空间,以验证它是否已添加到集群中。

    集群配置已成功与集群同步。

5.7.7. 集群配置的内置权限

默认情况下,Argo CD 实例具有管理特定集群范围资源的权限,如集群 Operator、可选 OLM Operator 和用户管理。

注意

Argo CD 没有 cluster-admin 权限。

Argo CD 实例的权限:

Resources

描述

资源组

配置用户或管理员

operators.coreos.com

由 OLM 管理的可选 Operator

user.openshift.io , rbac.authorization.k8s.io

组、用户及其权限

config.openshift.io

由 CVO 管理的 control plane Operator,用于配置集群范围的构建配置、registry 配置和调度程序策略

storage.k8s.io

存储

console.openshift.io

控制台自定义

5.7.8. 为集群配置添加权限

您可以授予 Argo CD 实例的权限来管理集群配置。创建具有额外权限的集群角色,然后创建新的集群角色绑定以将集群角色与服务帐户关联。

流程

  1. 以 admin 用户身份登录 OpenShift Container Platform Web 控制台。
  2. 在 Web 控制台中,选择 User Management Roles Create Role。使用以下 ClusterRole YAML 模板来添加规则来指定额外权限。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: secrets-cluster-role
    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["*"]
  3. Create 添加集群角色。
  4. 现在,创建集群角色绑定。在 Web 控制台中,选择 User Management Role Bindings Create Binding
  5. Project 下拉菜单中选择 All Projects
  6. Create binding
  7. Binding type 选择为 Cluster-wide role binding(ClusterRoleBinding)
  8. RoleBinding 名称 输入一个唯一值。
  9. 从下拉列表中选择新创建的集群角色或现有集群角色。
  10. 选择 Subject 作为 ServiceAccount,并提供 Subject 命名空间名称

    1. 主题命名空间:openshift-gitops
    2. 主题名称:openshift-gitops-argocd-application-controller
  11. CreateClusterRoleBinding 对象的 YAML 文件如下:

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: cluster-role-binding
    subjects:
      - kind: ServiceAccount
        name: openshift-gitops-argocd-application-controller
        namespace: openshift-gitops
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: admin

5.7.9. 使用 Red Hat OpenShift GitOps 安装 OLM Operator

带有集群配置的 Red Hat OpenShift GitOps 管理特定集群范围的资源,并负责安装集群 Operator 或任何命名空间范围的 OLM Operator。

考虑作为集群管理员的情况,您必须安装 OLM Operator,如 Tekton。您可以使用 OpenShift Container Platform Web 控制台手动安装 Tekton Operator 或 OpenShift CLI,在集群中手动安装 Tekton 订阅和 Tekton Operator 组。

Red Hat OpenShift GitOps 将 Kubernetes 资源放置在 Git 存储库中。作为集群管理员,使用 Red Hat OpenShift GitOps 管理和自动化其他 OLM Operator 安装,而无需手动步骤。例如,在使用 Red Hat OpenShift GitOps 将 Tekton 订阅放在 Git 仓库后,Red Hat OpenShift GitOps 会自动从 Git 仓库获取此 Tekton 订阅,并在集群中安装 Tekton Operator。

5.7.9.1. 安装集群范围的 Operator

Operator Lifecycle Manager (OLM) 为集群范围的 Operator 使用 openshift-operators 命名空间中的默认 global-operators Operator 组。因此,您不必在 Gitops 仓库中管理 OperatorGroup 资源。但是,对于命名空间范围的 Operator,您必须管理该命名空间中的 OperatorGroup 资源。

要安装集群范围的 Operator,请在 Git 仓库中创建并放置所需 Operator 的 Subscription 资源。

示例:Grafana Operator 订阅

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: grafana
spec:
  channel: v4
  installPlanApproval: Automatic
  name: grafana-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace

5.7.9.2. 安装 namepace-scoped Operator

要安装命名空间范围的 Operator,请在 Git 仓库中创建并放置所需 Operator 的 SubscriptionOperatorGroup 资源。

示例:Ansible Automation Platform Resource Operator

...
apiVersion: v1
kind: Namespace
metadata:
  labels:
    openshift.io/cluster-monitoring: "true"
  name: ansible-automation-platform
...
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: ansible-automation-platform-operator
  namespace: ansible-automation-platform
spec:
  targetNamespaces:
    - ansible-automation-platform
...
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: ansible-automation-platform
  namespace: ansible-automation-platform
spec:
  channel: patch-me
  installPlanApproval: Automatic
  name: ansible-automation-platform-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace
...

重要

当使用 Red Hat OpenShift GitOps 部署多个 Operator 时,您必须在对应的命名空间中创建单个 Operator 组。如果一个命名空间中存在多个 Operator 组,则在该命名空间中创建的任何 CSV 都会变为带有 TooManyOperatorGroups 原因的 failure 状态。在相应命名空间中的 Operator 组数量达到一个后,所有以前有 failure 状态的 CSV 都会过渡到 pending 状态。您需要手动批准待处理的安装计划以完成 Operator 安装。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.