5.5. 클러스터 구성으로 애플리케이션을 배포하여 OpenShift 클러스터 구성

Red Hat OpenShift GitOps를 사용하면 Argo CD를 구성하여 Git 디렉터리의 콘텐츠를 클러스터의 사용자 지정 구성이 포함된 애플리케이션과 반복적으로 동기화할 수 있습니다.

사전 요구 사항

  • 관리자로 제품 인타이틀먼트 클러스터에 로그인했습니다.
  • 클러스터에 gitops-title Operator가 설치되어 있습니다.
  • Argo CD 인스턴스에 로그인했습니다.

5.5.1. Argo CD 인스턴스를 사용하여 클러스터 범위 리소스 관리

클러스터 범위 리소스를 관리하려면 gitops-title Operator의 기존 Subscription 오브젝트를 업데이트하고 spec 섹션의 ARGOCD_CLUSTER_CONFIG_NAMESPACES 환경 변수에 Argo CD 인스턴스의 네임스페이스를 추가합니다.

프로세스

  1. 웹 콘솔의 관리자 화면에서 Operator → 설치된 Operator Red Hat OpenShift GitOps서브스크립션으로 이동합니다.
  2. 작업 드롭다운 메뉴를 클릭한 다음 서브스크립션 편집 을 클릭합니다.
  3. openshift-gitops-operator Subscription 세부 정보 페이지의 YAML 탭에서 Argo CD 인스턴스의 네임스페이스를 spec 섹션의 ARGOCD_CLUSTER_CONFIG_NAMESPACES 환경 변수에 추가하여 서브스크립션 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. 사용자 관리역할로 이동하고 필터 드롭다운 메뉴에서 클러스터 전체 역할을 선택합니다.
    2. 이름으로 검색 필드를 사용하여 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.5.2. Argocd 인스턴스의 기본 권한

기본적으로 Argo CD 인스턴스에는 다음 권한이 있습니다.

  • Argo CD 인스턴스에는 배포된 네임스페이스에서만 리소스를 관리할 수 있는 관리자 권한이 있습니다. 예를 들어 foo 네임스페이스에 배포된 Argo CD 인스턴스에는 해당 네임스페이스에 대해서만 리소스를 관리할 수 있는 관리자 권한이 있습니다.
  • Argo CD에는 리소스에 대한 클러스터 전체 읽기 권한이 있어야 제대로 작동하기 때문에 Argo CD에는 다음과 같은 클러스터 범위 권한이 있습니다.

    - verbs:
        - get
        - list
        - watch
       apiGroups:
        - '*'
       resources:
        - '*'
     - verbs:
        - get
        - list
       nonResourceURLs:
        - '*'
참고
  • Argo CD가 관리하려는 네임스페이스와 리소스로만 쓰기 권한이 제한되도록 Argo CD 및 argocd-serverargocd-application-controller 구성 요소에서 사용하는 클러스터 역할을 편집할 수 있습니다.

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

5.5.3. 클러스터 수준에서 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 사용자 정의 리소스에 허용 오차 를 추가합니다. 예를 들면 다음과 같습니다.

      spec:
        runOnInfra: true
        tolerations:
        - effect: NoSchedule
          key: infra
          value: reserved
        - effect: NoExecute
          key: infra
          value: reserved
  5. 콘솔 UI에서 Pod → Pod 세부 정보를 확인하여 openshift-gitops 네임스페이스의 워크로드가 인프라 노드에서 예약되었는지 확인합니다.
참고

기본 Argo CD 사용자 정의 리소스에 수동으로 추가된 nodeSelector 및 허용 오차GitOpsService 사용자 정의 리소스의 토글 및 허용 오차를 덮어씁니다.

5.5.4. Argo CD 대시보드를 사용하여 애플리케이션 생성

Argo CD는 애플리케이션을 만들 수 있는 대시보드를 제공합니다.

이 샘플 워크플로에서는 Argo CD를 구성하여 cluster 디렉터리의 콘텐츠를 cluster-configs 애플리케이션과 반복적으로 동기화하는 프로세스를 보여줍니다. 디렉터리는 웹 콘솔의 red hat applications menu icon 메뉴에 있는 Red Hat 개발자 블로그에 링크를 추가하는 OpenShift Container Platform 웹 콘솔 클러스터 구성을 정의하고 클러스터에 spring-petclinic 네임스페이스를 정의합니다.

