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 인스턴스의 네임스페이스를 추가합니다.
프로세스
-
웹 콘솔의 관리자 화면에서 Operator
설치된 Operator Red Hat OpenShift GitOps 서브스크립션으로 이동합니다. - 작업 드롭다운 메뉴를 클릭한 다음 서브스크립션 편집 을 클릭합니다.
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> ...
Argo 인스턴스가 클러스터 역할로 구성되어 클러스터 범위 리소스를 관리하는지 확인하려면 다음 단계를 수행합니다.
-
사용자 관리
역할로 이동하고 필터 드롭다운 메뉴에서 클러스터 전체 역할을 선택합니다. 이름으로 검색 필드를 사용하여
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-server
및argocd-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 인스턴스 및 관련 컨트롤러는 이제 간단한 구성 토글을 설정하여 클러스터의 인프라 노드에서 실행할 수 있습니다.
프로세스
기존 노드에 레이블을 지정합니다.
$ oc label node <node-name> node-role.kubernetes.io/infra=""
선택 사항: 필요한 경우 테인트를 적용하고 인프라 노드에 워크로드를 격리하고 다른 워크로드가 해당 노드에서 예약되지 않도록 할 수도 있습니다.
$ oc adm taint nodes -l node-role.kubernetes.io/infra \ infra=reserved:NoSchedule infra=reserved:NoExecute
GitOpsService
사용자 정의 리소스에runOnInfra
토글을 추가합니다.apiVersion: pipelines.openshift.io/v1alpha1 kind: GitopsService metadata: name: cluster spec: runOnInfra: true
선택 사항: 테인트가 노드에 추가된 경우
GitOpsService
사용자 정의 리소스에허용 오차
를 추가합니다. 예를 들면 다음과 같습니다.spec: runOnInfra: true tolerations: - effect: NoSchedule key: infra value: reserved - effect: NoExecute key: infra value: reserved
-
콘솔 UI에서 Pod
Pod 세부 정보를 확인하여 openshift-gitops
네임스페이스의 워크로드가 인프라 노드에서 예약되었는지 확인합니다.
기본 Argo CD 사용자 정의 리소스에 수동으로 추가된 nodeSelector 및
허용 오차
는 GitOpsService
사용자 정의 리소스의 토글 및 허용 오차를
덮어씁니다.
5.5.4. Argo CD 대시보드를 사용하여 애플리케이션 생성
Argo CD는 애플리케이션을 만들 수 있는 대시보드를 제공합니다.
이 샘플 워크플로에서는 Argo CD를 구성하여 cluster
디렉터리의 콘텐츠를 cluster-configs
애플리케이션과 반복적으로 동기화하는 프로세스를 보여줍니다. 디렉터리는 웹 콘솔의
메뉴에 있는 Red Hat 개발자 블로그에 링크를 추가하는 OpenShift Container Platform 웹 콘솔 클러스터 구성을 정의하고 클러스터에 spring-petclinic
네임스페이스를 정의합니다.
프로세스
- Argo CD 대시보드에서 NEW APP (새 앱)을 클릭하여 새 Argo CD 애플리케이션을 추가합니다.
이 워크플로의 경우 다음 구성을 사용하여 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
- CREATE (생성)를 클릭하여 애플리케이션을 생성합니다.
- 웹 콘솔의 관리자 화면을 열고 왼쪽 메뉴에 있는 관리 → 네임스페이스 로 이동합니다.
-
네임스페이스를 검색하고 선택한 다음
openshift
를 입력합니다.-gitops 네임스페이스의 Argo CD 인스턴스가 네임스페이스를 관리할 수 있도록 Label(레이블 ) 필드에 argocd.argoproj.io/managed-by=openshift
-gitops
5.5.5. oc
툴을 사용하여 애플리케이션 생성
oc
툴을 사용하여 터미널에서 Argo CD 애플리케이션을 생성할 수 있습니다.
프로세스
샘플 애플리케이션을 다운로드합니다.
$ git clone git@github.com:redhat-developer/openshift-gitops-getting-started.git
애플리케이션을 생성합니다.
$ oc create -f openshift-gitops-getting-started/argo/cluster.yaml
oc get
명령을 실행하여 생성된 애플리케이션을 검토합니다.$ oc get application -n openshift-gitops
openshift-gitops
네임스페이스의 Argo CD 인스턴스가 이를 관리할 수 있도록 애플리케이션이 배포된 네임스페이스에 레이블을 추가합니다.$ oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitops
5.5.6. Git 리포지토리와 애플리케이션 동기화
프로세스
- Argo CD 대시보드에서 cluster-configs Argo CD 애플리케이션은 Missing 및 OutOfSync 상태입니다. 애플리케이션이 수동 동기화 정책으로 구성되었으므로 Argo CD는 자동으로 동기화되지 않습니다.
- cluster-configs 타일에서 SYNC 를 클릭하고 변경 사항을 검토한 다음 SYNCHRONIZE 를 클릭합니다. Argo CD는 Git 리포지토리의 모든 변경 사항을 자동으로 감지합니다. 구성이 변경되면 Argo CD는 cluster-configs의 상태를 OutOfSync로 변경합니다. Argo CD의 동기화 정책을 수정하여 Git 리포지토리에서 클러스터에 변경 사항을 자동으로 적용할 수 있습니다.
- cluster-configs Argo CD 애플리케이션이 이제 Healthy 및 Synced 상태가 됩니다. cluster-configs 타일을 클릭하여 동기화된 리소스의 세부 정보와 클러스터의 상태를 확인합니다.
- OpenShift Container Platform 웹 콘솔로 이동하여 을 클릭하여 Red Hat 개발자 블로그 - Kubernetes 에 대한 링크가 있는지 확인합니다.
프로젝트 페이지로 이동하여
spring-petclinic
네임스페이스를 검색하여 클러스터에 추가되었는지 확인합니다.클러스터 구성이 클러스터에 성공적으로 동기화됩니다.
5.5.7. 클러스터 구성에 대한 내장 권한
기본적으로 Argo CD 인스턴스에는 클러스터 Operator, 선택적 OLM Operator 및 사용자 관리와 같은 특정 클러스터 범위 리소스를 관리할 수 있는 권한이 있습니다.
Argo CD에는 cluster-admin 권한이 없습니다.
Argo CD 인스턴스에 대한 권한:
Resources | 설명 |
리소스 그룹 | 사용자 또는 관리자 구성 |
| OLM에서 관리하는 선택적 Operator |
| 그룹, 사용자 및 권한 |
| 클러스터 전체 빌드 구성, 레지스트리 구성 및 스케줄러 정책을 구성하는 데 사용되는 CVO에서 관리하는 컨트롤 플레인 Operator |
| 스토리지 |
| 콘솔 사용자 지정 |
5.5.8. 클러스터 구성에 대한 권한 추가
Argo CD 인스턴스에 대한 권한을 부여하여 클러스터 구성을 관리할 수 있습니다. 추가 권한으로 클러스터 역할을 생성한 다음 새 클러스터 역할 바인딩을 생성하여 클러스터 역할을 서비스 계정과 연결합니다.
프로세스
- OpenShift Container Platform 웹 콘솔에 관리자로 로그인합니다.
웹 콘솔에서 사용자 관리
역할 역할 생성을 선택합니다. 다음 ClusterRole
YAML 템플릿을 사용하여 추가 권한을 지정하는 규칙을 추가합니다.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secrets-cluster-role rules: - apiGroups: [""] resources: ["secrets"] verbs: ["*"]
- 생성을 클릭하여 클러스터 역할을 추가합니다.
-
이제 클러스터 역할 바인딩을 생성합니다. 웹 콘솔에서 사용자 관리
역할 바인딩 바인딩 생성을 선택합니다. - 프로젝트 드롭다운에서 모든 프로젝트를 선택합니다.
- 바인딩 생성을 클릭합니다.
- 클러스터 전체 역할 바인딩(ClusterRoleBinding)으로 바인딩 유형을 선택합니다.
- RoleBinding 이름에 고유한 값을 입력합니다.
- 드롭다운 목록에서 새로 생성된 클러스터 역할 또는 기존 클러스터 역할을 선택합니다.
Subject as ServiceAccount 를 선택하고 주체 네임스페이스 와 이름을 입력합니다.
-
제목 네임스페이스:
openshift-gitops
-
제목 이름:
openshift-gitops-argocd-application-controller
-
제목 네임스페이스:
생성을 클릭합니다.
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의 Subscription
및 OperatorGroup
리소스를 생성하고 배치합니다.
예: 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 설치를 완료하려면 보류 중인 설치 계획을 수동으로 승인해야 합니다.