AWS/AWS_VFVG

AWS 다른계정 Fargate 연동

KK_Ryong 2026. 1. 22. 15:44

Fargate 용이라 추가로 kube-state-metrics설치

기존 각각 메트릭 가져가던것을 kube-state-metrics가 한번에 가져옴 

오픈 포트

[8080/8082/8088/8090/10250]

연결 후 vmui에서 up 으로는 조회 안되니 

kube_pod_status_phase{namespace="sb", phase="Running"} 로 조회 해야함

 

그라파나 대시보드에 기존 namespace = sp 에서 // =~ sp sb 이런식으로 변경

ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ

 

configmap.yaml 아래에 내용 추가

----

- job_name: 'kube-state-metrics'
        static_configs:
          - targets: ['kube-state-metrics.kube-system.svc.cluster.local:8080']

---- ---- ---- ----

 

yaml 생성 후 실행 하면 됩

kube-state-metrics.yaml

----

apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-state-metrics
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kube-state-metrics
rules:
  - apiGroups: [""]
    resources: ["configmaps", "secrets", "nodes", "pods", "services", "resourcequotas", "replicationcontrollers", "limitranges", "persistentvolumeclaims", "persistentvolumes", "namespaces", "endpoints"]
    verbs: ["list", "watch"]
  - apiGroups: ["apps"]
    resources: ["statefulsets", "daemonsets", "deployments", "replicasets"]
    verbs: ["list", "watch"]
  - apiGroups: ["batch"]
    resources: ["cronjobs", "jobs"]
    verbs: ["list", "watch"]
  - apiGroups: ["autoscaling"]
    resources: ["horizontalpodautoscalers"]
    verbs: ["list", "watch"]
  - apiGroups: ["authentication.k8s.io"]
    resources: ["tokenreviews"]
    verbs: ["create"]
  - apiGroups: ["authorization.k8s.io"]
    resources: ["subjectaccessreviews"]
    verbs: ["create"]
  - apiGroups: ["policy"]
    resources: ["poddisruptionbudgets"]
    verbs: ["list", "watch"]
  - apiGroups: ["certificates.k8s.io"]
    resources: ["certificatesigningrequests"]
    verbs: ["list", "watch"]
  - apiGroups: ["networking.k8s.io"]
    resources: ["ingresses"]
    verbs: ["list", "watch"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses", "volumeattachments"]
    verbs: ["list", "watch"]
  - apiGroups: ["admissionregistration.k8s.io"]
    resources: ["mutatingwebhookconfigurations", "validatingwebhookconfigurations"]
    verbs: ["list", "watch"]
  - apiGroups: ["networking.k8s.io"]
    resources: ["networkpolicies"]
    verbs: ["list", "watch"]
  - apiGroups: ["coordination.k8s.io"]
    resources: ["leases"]
    verbs: ["list", "watch"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kube-state-metrics
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kube-state-metrics
subjects:
  - kind: ServiceAccount
    name: kube-state-metrics
    namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kube-state-metrics
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: kube-state-metrics
  template:
    metadata:
      labels:
        app.kubernetes.io/name: kube-state-metrics
    spec:
      serviceAccountName: kube-state-metrics
      containers:
        - name: kube-state-metrics
          image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.10.1
          ports:
            - containerPort: 8080
              name: http-metrics
            - containerPort: 8081
              name: telemetry
          livenessProbe:
            httpGet:
              path: /healthz
              port: 8080
            initialDelaySeconds: 5
            timeoutSeconds: 5
          readinessProbe:
            httpGet:
              path: /
              port: 8081
            initialDelaySeconds: 5
            timeoutSeconds: 5
---

apiVersion: v1
kind: Service
metadata:
  name: kube-state-metrics
  namespace: kube-system
  labels:
    app.kubernetes.io/name: kube-state-metrics
spec:
  ports:
    - port: 8080
      targetPort: 8080
      name: http-metrics
    - port: 8081
      targetPort: 8081
      name: telemetry
  selector:
    app.kubernetes.io/name: kube-state-metrics

------------------------------------------

configmap.yaml 수정 

apiVersion: v1
kind: ConfigMap
metadata:
  name: vmagent-config
  namespace: kube-system
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s
      external_labels:
        cluster: "eks-production"

    scrape_configs:
      # [A] cAdvisor: Fargate 메모리/CPU 지표를 보려면 이 job이 중요합니다.
      - job_name: 'kubernetes-cadvisor'
        scheme: https
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
          insecure_skip_verify: true
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        kubernetes_sd_configs:
          - role: node
        relabel_configs:
          - action: labelmap
            regex: __meta_kubernetes_node_label_(.+)
          - target_label: __metrics_path__
            replacement: /metrics/cadvisor
          - source_labels: [__address__]
            regex: '(.*):10250'
            action: replace
            target_label: __address__
            replacement: '${1}:10250'
          - source_labels: [__meta_kubernetes_node_name]
            target_label: node
          - source_labels: [__meta_kubernetes_node_name]
            target_label: instance

# [B] Pod 지표: 404 에러 해결 및 경로 보정
      - job_name: 'kubernetes-pods'
        kubernetes_sd_configs:
          - role: pod
        relabel_configs:
          # 1. 수집 대상 필터링
          - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: 'sb;.*|.*;true'

          # 2. 포트 설정 (주석 있으면 사용, 없으면 기본포트)
          - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
            action: replace
            regex: ([^:]+)(?::\d+)?;(\d+)
            replacement: $1:$2
            target_label: __address__

          # 3. 경로 설정 (순서가 매우 중요합니다!)
          # 주석(prometheus.io/path)이 있으면 그걸 먼저 씁니다.
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
            action: replace
            target_label: __metrics_path__
            regex: (.+)

          # [핵심수정] 경로가 /metrics(기본값)이거나 비어있으면 /actuator/prometheus로 덮어씁니다.
          - source_labels: [__metrics_path__]
            action: replace
            target_label: __metrics_path__
            regex: '^$|/metrics'
            replacement: /actuator/prometheus

          # 4. 라벨 보정
          - source_labels: [__meta_kubernetes_namespace]
            target_label: namespace
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: pod
          - source_labels: [__meta_kubernetes_pod_name]
            target_label: instance
          - source_labels: [__meta_kubernetes_pod_container_name]
            target_label: container
          - action: labelmap
            regex: __meta_kubernetes_pod_label_(.+)

      - job_name: 'kube-state-metrics'
        static_configs:
          - targets: ['kube-state-metrics.kube-systehttp://m.svc.cluster.local:8080']

'AWS > AWS_VFVG' 카테고리의 다른 글

AWS VictoriaLogs <> Grafana 연동  (0) 2026.01.23
AWS VictoriaLogs EKS Pod 연동  (0) 2026.01.23
Grafan Dashboard 설정  (0) 2026.01.21
Victoria + EKS 연동  (0) 2026.01.16
AWS Terraform VFVG  (0) 2026.01.07