×

先决条件

  • 您已以管理员身份登录到 OpenShift Container Platform 集群。

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

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

除非您有明确的用例需要,否则不要将 Argo CD 实例的权限提升为集群范围。只有具有 `cluster-admin` 权限的用户才能管理您提升的实例。任何有权访问集群范围实例命名空间的人都可以将他们在集群上的权限提升为集群管理员。

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

步骤
  1. 在 Web 控制台的**管理员**视角中,导航到**运算符** → **已安装的运算符** → **Red Hat OpenShift GitOps** → **订阅**。

  2. 点击**操作**列表,然后点击**编辑订阅**。

  3. 在**openshift-gitops-operator**订阅详情页的**YAML**选项卡下,编辑Subscription YAML文件。在spec部分的ARGOCD_CLUSTER_CONFIG_NAMESPACES环境变量中,添加Argo CD实例的命名空间。

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-gitops-operator
      namespace: openshift-gitops-operator
    # ...
    spec:
      config:
        env:
        - name: ARGOCD_CLUSTER_CONFIG_NAMESPACES
          value: openshift-gitops, <list of namespaces of cluster-scoped Argo CD instances>
    # ...
  4. 点击**保存**和**重新加载**。

  5. 要验证Argo CD实例是否已配置为具有管理集群范围资源的集群角色,请执行以下步骤

    1. 导航到**用户管理** → **角色**,然后从**筛选器**列表中选择**集群范围角色**。

    2. 使用**按名称搜索**字段搜索argocd-application-controller

      **角色**页面将显示已创建的集群角色。

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

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

      输出yes验证Argo实例已配置为具有管理集群范围资源的集群角色。否则,请检查您的配置并根据需要采取必要的步骤。

Argo CD实例的默认权限

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

  • Argo CD实例具有admin权限,只能管理其部署所在命名空间中的资源。例如,部署在**foo**命名空间中的Argo CD实例仅具有管理该命名空间资源的admin权限。

  • Argo CD具有以下集群范围权限,因为Argo CD需要对资源具有集群范围的read权限才能正常运行:

    - verbs:
        - get
        - list
        - watch
       apiGroups:
        - '*'
       resources:
        - '*'
     - verbs:
        - get
        - list
       nonResourceURLs:
        - '*'
  • 您可以编辑argocd-serverargocd-application-controller组件(Argo CD运行所在的组件)使用的集群角色,以便将write权限限制在您希望Argo CD管理的命名空间和资源上。

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

在集群级别运行Argo CD实例

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

步骤
  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自定义资源添加tolerations

    示例
    apiVersion: pipelines.openshift.io/v1alpha1
    kind: GitopsService
    metadata:
      name: cluster
      spec:
        runOnInfra: true
        tolerations:
        - effect: NoSchedule
          key: infra
          value: reserved
        - effect: NoExecute
          key: infra
          value: reserved
  5. 通过查看控制台UI中任何pod的**Pod** → **Pod详情**,验证openshift-gitops命名空间中的工作负载现在是否已调度到基础架构节点上。

GitOpsService自定义资源中的切换和tolerations将覆盖手动添加到默认Argo CD自定义资源中的任何nodeSelectorstolerations

其他资源

使用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

先决条件
  • 您已以管理员身份登录到 OpenShift Container Platform 集群。

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

  • 您已登录到Argo CD实例。

步骤
  1. 在Argo CD仪表板中,点击**新建应用**以添加新的Argo CD应用程序。

  2. 对于此工作流程,请使用以下配置创建**cluster-configs**应用程序:

    应用程序名称

    cluster-configs

    项目

    default

    同步策略

    手动

    仓库URL

    https://github.com/redhat-developer/openshift-gitops-getting-started

    版本

    HEAD

    路径

    cluster

    目标

    https://kubernetes.default.svc

    命名空间

    spring-petclinic

    目录递归

    已选中

  3. 点击**创建**以创建您的应用程序。

  4. 打开Web控制台的**管理员**视图,展开**管理** → **命名空间**。

  5. 搜索并选择命名空间,然后在**标签**字段中输入argocd.argoproj.io/managed-by=openshift-gitops,以便openshift-gitops命名空间中的Argo CD实例可以管理您的命名空间。

使用oc工具创建应用程序

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

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

  • 您已登录到Argo CD实例。

步骤
  1. 下载 示例应用程序

    $ git clone [email protected]: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

