이 항목에서는 Grafana용 TKG 확장 v1.3.1을 배포하고 관리하는 방법을 설명합니다. Grafana를 사용하면 저장된 위치에 상관없이 메트릭을 쿼리, 시각화, 경고 및 탐색할 수 있습니다. Grafana는 애플리케이션 데이터에서 그래프 및 시각화를 형성하는 도구를 제공합니다. Grafana용 TKG 확장을 배포하여 Tanzu Kubernetes 클러스터에 대한 메트릭을 생성하고 확인합니다.
Grafana 확장 사전 요구 사항
- 클러스터를 프로비저닝합니다. TKGS v1alpha2 API를 사용하여 Tanzu Kubernetes 클러스터를 프로비저닝하는 워크플로의 내용을 참조하십시오.
참고: 기본 serviceDomain(
cluster.local
)을 사용하는 클러스터를 배포해야 합니다. - 클러스터에 연결합니다. vCenter Single Sign-On 사용자로 Tanzu Kubernetes 클러스터에 연결의 내용을 참조하십시오.
- kubectl 명령을 실행하는 클라이언트 호스트에 TKG 확장 v1.3.1 번들 다운로드합니다.
- 대상 클러스터에 TKG 확장 사전 요구 사항 설치합니다.
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 | 배포 | 2 | 데이터 시각화 |
- 각각의 Grafana 확장 사전 요구 사항을 완료했는지 확인합니다. Grafana 확장 사전 요구 사항의 내용을 참조하십시오.
- 디렉토리를 Grafana 확장으로 변경합니다.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
tanzu-system-monitoring
네임스페이스와 Grafana 서비스 계정 및 역할 개체를 생성합니다.kubectl apply -f namespace-role.yaml
- Grafana 데이터 값 파일을 생성합니다.
예제 데이터 값 파일은 필요한 최소 구성을 제공합니다.
cp grafana-data-values.yaml.example grafana-data-values.yaml
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 확장 구성의 내용을 참조하십시오.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
을 사용하여 확인합니다.- Grafana 확장을 배포합니다.
kubectl apply -f grafana-extension.yaml
성공하면 Grafana 애플리케이션이 생성됩니다(
app.kappctrl.k14s.io/grafana created
). - Grafana 애플리케이션의 상태를 확인합니다.
kubectl get app grafana -n tanzu-system-monitoring
상태가Reconciling
에서Reconcile succeeded
로 변경되어야 합니다. 상태가Reconcile failed
인 경우 문제 해결을 참조하십시오. - Grafana 애플리케이션에 대한 세부 상태를 표시합니다.
kubectl get app grafana -n tanzu-system-monitoring -o yaml
- Grafana 배포를 확인합니다.
kubectl get deployments -n tanzu-system-monitoring
LoadBalancer 유형의 Contour 엔보이 서비스를 사용하여 Grafana 대시보드에 액세스
- 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]}'
- 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
- https://grafana.system.tanzu로 이동하여 Grafana 대시보드에 액세스합니다.
사이트는 자체 서명된 인증서를 사용하기 때문에 대시보드에 액세스하려면 먼저 브라우저별 보안 주의를 거쳐 이동해야 할 수 있습니다.
- 운영 액세스를 위해 엔보이 서비스 로드 밸런서
External-IP
주소를 Grafana 대시보드에 매핑하는 DNS 서버에 두 개의 CNAME 레코드를 생성합니다.
NodePort 유형의 Contour 엔보이 서비스를 사용하여 Grafana 대시보드에 액세스
- 클러스터가 프로비저닝된 vSphere 네임스페이스로 컨텍스트를 전환합니다.
kubectl config use-context VSPHERE-NAMESPACE
- 클러스터의 노드를 나열합니다.
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
- 작업자 노드 중 하나를 선택하고 다음 명령을 사용하여 설명합니다.
kubectl describe virtualmachines tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm
- 가상 시스템의 IP 주소(예:
Vm Ip: 10.115.22.43
)를 찾습니다. - 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
- https://grafana.system.tanzu로 이동하여 Grafana 대시보드에 액세스합니다.
사이트는 자체 서명된 인증서를 사용하기 때문에 대시보드에 액세스하려면 먼저 브라우저별 보안 주의를 거쳐 이동해야 할 수 있습니다.
Grafana 배포 문제 해결
배포 또는 조정이 실패하면 kubectl get pods -A
를 실행하여 포드 상태를 확인합니다. contour
및 envoy
포드는 Running
이어야 합니다. 포드 상태가 ImagePullBackOff
또는 ImageCrashLoopBackOff
이면 컨테이너 이미지를 끌어올 수 없습니다. 데이터 값 및 확장 YAML 파일에서 레지스트리 URL을 확인하고 정확한지 확인합니다.
name-XXXX
는
kubectl get pods -A
를 실행할 때 고유한 포드 이름입니다.
kubectl logs pod/grafana-XXXX -c grafana -n tanzu-system-monitoring
Grafana 확장 업데이트
Tanzu Kubernetes 클러스터에 배포된 Grafana 확장을 업데이트합니다.
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
grafana-data-values.yaml
에서 Grafana 데이터 값을 업데이트합니다. Grafana 확장 구성의 내용을 참조하십시오.- 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.yaml
의syncPeriod
를 더 작은 값으로 변경하고kubectl apply -f grafana-extension.yaml
을 사용하여 Grafana 확장을 적용합니다. - 확장의 상태를 확인합니다.
kubectl get app grafana -n tanzu-system-monitoring
Grafana가 업데이트되면 상태가
Reconcile Succeeded
로 변경됩니다. - 자세한 상태를 살펴보고 필요한 경우 문제를 해결합니다.
kubectl get app grafana -n tanzu-system-monitoring -o yaml
Grafana 확장 삭제
tanzu-system-monitoring
에 배포됩니다. 두 확장을 동일한 클러스터에 배포한 경우 네임스페이스를 삭제하기 전에 각 확장을 삭제합니다.
- 디렉토리를 Grafana 확장으로 변경합니다.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
- Grafana 애플리케이션을 삭제합니다.
kubectl delete app grafana -n tanzu-system-monitoring
예상 결과:
app.kappctrl.k14s.io "grafana" deleted
. - Grafana 애플리케이션이 삭제되었는지 확인합니다.
kubectl get app grafana -n tanzu-system-monintoring
예상 결과:
apps.kappctrl.k14s.io "grafana" not found
. tanzu-system-monitoring
네임스페이스와 Grafana 서비스 계정 및 역할 개체를 삭제합니다.경고: Prometheus가 배포된 경우 이 단계를 수행하지 마십시오.kubectl delete -f namespace-role.yaml
- Grafana를 다시 배포하려면 암호
grafana-data-values
를 제거합니다.kubectl delete secret grafana-data-values -n tanzu-system-monitoring
예상 결과:
secret "grafana-data-values" deleted
.
Grafana 확장 업그레이드
- Grafana configmap을 내보내서 백업으로 저장합니다.
kubectl get configmap grafana -n tanzu-system-monitoring -o 'go-template={{ index .data "grafana.yaml" }}' > grafana-configmap.yaml
- 기존 Grafana 확장을 삭제합니다. Grafana 확장 삭제의 내용을 참조하십시오.
- Grafana 확장을 배포합니다. 시각화 및 분석을 위해 Grafana 확장 배포의 내용을 참조하십시오.
Grafana 확장 구성
/tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana/grafana-data-values.yaml
에서 설정됩니다.
매개 변수 | 설명 | 유형 | 기본값 |
---|---|---|---|
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 이 파일에서 |
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로 인코딩됨. 디코딩하려면: |
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 인증서를 사용하려는 경우, 수신을 위한 선택적 인증서 개인 키. | 문자열 | 생성된 인증서 키 |