Kubernetes 가이드의 이 게시물에서는 독자들에게 오픈 소스 Prometheus Operator Software에 대한 개요와 단계별 가이드를 제공합니다. Prometheus 연산자는 Kubernetes 환경에서 Prometheus 모니터링 시스템을 통합하는 데 사용됩니다.
오퍼레이터는 2016년 CoreOS에서 도입한 새로운 종류의 소프트웨어입니다(최근 Red Hat에서 인수함). CoreOS는 Kubernetes와 CoreOS 스택을 결합하여 모든 클라우드 또는 온프레미스/베어메탈 환경에서 기업에 Google과 같은 인프라를 제공하는 상용 Kubernetes 배포 플랫폼인 Tectonic의 배후에 있는 회사입니다.
오퍼레이터는 2016년 CoreOS에서 도입한 새로운 종류의 소프트웨어입니다(최근 Red Hat에서 인수함). CoreOS는 Kubernetes와 CoreOS 스택을 결합하여 모든 클라우드 또는 온프레미스/베어메탈 환경에서 기업에 Google과 같은 인프라를 제공하는 상용 Kubernetes 배포 플랫폼인 Tectonic의 배후에 있는 회사입니다.
CoreOS는 다른 소프트웨어 애플리케이션을 제공할 수 있는 별도의 소프트웨어 범주로 오퍼레이터를 만들었습니다. 이를 위해 운영 기술이 주입됩니다. Prometheus 연산자는 Kubernetes 기본 구성 옵션을 유지하면서 Kubernetes에서 Prometheus의 기능을 최적화합니다.
오퍼레이터 소프트웨어는 애플리케이션 도메인 지식을 통합하여 Kubernetes 리소스 및 컨트롤러 개념을 기반으로 반복 작업을 자동화합니다. Operator 소프트웨어의 핵심 요소는 수동 배포 및 수명 주기 관리가 제거되어 DevOps 엔지니어가 구성 최적화에 집중할 수 있다는 것입니다.
Prometheus 자체는 Kubernetes와 밀접한 관련이 있습니다. 둘 다 CNCF(Cloud Native Computing Foundation)의 감독을 받습니다. Google Borg Cluster 시스템의 오픈 소스 확장으로 개발된 Kubernetes도 원래 Google에서 게시했습니다. 반면 Prometheus는 Google이 Borg를 위해 개발한 모니터링 시스템인 Borgmon 설계 개념의 많은 기능을 통합합니다. Borg의 내부 메트릭이 동일한 Prometheus 네이티브 형식으로 내보내기 때문에 이러한 공통 조상은 Kubernetes의 이면을 살펴보면 분명합니다.
Prometheus Operator의 목적은 구성 가능성을 유지하고 구성을 Kubernetes 네이티브로 만드는 동시에 가능한 한 쉽게 Kubernetes에서 Prometheus를 실행하는 것입니다. (원천).
운영자는 사용자(관리자)가 구성 파일을 편집하는 부담을 덜어주고 YAML 파일을 기반으로 Prometheus를 자동으로 구성합니다.
Prometheus 연산자 아키텍처(소스)
Prometheus Operator 설치는 단일 명령줄을 입력하는 것만큼 쉽습니다. 이 간단한 명령줄의 결과 DevOps 엔지니어는 가벼운 선언적 구성으로 Prometheus 인스턴스를 관리할 수 있습니다. 이 구성으로 인해 Prometheus 모니터링 인스턴스가 생성, 구성 및 관리됩니다.
Prometheus 연산자는 여러 가지 핵심 기능을 제공합니다.
Prometheus 인스턴스는 Kubernetes에 쉽게 배포할 수 있습니다. 네임스페이스운영자에게 서비스를 제공하는 팀에 의해 또는 특정 응용 프로그램으로 시작됩니다.
Prometheus의 기본 사항은 기본 Kubernetes 리소스의 버전, 지속성, 보존 정책 및 복제본과 같이 구성됩니다.
대상 구성의 모니터링은 자동으로 생성되며 잘 알려진 Kubernetes 레이블 요청을 기반으로 합니다. Prometheus는 개발자가 고유한 구성 언어를 배울 것을 요구하지 않습니다.
Prometheus Operator는 CRD(Custom Resource Definitions)를 사용하여 구성 파일을 생성하고 Prometheus 리소스를 검색합니다.
- Alertmanagers – Alertmanagers의 설치를 정의합니다.
- Podmonitors – 모니터링할 포드를 결정합니다.
- Prometheuses – Prometheus 설치를 정의합니다.
- Prometheusrules – 알림 관리자에 대한 규칙을 정의합니다.
- 서비스 모니터 – 모니터링할 서비스를 결정합니다.
운영자는 Prometheus 리소스를 모니터링하고 StatefullSet(Prometheus 및 Alertmanager) 및 구성 파일(prometheus.yaml, alertmanager.yaml)을 생성합니다.
또한 운영자는 ServiceMonitors, PodMonitors 및 ConfigMaps의 리소스를 모니터링하고 이를 기반으로 Prometheus.yaml을 생성합니다.
3개의 컨테이너가 Prometheus에서 실행됩니다.
- 프로메테우스
- Prometheus-config-reloader – Prometheus.yaml의 변경 사항과 Prometheus 구성을 다시 로드하는 HTTP 요청을 모니터링하는 Prometheus 애드온
- Rules-ConfigMap-Reloader – 알림 파일의 변경 사항을 모니터링하고 Prometheus를 다시 호출합니다.
서비스 모니터 처리:
- Prometheus 운영자는 Service Monitor 리소스 이벤트의 입력, 제거 및 수정을 감독합니다.
- ServiceMonitors를 기반으로 Prometheus는 구성 파일의 일부를 생성하고 Kubernetes에 비밀을 저장합니다.
- Kubernetes Secret Config에서 이하로
- Prometheus 구성 리로더에서 변경 사항을 감지하고 Prometheus를 다시 로드합니다.
- Prometheus는 재부팅 후 구성을 다시 로드하고 이 논리에 따라 새 메트릭을 수집합니다.
Prometheus와 마찬가지로 2개의 컨테이너가 포드에서 실행됩니다.
- 경고 관리자
- config-reloader – 변경 사항을 모니터링하고 HTTP 요청을 통해 경고 관리자를 다시 로드하는 경고 관리자의 추가 기능
- 그라파나
- Grafana-SC-Dashboard – Grafana용 ConfigMaps json 대시보드의 리소스를 기반으로 구축된 Grafana용 애드온
- Grafana-sc-dashboard – ConfigMaps 리소스를 구독하고 이를 기반으로 Grafana용 json 대시보드를 생성하는 grafana의 추가 기능
Prometheus는 helm을 사용하여 설치됩니다.
저장소를 복제하고 특사를 업데이트합니다.
cd charts/stable/prometheus-operator helm dependency update
이제 Prometheus가 설치됩니다.
helm install --name prometheus --namespace monitoring prometheus-operator
이제 사용자에게 다음이 표시됩니다.
kubectl get pod
NAME READY STATUS RESTARTS AGE alertmanager-prometheus-prometheus-oper-alertmanager-0 2/2 Running 0 1m prometheus-grafana-656769c888-445wm 2/2 Running 0 1m prometheus-kube-state-metrics-57f9c94c59-sg5bn 1/1 Running 0 1m prometheus-prometheus-oper-operator-6844ff8f64-rzwlf 2/2 Running 0 1m prometheus-prometheus-prometheus-oper-prometheus-0 3/3 Running 1 1m
모든 포드가 시작된 후 웹 UI를 살펴보겠습니다.
kubectl port-forward prometheus-prometheus-prometheus-oper-prometheus-0 9090:9090
브라우저에서 http://localhost:9090을 엽니다. 기본 서비스는 “서비스 검색” 아래에 나열되어야 합니다.
필요한 메트릭을 확인하려면 다음 명령을 실행해야 합니다.
kubectl get servicemonitors.monitoring.coreos.com
prometheus-prometheus-oper-alertmanager 19d prometheus-prometheus-oper-apiserver 19d prometheus-prometheus-oper-coredns 19d prometheus-prometheus-oper-grafana 19d prometheus-prometheus-oper-kube-controller-manager 19d prometheus-prometheus-oper-kube-etcd 19d prometheus-prometheus-oper-kube-proxy 19d prometheus-prometheus-oper-kube-scheduler 19d prometheus-prometheus-oper-kube-state-metrics 19d prometheus-prometheus-oper-kubelet 19d prometheus-prometheus-oper-operator 19d prometheus-prometheus-oper-prometheus 19d
웹 UI에서도 마찬가지였습니다.
이제 Prometheus에 자체 메트릭을 추가합니다. 예를 들어 우리는 traefik을 사용합니다. traefik-deployment.yaml 파일을 생성하고 Kubernetes에 설치합니다.
vi traefik-deployment.yaml
kind: Deployment apiVersion: extensions/v1beta1 metadata: name: traefik namespace: ingress labels: app: traefik spec: replicas: 1 selector: matchLabels: app: traefik template: metadata: labels: app: traefik spec: containers: - image: traefik:v1.7.11-alpine name: traefik-ingress-lb args: - --api - --api.statistics - --kubernetes - --logLevel=INFO - --configfile=/config/traefik.toml ports: - containerPort: 8080 name: metrics
kubectl apply -f traefik-deployment.yaml
다음 측정항목을 찾습니다.
kubectl port-forward traefik-hjbjk 8080:8080
브라우저 http: // localhost: 8080 / 메트릭을 엽니다. 다음이 여기에 나타나야 합니다.
이제 다음 메트릭에 대한 traefik-metrics-service.yaml 서비스 파일을 생성합니다.
vi traefik-metrics-service.yaml
apiVersion: v1 kind: Service metadata: name: traefik-metrics namespace: ingress labels: app: traefik-metrics release: monitoring spec: selector: app: traefik ports: - name: metrics port: 8080 targetPort: 8080 type: ClusterIP
Kubernetes에 배포합니다.
kubectl apply -f traefik-metrics-service.yaml
우리는 우리의 서비스를 검토합니다:
kubectl port-forward svc/traefik-metrics 8080:8080
http://localhost:8080/metrics에서 위에서 설명한 포트 전달과 동일한 메트릭을 볼 수 있습니다.
현재: deployServiceMonitors. Prometheus는 레이블별로 ServiceMonitor를 검색합니다. 찾고 있는 ServiceMonitors 레이블이 무엇인지 알아야 합니다. 이를 위해서는 다음 단계가 필요합니다.
kubectl get prometheuses.monitoring.coreos.com -oyaml
serviceMonitorSelector 블록을 살펴보겠습니다.
serviceMonitorNamespaceSelector: {} serviceMonitorSelector: matchLabels: release: monitoring
우리의 경우 릴리스: 모니터링입니다. 레이블을 알고 있으므로 traefik-servicemonitor.yaml 파일을 만들 수 있습니다.
vi traefik-servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: traefik labels: release: monitoring app: traefik-metrics spec: endpoints: - port: metrics path: '/metrics' namespaceSelector: any: true selector: matchLabels: app: traefik-metrics release: monitoring
이제 새 대상이 Prometheus에 나타납니다. 다음을 참조하세요.
kubectl port-forward prometheus-prometheus-prometheus-oper-prometheus-0 9090:9090
브라우저 열기 http://localhost:9090:
메트릭이 성공하면 Grafana용 대시보드를 생성할 수 있습니다.
여기에서 대시보드 다운로드 -. 그리고 ConfigMap으로 변경합니다.
vi traefik-dashboard.yaml
{{- if and .Values.grafana.enabled .Values.grafana.defaultDashboardsEnabled .Values.kubeEtcd.enabled }} apiVersion: v1 kind: ConfigMap metadata: name: {{ printf "%s-%s" (include "prometheus-operator.fullname" $) "traefik" | trunc 63 | trimSuffix "-" }} labels: {{- if $.Values.grafana.sidecar.dashboards.label }} {{ $.Values.grafana.sidecar.dashboards.label }}: "1" {{- end }} app: {{ template "prometheus-operator.name" $ }}-grafana {{ include "prometheus-operator.labels" $ | indent 4 }} data: traefik.json: |- JSON Dashboard starts ...... JSON Dashboard ends {{- end }}
JSON 대시보드가 시작되는 대시보드의 json 푸시 ….. JSON 대시보드가 종료됩니다. JSON 자체에서는 {{{{Instance}}}} 에서 {{Instance}} 와 같은 표현을 피하는 것이 중요합니다.
이제 파일을 Prometheus Operator/Templates/Grafana/Dashboards에 붙여넣습니다.
helm upgrade prometheus ./
이제 대시보드가 Grafana에 나타납니다.
이것이 Prometheus 연산자의 기본 원칙입니다. Prometheus 연산자는 아직 개발 중이므로 단계별 가이드가 빨리 구식이 될 수 있습니다. 이 가이드는 적시에 업데이트되지만 동시에 최신 정보는 CoreOS 사용자 가이드 및 Github 프로젝트를 참조하십시오.