使用GitOps CLI在默认模式下创建应用程序

您可以使用GitOps argocd CLI在默认模式下创建应用程序。

此示例工作流程将引导您完成配置Argo CD以将cluster目录的内容递归同步到cluster-configs应用程序的过程。该目录定义了OpenShift Container Platform集群配置和集群上的spring-petclinic命名空间。

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

  • 您已安装OpenShift CLI(oc)。

  • 您已安装Red Hat OpenShift GitOps argocd CLI。

  • 您已登录到Argo CD实例。

步骤
  1. 获取Argo CD服务器的admin帐户密码

    $ ADMIN_PASSWD=$(oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d)
  2. 获取Argo CD服务器URL

    $ SERVER_URL=$(oc get routes openshift-gitops-server -n openshift-gitops -o jsonpath='{.status.ingress[0].host}')
  3. 使用admin帐户密码登录到Argo CD服务器,并将其用单引号括起来。

    用单引号括起密码可确保不会将特殊字符(例如$)误解为shell命令。始终使用单引号括起密码的字面值。

    $ argocd login --username admin --password ${ADMIN_PASSWD} ${SERVER_URL}
    示例
    $ argocd login --username admin --password '<password>' openshift-gitops.openshift-gitops.apps-crc.testing
  4. 通过列出所有应用程序来验证您是否能够在默认模式下运行argocd命令。

    $ argocd app list

    如果配置正确,则现有应用程序将以以下标题列出

    示例输出
    NAME CLUSTER NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO PATH TARGET
  5. 在默认模式下创建应用程序

    $ argocd app create app-cluster-configs \
        --repo https://github.com/redhat-developer/openshift-gitops-getting-started.git \
        --path cluster \
        --revision main \
        --dest-server  https://kubernetes.default.svc \
        --dest-namespace spring-petclinic \
        --directory-recurse \
        --sync-policy none \
        --sync-option Prune=true \
        --sync-option CreateNamespace=true
  6. spring-petclinic目标命名空间标记为由openshif-gitops Argo CD 实例管理

    $ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
  7. 列出可用的应用程序以确认应用程序已成功创建

    $ argocd app list

    即使cluster-configs Argo CD 应用程序具有Healthy状态,由于其同步策略为none,因此不会自动同步,导致其保持OutOfSync状态。

使用 GitOps CLI 在核心模式下创建应用程序

可以使用 GitOps argocd CLI 在core模式下创建应用程序。

此示例工作流程将引导您完成配置Argo CD以将cluster目录的内容递归同步到cluster-configs应用程序的过程。该目录定义了OpenShift Container Platform集群配置和集群上的spring-petclinic命名空间。

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

  • 您已安装OpenShift CLI(oc)。

  • 您已安装Red Hat OpenShift GitOps argocd CLI。

步骤
  1. 使用oc CLI 工具登录到 OpenShift Container Platform 集群

    $ oc login -u <username> -p <password> <server_url>
    示例
    $ oc login -u kubeadmin -p '<password>' https://api.crc.testing:6443
  2. 检查kubeconfig文件中上下文是否设置正确

    $ oc config current-context
  3. 将当前上下文的默认命名空间设置为openshift-gitops

    $ oc config set-context --current --namespace openshift-gitops
  4. 设置以下环境变量以覆盖 Argo CD 组件名称

    $ export ARGOCD_REPO_SERVER_NAME=openshift-gitops-repo-server
  5. 通过列出所有应用程序,验证您是否能够在core模式下运行argocd命令

    $ argocd app list --core

    如果配置正确,则现有应用程序将以以下标题列出

    示例输出
    NAME CLUSTER NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO PATH TARGET
  6. core模式下创建应用程序

    $ argocd app create app-cluster-configs --core \
        --repo https://github.com/redhat-developer/openshift-gitops-getting-started.git \
        --path cluster \
        --revision main \
        --dest-server  https://kubernetes.default.svc \
        --dest-namespace spring-petclinic \
        --directory-recurse \
        --sync-policy none \
        --sync-option Prune=true \
        --sync-option CreateNamespace=true
  7. spring-petclinic目标命名空间标记为由openshif-gitops Argo CD 实例管理

    $ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
  8. 列出可用的应用程序以确认应用程序已成功创建

    $ argocd app list --core

    即使cluster-configs Argo CD 应用程序具有Healthy状态,由于其同步策略为none,因此不会自动同步,导致其保持OutOfSync状态。

