이 항목에서는 Grafana용 TKG 확장 v1.3.1을 배포하고 관리하는 방법을 설명합니다. Grafana를 사용하면 저장된 위치에 상관없이 메트릭을 쿼리, 시각화, 경고 및 탐색할 수 있습니다. Grafana는 애플리케이션 데이터에서 그래프 및 시각화를 형성하는 도구를 제공합니다. Grafana용 TKG 확장을 배포하여 Tanzu Kubernetes 클러스터에 대한 메트릭을 생성하고 확인합니다.

Grafana 확장 사전 요구 사항

확장을 배포하려면 다음 사전 요구 사항을 준수합니다.

Grafana 확장 추가 요구 사항

Grafana 모니터링용 TKG 확장 v1.3.1에는 설치 전후에 추가적인 요구 사항이 있습니다.

  • Grafana 모니터링 확장에는 기본 영구 스토리지 클래스가 필요합니다. 기본 영구 스토리지 클래스를 사용하여 클러스터를 생성하거나 확장을 배포할 때 Grafana 구성 파일에서 클러스터를 지정할 수 있습니다. TKG 확장에 대한 영구 스토리지 요구 사항 검토의 내용을 참조하십시오.
  • Grafana 확장이 배포되면 Kuberetes 서비스 유형인 ClusterIP(기본값), NodePort 또는 LoadBalancer 중 하나에서 노출되는 IP 주소를 사용하여 HTTP/S를 통해 Grafana 대시보드에 액세스합니다. 클러스터 외부에서 Grafana 대시보드에 액세스하려면 Grafana를 배포하기 전에 Contour 확장을 배포합니다. Contour 확장을 배포하려면 Grafana 모니터링을 위한 TKG 확장 배포 및 관리 항목을 참조하십시오.

    Grafana는 다음과 같은 Kuberentes 서비스 유형을 지원합니다.

    서비스 유형 설명 액세스 지원
    ClusterIP 클러스터 내부 IP에서 서비스를 노출합니다. 서비스는 클러스터 내에서만 액세스할 수 있습니다.
    NodePort 정적 포트에서 각 노드의 IP에 서비스를 노출합니다. 클러스터 외부에서 서비스에 액세스할 수 있습니다.
    LoadBalancer 로드 밸런서를 사용하여 서비스를 외부에 노출합니다. 클러스터 외부에서 서비스에 액세스할 수 있습니다.
    ClusterIP가 기본값이지만 클러스터 내에서만 액세스할 수 있습니다. 감독자 클러스터에 NSX-T 네트워킹을 사용하는 경우 LoadBalancer 유형의 Contour 엔보이 서비스를 생성합니다. 감독자 클러스터에 vSphere vDS 네트워킹을 사용하는 경우에는 요구 사항에 따라 LoadBalancer 또는 NodePort 유형의 Contour 엔보이 서비스를 생성합니다.

시각화 및 분석을 위해 Grafana 확장 배포

