openshift Loki stack 구축 방법

2–4분

이 모든 환경은 openshift가 구축된 상태에서 진행합니다.

이번 환경은 openshift 4.14.0에서 Test 진행된 사항입니다.

MinIO Operator + Loki 적용 이유

  • OpenShift Logging의 Log 저장소가 기존에는 Elasticsearch 기반이였으나. 추후에는 deprecated 및 removed 예정
  • Elasticsearch의 고질적인 문제를 해결하기 위한 Loki 사용
    • 과도한 로그 발생시 OOM 발생 등
    • Fluentd 의 OOM 등..
  • OpenShift의 Loki Stack의 경우 S3 Stroage가 필요함.
    • 오픈소스의 경우 NFS Storage도 가능

MinIO 구축

1. MinIO Operator 설치

  • OperatorHub의 Certified Operator중 Minio Operator 설치

2. MinIO Operator Console Expose

  • 생성되는 console service 기반으로 Router 생성
  • Router 생성시 TLS 사용하며 Passthrough/redirect 모드로 console svc의 9443 포트 사용

3. MinIO kubectl plugin 설치

Minio Operator Console에 접속하기 위한 JWT 토큰 발급이 필요하기에 kubectl minio plugin 설치 해야함.

$ https://github.com/minio/operator/releases/latest/download/kubectl-minio_linux_amd64_v1.zip
$ unzip kubectl-minio_linux_amd64_v1.zip
$ mv kubectl-minio /usr/local/bin

[root@bastion nfsshare]# oc minio version
Kubectl-Plugin Version: v5.0.11

[root@bastion nfsshare]# oc minio proxy
Starting port forward of the Console UI.

To connect open a browser and go to http://localhost:9090

Current JWT to login: eyJhbGciOiJSUzI1NiIsImtpZCI6IjlMMDE3VUpZUkltNms0MldUTEtiRUMtRFhTNVJXdVhDbGRReVZIT29lbUUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJtaW5pby1vcGVyYXRvciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJjb25zb2xlLXNhLXRva2VuLTh2OWdjIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImNvbnNvbGUtc2EiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5NDIzOWM1ZS02MWU3LTQ2MDAtYTY4ZS05NzRjYTU3Y2JhOTUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6bWluaW8tb3BlcmF0b3I6Y29uc29sZS1zYSJ9.viKMGuA13HwCWfXwRW_7Y2yHrWD8--54z8fAbE5Rc7p-VfrAwecVKfiTiatfrKHGVzkLTCTVAV8VrTQIb_Uz9XQZTsgNBFTE0prAaWmwsz61xllPS86UQwK_Qr86L6jSK06YnLnmsYJjkIkAa2V9rvt5eRRlBhbiMFCTlnIG2nVOjJNEhF5oXCwj8CXmV2NOrhxfrFSm-83sVgdKk454ttOtkj3DdT69bDiMgUM01JQkvLl6sQdIoQyQi5Gn-46SP52yaVCPOK6NomP-zCYLx1fyIYCPKbl5pzj2ehJE4e6iCiOg-Hb1_3F2KwZPUqD9g3mFJTyQ527x4-Ev7weQGuQRajTXaaH9R2JI8eVa_rG_mGUxd9RABVaLg29qWC2BNdzl8DojyHhGInUSiB9EddJwpycUmzLysK_OChJk4eaPhxXB51mrvSlcF87QH04xIqoMqaxAUHT3OxEDNeP_tZTbGY9AzuYCuOXZS57E0DhfpYh2W4KL-4Hn0-htWPhI5PoIAOWFdXaKqF5RfOM_wbOck6gYjACm8A5rLDif0NhkJAX6K1XdoDO5fsN-vLNCZLKSpYWCXM__VFpGE6n1d2vgsxdVFBjFPseT6Mt-l7cETCMPo0x-dKlvi9nRxZ2vJ7Y_cZDkTqk_e6CenyXIlkl9R75uTOIaLSWXW8blO7Y

Forwarding from 0.0.0.0:9090 -> 9090

4. MinIO Operator Console 접속

  • JMT token으로 로그인 진행 후 접속
  • Tenant 생성을 진행 한다.

5. Tenant 생성하기

  1. MinIO Operator Console에 접속시 오른쪽 상단의 Create Tenant를 클릭하여 Tenant를 생성.(※ storage class는 사전 구성 필요)
  • Tenant Name / Namespace 설정 ( namespace는 미리 생성되어있어야 함.)
  • Storage Class 지정하기
  • Server 개수 지정 ( Number of Servers )
  • Server당 사용할 PV 개수 지정 ( Drives Per Server)

2. Configure

  • Expose MinIO Service: OFF
  • Expose Console Service: OFF