将您的应用程序与您的 Git 仓库同步

您可以通过修改 Argo CD 的同步策略来将您的应用程序与您的 Git 仓库同步。策略修改会自动将集群配置中的更改从您的 Git 仓库应用到集群。

步骤
  1. 在 Argo CD 仪表板中,请注意**cluster-configs** Argo CD 应用程序具有**Missing**和**OutOfSync**状态。由于该应用程序配置了手动同步策略,因此 Argo CD 不会自动同步它。

  2. 单击**cluster-configs** 磁贴上的**SYNC**,查看更改,然后单击**SYNCHRONIZE**。Argo CD 将自动检测 Git 仓库中的任何更改。如果配置发生更改,Argo CD 将把**cluster-configs**的状态更改为**OutOfSync**。您可以修改 Argo CD 的同步策略,以便自动将 Git 仓库中的更改应用到集群。

  3. 请注意,**cluster-configs** Argo CD 应用程序现在具有**Healthy**和**Synced**状态。单击**cluster-configs** 磁贴以检查集群上已同步资源及其状态的详细信息。

  4. 导航到 OpenShift Container Platform Web 控制台并单击 red hat applications menu icon 以验证现在那里是否存在指向**Red Hat 开发者博客 - Kubernetes**的链接。

  5. 导航到**项目**页面并搜索spring-petclinic命名空间以验证它是否已添加到集群。

    您的集群配置已成功同步到集群。

使用 GitOps CLI 同步默认模式下的应用程序

可以使用 GitOps argocd CLI 同步默认模式下的应用程序。

此示例工作流程将引导您完成配置Argo CD以将cluster目录的内容递归同步到cluster-configs应用程序的过程。该目录定义了OpenShift Container Platform集群配置和集群上的spring-petclinic命名空间。

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

  • 您已登录到Argo CD实例。

  • 您已安装OpenShift CLI(oc)。

  • 您已安装Red Hat OpenShift GitOps argocd CLI。

步骤
  1. 获取Argo CD服务器的admin帐户密码

    $ ADMIN_PASSWD=$(oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d)
  2. 获取Argo CD服务器URL

    $ SERVER_URL=$(oc get routes openshift-gitops-server -n openshift-gitops -o jsonpath='{.status.ingress[0].host}')
  3. 使用admin帐户密码登录到Argo CD服务器,并将其用单引号括起来。

    用单引号括起密码可确保不会将特殊字符(例如$)误解为shell命令。始终使用单引号括起密码的字面值。

    $ argocd login --username admin --password ${ADMIN_PASSWD} ${SERVER_URL}
    示例
    $ argocd login --username admin --password '<password>' openshift-gitops.openshift-gitops.apps-crc.testing
  4. 由于应用程序配置了none同步策略,因此必须手动触发同步操作

    $ argocd app sync openshift-gitops/app-cluster-configs
  5. 列出应用程序以确认应用程序具有HealthySynced状态

    $ argocd app list

使用 GitOps CLI 同步核心模式下的应用程序

可以使用 GitOps argocd CLI 同步core模式下的应用程序。

此示例工作流程将引导您完成配置Argo CD以将cluster目录的内容递归同步到cluster-configs应用程序的过程。该目录定义了OpenShift Container Platform集群配置和集群上的spring-petclinic命名空间。

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

  • 您已安装OpenShift CLI(oc)。

  • 您已安装Red Hat OpenShift GitOps argocd CLI。

步骤
  1. 使用oc CLI 工具登录到 OpenShift Container Platform 集群

    $ oc login -u <username> -p <password> <server_url>
    示例
    $ oc login -u kubeadmin -p '<password>' https://api.crc.testing:6443
  2. 检查kubeconfig文件中上下文是否设置正确

    $ oc config current-context
  3. 将当前上下文的默认命名空间设置为openshift-gitops

    $ oc config set-context --current --namespace openshift-gitops
  4. 设置以下环境变量以覆盖 Argo CD 组件名称

    $ export ARGOCD_REPO_SERVER_NAME=openshift-gitops-repo-server
  5. 由于应用程序配置了none同步策略,因此必须手动触发同步操作

    $ argocd app sync --core openshift-gitops/app-cluster-configs
  6. 列出应用程序以确认应用程序具有HealthySynced状态

    $ argocd app list --core