Grafana용 TKG 확장은 단일 컨테이너를 배포합니다. 자세한 내용은 https://grafana.com/의 내용을 참조하십시오.
컨테이너 리소스 유형 복제 설명
Grafana 배포 2 데이터 시각화
확장은 VMware 공용 레지스트리( https://projects.registry.vmware.com/)에서 컨테이너를 가져오도록 구성됩니다. 개인 레지스트리를 사용하는 경우 데이터 값 및 확장 구성에서 끝점 URL이 일치하도록 변경합니다. Grafana 확장 구성의 내용을 참조하십시오.
  1. 각각의 Grafana 확장 사전 요구 사항을 완료했는지 확인합니다. Grafana 확장 사전 요구 사항의 내용을 참조하십시오.
  2. 디렉토리를 Grafana 확장으로 변경합니다.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
  3. tanzu-system-monitoring 네임스페이스와 Grafana 서비스 계정 및 역할 개체를 생성합니다.
    kubectl apply -f namespace-role.yaml
  4. Grafana 데이터 값 파일을 생성합니다.
    예제 데이터 값 파일은 필요한 최소 구성을 제공합니다.
    cp grafana-data-values.yaml.example grafana-data-values.yaml
  5. grafana-data-values.yaml을 업데이트하여 Grafana 확장을 구성합니다.

    필요에 따라 구성을 사용자 지정합니다. Grafana 확장 구성의 내용을 참조하십시오.

    admin_password를 base64로 인코딩해야 하지만 그렇지 않더라도 확장 배포가 차단되지 않습니다. 아래 예에서 암호 "admin"은 base64로 인코딩됩니다. https://www.base64encode.org/에서 자신의 Grafana 암호를 인코딩하십시오.

    클러스터가 기본 스토리지 클래스로 프로비저닝되지 않은 경우 데이터 값 파일에서 지정할 수 있습니다. 네임스페이스에 영구 볼륨 할당을 위한 충분한 스토리지가 있는지도 확인합니다.
    monitoring:
      grafana:
        image:
          repository: "projects.registry.vmware.com/tkg/grafana"
        pvc:
          storage_class: vwt-storage-policy
          storage: "8Gi"  
        secret:
          admin_password: "YWRtaW4="
      grafana_init_container:
        image:
          repository: "projects.registry.vmware.com/tkg/grafana"
      grafana_sc_dashboard:
        image:
          repository: "projects.registry.vmware.com/tkg/grafana"
    
    LoadBalancer 또는 NodePort 유형의 엔보이 서비스를 사용하여 Contour를 배포한 경우 다음과 같이 구성 파일에 지정합니다. 자세한 내용은 Grafana 확장 구성의 내용을 참조하십시오.
    monitoring:
      grafana:
        service:
          type: LoadBalancer OR NodePort
    

    기본적으로 Grafana 확장은 Grafana 대시보드에 액세스하기 위한 FQDN(정규화된 도메인 이름) grafana.system.tanzu를 생성합니다. 구성 파일(monitoring.grafana.ingress.virtual_host_fqdn)에 원하는 호스트 이름을 지정하여 이 FQDN을 사용자 지정할 수 있습니다. 자세한 내용은 Grafana 확장 구성의 내용을 참조하십시오.

  6. grafana-data-values 파일을 사용하여 Grafana 암호를 생성합니다.
    kubectl create secret generic grafana-data-values --from-file=values.yaml=grafana-data-values.yaml -n tanzu-system-monitoring

    tanzu-system-monitoring 네임스페이스에 grafana-data-values 암호가 생성됩니다. kubectl get secrets -n tanzu-system-monitoring을 사용하여 확인합니다.

  7. Grafana 확장을 배포합니다.
    kubectl apply -f grafana-extension.yaml

    성공하면 Grafana 애플리케이션이 생성됩니다(app.kappctrl.k14s.io/grafana created).

  8. Grafana 애플리케이션의 상태를 확인합니다.
    kubectl get app grafana -n tanzu-system-monitoring
    상태가 Reconciling에서 Reconcile succeeded로 변경되어야 합니다. 상태가 Reconcile failed인 경우 문제 해결을 참조하십시오.
  9. Grafana 애플리케이션에 대한 세부 상태를 표시합니다.
    kubectl get app grafana -n tanzu-system-monitoring -o yaml
  10. Grafana 배포를 확인합니다.
    kubectl get deployments -n tanzu-system-monitoring

LoadBalancer 유형의 Contour 엔보이 서비스를 사용하여 Grafana 대시보드에 액세스

LoadBalancer 유형의 필수 Contour 엔보이 서비스가 배포되고 Grafana 구성 파일에서 이를 지정한 경우 로드 밸런서의 외부 IP 주소를 가져오고 Grafana FQDN에 대한 DNS 레코드를 생성합니다.
  1. LoadBalancer 유형의 엔보이 서비스에 대한 External-IP 주소를 가져옵니다.
    kubectl get service envoy -n tanzu-system-ingress
    반환된 External-IP 주소가 다음과 같이 표시됩니다.
    NAME    TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE
    envoy   LoadBalancer   10.99.25.220   10.195.141.17   80:30437/TCP,443:30589/TCP   3h27m
    또는 다음 명령을 사용하여 External-IP 주소를 가져올 수 있습니다.
    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
  2. Grafana 확장 설치를 확인하려면 로드 밸런서의 External-IP 주소에 매핑된 Grafana FQDN으로 로컬 /etc/hosts 파일을 업데이트합니다. 예를 들면 다음과 같습니다.
    127.0.0.1 localhost
    127.0.1.1 ubuntu
    # TKG Grafana Extension with Envoy Load Balancer
    10.195.141.17 grafana.system.tanzu
    
  3. https://grafana.system.tanzu로 이동하여 Grafana 대시보드에 액세스합니다.

    사이트는 자체 서명된 인증서를 사용하기 때문에 대시보드에 액세스하려면 먼저 브라우저별 보안 주의를 거쳐 이동해야 할 수 있습니다.

  4. 운영 액세스를 위해 엔보이 서비스 로드 밸런서 External-IP 주소를 Grafana 대시보드에 매핑하는 DNS 서버에 두 개의 CNAME 레코드를 생성합니다.

NodePort 유형의 Contour 엔보이 서비스를 사용하여 Grafana 대시보드에 액세스

NodePort 유형의 필수 Contour 엔보이 서비스가 배포되고 Grafana 구성 파일에서 이를 지정한 경우 작업자 노드의 가상 시스템 IP 주소를 가져오고 Grafana FQDN에 대한 DNS 레코드를 생성합니다.
  1. 클러스터가 프로비저닝된 vSphere 네임스페이스로 컨텍스트를 전환합니다.
    kubectl config use-context VSPHERE-NAMESPACE
  2. 클러스터의 노드를 나열합니다.
    kubectl get virtualmachines
    클러스터 노드가 표시됩니다. 예를 들면 다음과 같습니다.
    NAME                                            POWERSTATE   AGE
    tkgs-cluster-X-control-plane-6dgln              poweredOn    6h7m
    tkgs-cluster-X-control-plane-j6hq6              poweredOn    6h10m
    tkgs-cluster-X-control-plane-xc25f              poweredOn    6h14m
    tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm   poweredOn    6h12m
    tkgs-cluster-X-workers-9twdr-59bc54dc97-pjptr   poweredOn    6h12m
    tkgs-cluster-X-workers-9twdr-59bc54dc97-t45mn   poweredOn    6h12m
  3. 작업자 노드 중 하나를 선택하고 다음 명령을 사용하여 설명합니다.
    kubectl describe virtualmachines tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm
  4. 가상 시스템의 IP 주소(예: Vm Ip: 10.115.22.43)를 찾습니다.
  5. Grafana 확장 설치를 확인하려면 작업자 노드 IP 주소에 매핑된 Grafana FQDN으로 로컬 /etc/hosts 파일을 업데이트합니다. 예를 들면 다음과 같습니다.
    127.0.0.1 localhost
    127.0.1.1 ubuntu
    # TKGS Grafana with Envoy NodePort
    10.115.22.43 grafana.system.tanzu
    
  6. https://grafana.system.tanzu로 이동하여 Grafana 대시보드에 액세스합니다.

    사이트는 자체 서명된 인증서를 사용하기 때문에 대시보드에 액세스하려면 먼저 브라우저별 보안 주의를 거쳐 이동해야 할 수 있습니다.

Grafana 배포 문제 해결

배포 또는 조정이 실패하면 kubectl get pods -A를 실행하여 포드 상태를 확인합니다. contourenvoy 포드는 Running이어야 합니다. 포드 상태가 ImagePullBackOff 또는 ImageCrashLoopBackOff이면 컨테이너 이미지를 끌어올 수 없습니다. 데이터 값 및 확장 YAML 파일에서 레지스트리 URL을 확인하고 정확한지 확인합니다.

컨테이너 로그를 확인합니다. 여기서 name-XXXXkubectl get pods -A를 실행할 때 고유한 포드 이름입니다.
kubectl logs pod/grafana-XXXX -c grafana -n tanzu-system-monitoring

Grafana 확장 업데이트

Tanzu Kubernetes 클러스터에 배포된 Grafana 확장을 업데이트합니다.

  1. grafana-data-values 암호에서 현재 Grafana 데이터 값을 얻습니다.
    kubectl get secret grafana-data-values -n tanzu-system-monitoring -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > grafana-data-values.yaml
    
  2. grafana-data-values.yaml에서 Grafana 데이터 값을 업데이트합니다. Grafana 확장 구성의 내용을 참조하십시오.
  3. Grafana 데이터 값 암호를 업데이트합니다.
    kubectl create secret generic grafana-data-values --from-file=values.yaml=grafana-data-values.yaml -n tanzu-system-monitoring -o yaml --dry-run | kubectl replace -f-
    
    Grafana 확장이 업데이트된 데이터 값으로 조정됩니다.
    참고: 기본적으로 kapp-controller는 5분마다 애플리케이션을 동기화합니다. 업데이트는 5분 이내에 적용됩니다. 업데이트를 즉시 적용하려면 grafana-extension.yamlsyncPeriod를 더 작은 값으로 변경하고 kubectl apply -f grafana-extension.yaml을 사용하여 Grafana 확장을 적용합니다.
  4. 확장의 상태를 확인합니다.
    kubectl get app grafana -n tanzu-system-monitoring

    Grafana가 업데이트되면 상태가 Reconcile Succeeded로 변경됩니다.

  5. 자세한 상태를 살펴보고 필요한 경우 문제를 해결합니다.
    kubectl get app grafana -n tanzu-system-monitoring -o yaml

Grafana 확장 삭제

Tanzu Kubernetes 클러스터에서 Grafana 확장을 삭제합니다.
참고: 순서대로 단계를 완료하십시오. Grafana 애플리케이션이 완전히 삭제되기 전에 네임스페이스, 서비스 계정 및 역할 개체를 삭제하지 마십시오. 그러면 시스템 오류가 발생할 수 있습니다.
참고: Prometheus 및 Grafana 확장은 동일한 네임스페이스인 tanzu-system-monitoring에 배포됩니다. 두 확장을 동일한 클러스터에 배포한 경우 네임스페이스를 삭제하기 전에 각 확장을 삭제합니다.
  1. 디렉토리를 Grafana 확장으로 변경합니다.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
  2. Grafana 애플리케이션을 삭제합니다.
    kubectl delete app grafana -n tanzu-system-monitoring

    예상 결과: app.kappctrl.k14s.io "grafana" deleted.

  3. Grafana 애플리케이션이 삭제되었는지 확인합니다.
    kubectl get app grafana -n tanzu-system-monintoring

    예상 결과: apps.kappctrl.k14s.io "grafana" not found.

  4. tanzu-system-monitoring 네임스페이스와 Grafana 서비스 계정 및 역할 개체를 삭제합니다.
    경고: Prometheus가 배포된 경우 이 단계를 수행하지 마십시오.
    kubectl delete -f namespace-role.yaml
  5. Grafana를 다시 배포하려면 암호 grafana-data-values를 제거합니다.
    kubectl delete secret grafana-data-values -n tanzu-system-monitoring

    예상 결과: secret "grafana-data-values" deleted.

Grafana 확장 업그레이드

기존 Grafana 확장이 배포된 경우 최신 버전을 사용하도록 업그레이드할 수 있습니다.
  1. Grafana configmap을 내보내서 백업으로 저장합니다.
    kubectl get configmap grafana -n tanzu-system-monitoring -o 'go-template={{ index .data "grafana.yaml" }}' > grafana-configmap.yaml
  2. 기존 Grafana 확장을 삭제합니다. Grafana 확장 삭제의 내용을 참조하십시오.
  3. Grafana 확장을 배포합니다. 시각화 및 분석을 위해 Grafana 확장 배포의 내용을 참조하십시오.

Grafana 확장 구성

Grafana 구성은 /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana/grafana-data-values.yaml에서 설정됩니다.
표 1. Grafana 구성 매개 변수
매개 변수 설명 유형 기본값
monitoring.namespace Prometheus가 배포될 네임스페이스 문자열 tanzu-system-monitoring
monitoring.create_namespace 이 플래그는 monitoring.namespace를 통해 지정된 네임스페이스를 생성할지 여부를 나타냅니다. 부울 false
monitoring.grafana.cluster_role.apiGroups grafana clusterrole에 대해 정의된 API 그룹 목록 [""]
monitoring.grafana.cluster_role.resources grafana clusterrole에 대해 정의된 리소스 목록 ["configmaps", "secrets"]
monitoring.grafana.cluster_role.verbs clusterrole에 대해 정의된 액세스 권한 목록 ["get", "watch", "list"]
monitoring.grafana.config.grafana_ini Grafana 구성 파일 세부 정보 구성 파일 grafana.ini

이 파일에서 grafana_net URL은 Grafana와 통합하는 데 사용됨(예: Grafana.com에서 직접 대시보드 가져오기)

monitoring.grafana.config.datasource.type Grafana 데이터소스 유형 문자열 prometheus
monitoring.grafana.config.datasource.access 액세스 모드. proxy 또는 direct(UI의 서버 또는 브라우저) 문자열 proxy
monitoring.grafana.config.datasource.isDefault 기본 Grafana 데이터소스로 표시 부울 true
monitoring.grafana.config.provider_yaml Grafana 대시보드 제공자를 정의하는 구성 파일 yaml 파일 provider.yaml
monitoring.grafana.service.type Grafana를 노출할 서비스 유형. 지원되는 값: ClusterIP, NodePort, LoadBalancer 문자열 vSphere: NodePort, aws/azure: LoadBalancer
monitoring.grafana.pvc.storage_class 영구 볼륨 할당에 대한 액세스 모드 정의. 지원되는 값: ReadWriteOnce, ReadOnlyMany, ReadWriteMany 문자열 ReadWriteOnce
monitoring.grafana.pvc.storage 영구 볼륨 할당에 대한 스토리지 크기 정의 문자열 2Gi
monitoring.grafana.deployment.replicas Grafana 복제본 수 정수 1
monitoring.grafana.image.repository Grafana 이미지가 있는 저장소의 위치입니다. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. 문자열 projects.registry.vmware.com/tkg/grafana
monitoring.grafana.image.name Grafana 이미지의 이름 문자열 grafana
monitoring.grafana.image.tag Grafana 이미지 태그. 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. 문자열 v7.3.5_vmware.1
monitoring.grafana.image.pullPolicy Grafana 이미지 Pull 정책 문자열 IfNotPresent
monitoring.grafana.secret.type Grafana 대시보드에 대해 정의된 암호 유형 문자열 불투명
monitoring.grafana.secret.admin_user Grafana 대시보드에 액세스하기 위한 사용자 이름 문자열 YWRtaW4=

값이 base64로 인코딩됨. 디코딩하려면: echo "xxxxxx" | base64 --decode

monitoring.grafana.secret.admin_password Grafana 대시보드에 액세스하기 위한 암호 문자열 null
monitoring.grafana.secret.ldap_toml ldap auth를 사용하는 경우 ldap 구성 파일 경로 문자열 ""
monitoring.grafana_init_container.image.repository grafana init 컨테이너 이미지가 포함된 저장소. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. 문자열 projects.registry.vmware.com/tkg/grafana
monitoring.grafana_init_container.image.name grafana init 컨테이너 이미지의 이름 문자열 k8s-sidecar
monitoring.grafana_init_container.image.tag grafana init 컨테이너 이미지 태그. 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. 문자열 0.1.99
monitoring.grafana_init_container.image.pullPolicy grafana init 컨테이너 이미지 풀 정책 문자열 IfNotPresent
monitoring.grafana_sc_dashboard.image.repository Grafana 대시보드 이미지가 포함된 저장소. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. 문자열 projects.registry.vmware.com/tkg/grafana
monitoring.grafana_sc_dashboard.image.name Grafana 대시보드 이미지의 이름 문자열 k8s-sidecar
monitoring.grafana_sc_dashboard.image.tag Grafana 대시보드 이미지 태그. 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. 문자열 0.1.99
monitoring.grafana_sc_dashboard.image.pullPolicy Grafana 대시보드 이미지 Pull 정책 문자열 IfNotPresent
monitoring.grafana.ingress.enabled grafana에 수신 사용/사용 안 함 부울 true
monitoring.grafana.ingress.virtual_host_fqdn Grafana에 액세스하기 위한 호스트 이름 문자열 grafana.system.tanzu
monitoring.grafana.ingress.prefix Grafana의 경로 접두사 문자열 /
monitoring.grafana.ingress.tlsCertificate.tls.crt 자체 TLS 인증서를 사용하려는 경우 수신을 위한 선택적 인증서. 자체 서명된 인증서가 기본적으로 생성됨 문자열 생성된 인증서
monitoring.grafana.ingress.tlsCertificate.tls.key 자체 TLS 인증서를 사용하려는 경우, 수신을 위한 선택적 인증서 개인 키. 문자열 생성된 인증서 키