프로세스

  1. Argo CD 대시보드에서 NEW APP (새 앱)을 클릭하여 새 Argo CD 애플리케이션을 추가합니다.
  2. 이 워크플로의 경우 다음 구성을 사용하여 cluster-configs 애플리케이션을 생성합니다.

    애플리케이션 이름
    cluster-configs
    프로젝트
    default
    동기화 정책
    Manual
    리포지터리 URL
    https://github.com/redhat-developer/openshift-gitops-getting-started
    버전
    HEAD
    경로
    cluster
    대상
    https://kubernetes.default.svc
    네임스페이스
    spring-petclinic
    디렉토리 반복
    checked
  3. CREATE (생성)를 클릭하여 애플리케이션을 생성합니다.
  4. 웹 콘솔의 관리자 화면을 열고 왼쪽 메뉴에 있는 관리 → 네임스페이스 로 이동합니다.
  5. 네임스페이스를 검색하고 선택한 다음 openshift -gitops 네임스페이스의 Argo CD 인스턴스가 네임스페이스를 관리할 수 있도록 Label(레이블 ) 필드에 argocd.argoproj.io/managed-by=openshift -gitops 를 입력합니다.

5.5.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/cluster.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.5.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 웹 콘솔로 이동하여 red hat applications menu icon 을 클릭하여 Red Hat 개발자 블로그 - Kubernetes 에 대한 링크가 있는지 확인합니다.
  5. 프로젝트 페이지로 이동하여 spring-petclinic 네임스페이스를 검색하여 클러스터에 추가되었는지 확인합니다.

    클러스터 구성이 클러스터에 성공적으로 동기화됩니다.

5.5.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에서 관리하는 컨트롤 플레인 Operator

storage.k8s.io

스토리지

console.openshift.io

콘솔 사용자 지정

5.5.8. 클러스터 구성에 대한 권한 추가

Argo CD 인스턴스에 대한 권한을 부여하여 클러스터 구성을 관리할 수 있습니다. 추가 권한으로 클러스터 역할을 생성한 다음 새 클러스터 역할 바인딩을 생성하여 클러스터 역할을 서비스 계정과 연결합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 관리자로 로그인합니다.
  2. 웹 콘솔에서 사용자 관리역할 → 역할 생성을 선택합니다. 다음 ClusterRole YAML 템플릿을 사용하여 추가 권한을 지정하는 규칙을 추가합니다.

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: secrets-cluster-role
    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["*"]
  3. 생성을 클릭하여 클러스터 역할을 추가합니다.
  4. 이제 클러스터 역할 바인딩을 생성합니다. 웹 콘솔에서 사용자 관리역할 바인딩 → 바인딩 생성을 선택합니다.
  5. 프로젝트 드롭다운에서 모든 프로젝트를 선택합니다.
  6. 바인딩 생성을 클릭합니다.
  7. 클러스터 전체 역할 바인딩(ClusterRoleBinding)으로 바인딩 유형을 선택합니다.
  8. RoleBinding 이름에 고유한 값을 입력합니다.
  9. 드롭다운 목록에서 새로 생성된 클러스터 역할 또는 기존 클러스터 역할을 선택합니다.
  10. Subject as ServiceAccount 를 선택하고 주체 네임스페이스이름을 입력합니다.

    1. 제목 네임스페이스:openshift-gitops
    2. 제목 이름:openshift-gitops-argocd-application-controller
  11. 생성을 클릭합니다. 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: admin

5.5.9. Red Hat OpenShift GitOps를 사용하여 OLM Operator 설치

클러스터 구성을 사용하는 Red Hat OpenShift GitOps는 특정 클러스터 범위 리소스를 관리하고 클러스터 Operator 또는 네임스페이스 범위 OLM Operator를 설치합니다.

클러스터 관리자로서 Tekton과 같은 OLM Operator를 설치해야 하는 경우를 고려하십시오. OpenShift Container Platform 웹 콘솔을 사용하여 Tekton Operator 또는 OpenShift CLI를 수동으로 설치하여 클러스터에 Tekton 서브스크립션 및 Tekton Operator group을 수동으로 설치합니다.

Red Hat OpenShift GitOps는 Kubernetes 리소스를 Git 리포지토리에 배치합니다. 클러스터 관리자는 Red Hat OpenShift GitOps를 사용하여 수동 절차 없이 다른 OLM Operator의 설치를 관리하고 자동화합니다. 예를 들어 Red Hat OpenShift GitOps를 사용하여 Git 리포지토리에 Tekton 서브스크립션을 배치한 후 Red Hat OpenShift GitOps는 Git 리포지토리에서 이 Tekton 서브스크립션을 자동으로 가져와서 클러스터에 Tekton Operator를 설치합니다.

5.5.9.1. 클러스터 범위 Operator 설치

OLM(Operator Lifecycle Manager)은 클러스터 범위 Operator에 openshift-operators 네임스페이스에서 기본 global-operators Operator group을 사용합니다. 따라서 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.5.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 group이 있는 경우 해당 네임스페이스에서 생성된 모든 CSV는 TooManyOperatorGroups 이유와 함께 실패 상태로 전환됩니다. 해당 네임스페이스의 Operator groups 수가 1에 도달하면 이전 실패 상태 CSV가 모두 pending 상태로 전환됩니다. Operator 설치를 완료하려면 보류 중인 설치 계획을 수동으로 승인해야 합니다.