集群配置的内置权限

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

  • Argo CD 不具有cluster-admin权限。

  • 您可以扩展 GitOps Operator 管理的任何 Argo CD 实例绑定的权限。但是,您不得修改权限资源(例如 GitOps Operator 创建的角色或集群角色),因为 Operator 可能会将其协调回其初始状态。而是创建专用角色和集群角色对象,并将它们绑定到应用程序控制器使用的相应服务帐户。

Argo CD 实例的权限

资源 描述

资源组

配置用户或管理员

operators.coreos.com

由 OLM 管理的可选运算符

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

组、用户及其权限

config.openshift.io

由 CVO 管理的控制平面运算符,用于配置集群范围的构建配置、注册表配置和调度程序策略

storage.k8s.io

存储

console.openshift.io

控制台定制

添加集群配置权限

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

先决条件
  • 您可以访问具有cluster-admin权限的 OpenShift Container Platform 集群,并已登录到 Web 控制台。

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

步骤
  1. 在 Web 控制台中,选择**用户管理** → **角色** → **创建角色**。使用以下ClusterRole YAML 模板添加规则以指定附加权限。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: secrets-cluster-role
    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["*"]
  2. 单击**创建**以添加集群角色。

  3. 要创建集群角色绑定,请选择**用户管理** → **角色绑定** → **创建绑定**。

  4. 从**项目**列表中选择**所有项目**。

  5. 单击**创建绑定**。

  6. 选择**绑定类型**为**集群范围角色绑定 (ClusterRoleBinding)**。

  7. 为**角色绑定名称**输入唯一值。

  8. 从下拉列表中选择新创建的集群角色或现有集群角色。

  9. 选择**主体**为**ServiceAccount**,并提供**主体命名空间**和**名称**。

    1. **主体命名空间**: openshift-gitops

    2. **主体名称**: openshift-gitops-argocd-application-controller

      **主体名称**的值取决于您为其创建集群角色和集群角色绑定的 GitOps 控制平面组件。

  10. 单击**创建**。ClusterRoleBinding对象的 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: secrets-cluster-role

使用 Red Hat OpenShift GitOps 安装 OLM 运算符

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

例如,作为集群管理员,您需要安装 OLM 运算符(例如 Tekton)。您可以使用 OpenShift Container Platform Web 控制台手动安装 Tekton 运算符,或者使用 OpenShift CLI 手动在集群上安装 Tekton 订阅和 Tekton 运算符组。

Red Hat OpenShift GitOps 将您的 Kubernetes 资源放置在 Git 仓库中。作为集群管理员,您可以使用 Red Hat OpenShift GitOps 管理和自动化其他 OLM 运算符的安装,无需任何手动操作。例如,在您使用 Red Hat OpenShift GitOps 将 Tekton 订阅放置在 Git 仓库中后,Red Hat OpenShift GitOps 会自动从您的 Git 仓库获取此 Tekton 订阅并在您的集群上安装 Tekton 运算符。

安装集群范围的运算符

Operator Lifecycle Manager (OLM) 在 `openshift-operators` 命名空间中使用默认的 `global-operators` 运算符组来处理集群范围的运算符。因此,您无需在 GitOps 仓库中管理 `OperatorGroup` 资源。但是,对于命名空间范围的运算符,您必须在该命名空间中管理 `OperatorGroup` 资源。

要安装集群范围的运算符,请创建所需运算符的 `Subscription` 资源并将其放置在 Git 仓库中。

示例:Grafana 运算符订阅
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: grafana
spec:
  channel: v4
  installPlanApproval: Automatic
  name: grafana-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace

安装命名空间范围的运算符

要安装命名空间范围的运算符,请创建所需运算符的 `Subscription` 和 `OperatorGroup` 资源并将其放置在 Git 仓库中。

示例:Ansible Automation Platform 资源运算符
# ...
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 部署多个运算符时,您只需在相应的命名空间中创建一个运算符组。如果单个命名空间中存在多个运算符组,则该命名空间中创建的任何 CSV 将转换为 `failure` 状态,原因是 `TooManyOperatorGroups`。在相应命名空间中的运算符组数量达到一个后,所有之前的 `failure` 状态 CSV 将转换为 `pending` 状态。您必须手动批准挂起的安装计划才能完成运算符安装。