3. Images

  • disconnected 환경에서 수정 필요

4. Pod Placement

  • 미수정

5. Identity Provider

    • 원하는 계정/패스워드로 수정하여 생성 진행

    6. security

    7. Encryption

    • 미수정

    8. Create 생성

    • Statefulset이 생성이 되는데 해당 Statefulset은 테넌트이름-sa 의 serviceaccount 계정으로 기동됨
    • 해당 serviceaccountd에 anyuid 권한 필요
    # example
    $ oc adm policy add-scc-to-user anyuid -z test-sa -n minio-operator
    # default 설정 값
    $ oc adm policy add-scc-to-user anyuid -z 테넌트이름-sa -n 테넌트이름
    

    6. Tenant Console Expose

    Tenant가 정상적으로 생성이 되었다면 테넌트이름-console 이름으로 Service Object가 생성이 된다.

    $ oc expose svc 테넌트이름-console
    $ oc expose svc test-console
    $ oc get svc
    

    7. Tenant Console 접속 및 Bucket 생성

    • 원하는 bucket명을 작성하여 생성 진행

    8. Access Key 생성

    • 해당 Tenant에 접속할 수 있는 Access key를 생성한다.
    • 탭 왼쪽에서 Access Key를 클릭 후 새롭게 생성을 진행한다
    • credentials.json download 진행
    {"url":"http://test-console-minio-operator.apps.ocp.dhwon.com/api/v1/service-account-credentials","accessKey":"RIiKRT4LZO0uiMSqGWIb","secretKey":"7OSjPKdtduOItdZvzsPMhfgYrqlVkojZxMdw6zoG","api":"s3v4","path":"auto"}
    

    Loki Sizing

    • Loki 인스턴스의 size를 지정해야하기 때문에 다음 문서들을 참조하여 사이징 해야함

    [참조사이트]

    Loki Operator 구성

    1. Loki Operator 설치

    • OperatorHub에서 Red Hat Certified Loki Operator 설치

    2. Loki에서 사용할 MinIO 접속 정보 만들기

    OpenShift의 Loki Operator 생성할 때 S3 Storage로 MinIO를 사용하기 위한 API 정보를 미리 만들어야 함.

    credentials.json 파일을 참고해 생성 할 것

    • bucketname: 생성한 bucket name
    • endpoint: url 뒤에 parameter 값 빼고
    • --from-literal=access_key_id: accessKey
    • --from-literal=access_key_secret: secretKey

    # 예시
    oc create secret generic logging-loki-minio --from-literal=bucketnames="test" --from-literal=endpoint="http://test-console-minio-operator.apps.ocp.dhwon.com" --from-literal=access_key_id="RIiKRT4LZO0uiMSqGWIb" --from-literal=access_key_secret="7OSjPKdtduOItdZvzsPMhfgYrqlVkojZxMdw6zoG" -n openshift-logging
    # 참고
    oc create secret generic logging-loki-minio --from-literal=bucketnames="<bucket_name>" --from-literal=endpoint="<minio_bucket_endpoint>" --from-literal=access_key_id="<minio_access_key_id>" --from-literal=access_key_secret="<minio_access_key_secret>" -n openshift-logging
    

    3. Loki Instance 만들기

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: lokistack-sample
      namespace: openshift-logging
    spec:
      tenants:
        mode: openshift-logging
      managementState: Managed
      limits:
        global:
          queries:
            queryTimeout: 3m
      storage:
        schemas:
          - effectiveDate: '2020-10-11'
            version: v11
        secret:
          name: logging-loki-minio
          type: s3
        tls:
          caName: openshift-service-ca.crt
      hashRing:
        type: memberlist
      size: 1x.extra-small                                <-- 앞서 수행한 size 규모를 지정
      storageClassName: managed-nfs-storage               <-- block storage 권장..
    
    • 이때 선언하는 storageClassName은 Loki가 Backend Storage(MinIO)로 데이터를 전송하기 전에 임시로 데이터를 저장하고 있을 공간. Block Storage Class 권장
    • OpenShift가 사용하는 TLS도 설정해야함. 설정하지 않으면 Lokistack 리소스 생성 안됨

    Openshift Logging Operator

    1. Openshift Logging Opertor 설치

    • OperatorHub의 Red Hat Certified OpenShift Logging 설치

    2. Cluster Logging Instance 만들기

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogging
    metadata:
      name: instance
      namespace: openshift-logging
    spec:
      logStore:
        type: lokistack
        lokistack:
          name: lokistack-sample
      collection:
        type: vector
    

    3. OpenShift Web Console로 Loki Dashboard 확인

    • 개발자 콘솔에 들어가서 모니터링을 보면 Logs라는 탭이 추가 된 것을 확인 가능

    [참조자료]