본문으로 건너뛰기

kube-scheduler 대시보드

홈 화면 > 클러스터 프로젝트 선택 > 클러스터 > kube-scheduler 대시보드

노트

요구 사항

  • 와탭 쿠버네티스 에이전트 1.8.1 버전 이상이 필요합니다.

  • 쿠버네티스 클러스터 프로젝트(CP)일 경우 해당 메뉴를 조회할 수 있습니다.

  • 바닐라 쿠버네티스 또는 kube-scheduler Pod를 관측할 수 있는 클러스터일 경우 해당 메뉴를 사용할 수 있습니다.

kube-scheduler는 쿠버네티스 환경에서 Pod의 스케줄링을 담당하는 주요 컴포넌트입니다. 와탭은 kube-scheduler의 성능, 스케줄링 상태를 실시간으로 모니터링할 수 있는 kube-scheduler 대시보드를 제공합니다. kube-scheduler 대시보드를 통해 클러스터가 스케줄링 불능 상태에 빠지거나 스케줄러의 부하로 인한 문제를 사전에 방지할 수 있습니다.

기본 화면 안내

kube-scheduler 대시보드

kube-scheduler 대시보드는 최근 1시간 동안 수집된 주요 지표를 1분 단위로 시각화하여 제공합니다. 대시보드에서 확인할 수 있는 주요 지표는 다음과 같습니다. 지표 상세는 하단 메트릭 안내를 참조하세요.

  • kube-scheduler가 사용하는 리소스 추이, Pod 재기동 횟수 그리고 상세 로그를 제공합니다.

  • kube-scheduler의 선점 시도 횟수 및 선점으로 인한 피해자 수 추이를 제공합니다.

  • kube-scheduler Pod 내부 Pending Queue에 할당된 Pending Pod의 Reason별 추이를 제공합니다.

kube-scheduler 모니터링 활성화

활성화 요구 조건

  • kubectl get pods -n kube-system -l component=kube-scheduler 명령어를 통해 kube-scheduler Pod를 관측할 수 있어야 합니다.

  • kube-scheduler와의 보안 통신을 위해 --bind-address 설정을 외부에서 접근할 수 있도록 변경해야 합니다. 일반적으로 0.0.0.0을 사용합니다.

활성화 과정

노트

활성화 순서

  1. whatap service account의 RBAC에 secrets에 대한 GET 권한을 추가하세요.

  2. whatap service account를 기반으로 secrets을 생성하세요.

  3. whatap-master-agent deployment에 kube-scheduler 모니터링 활성화 옵션을 적용하세요.

  1. 권한 설정

    whatap-monitoring 네임스페이스 내 whatap ClusterRole의 rules에서 접근 가능한 리소스에 secrets 자원을 추가하세요. 다음 내용을 yaml 파일로 생성 후 kubectl apply -f <yaml파일명>.yaml를 실행하여 적용하세요.

    ClusterRole.yaml
    apiVersion: "rbac.authorization.k8s.io/v1"
    kind: "ClusterRole"
    metadata:
    annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
    name: "whatap"
    namespace: "whatap-monitoring"
    rules:
    - apiGroups:
    - "*"
    resources:
    - "namespaces"
    - "pods"
    - "pods/log"
    - "configmaps"
    - "services"
    - "endpoints"
    - "daemonsets"
    - "ingresses"
    - "deployments"
    - "nodes"
    - "persistentvolumes"
    - "persistentvolumeclaims"
    - "events"
    - "secrets"
    - "replicasets"
    - "roles"
    - "rolebindings"
    - "clusterroles"
    - "clusterrolebindings"
    - "jobs"
    - "cronjobs"
    - "statefulsets"
    - "serviceaccounts"
    - "configmaps"
    - "storageclasses"
    - "horizontalpodautoscalers"
    - "replicationcontrollers"
    verbs:
    - "get"
    - "list"
    - "watch"
    - apiGroups:
    - ""
    resources:
    - "pods/exec"
    verbs:
    - "create"
    - apiGroups:
    - ""
    resources:
    - "configmaps"
    verbs:
    - "*"
    - nonResourceURLs:
    - "/metrics"
    verbs:
    - "*"
  2. Secret 생성

    다음 내용을 yaml 파일로 생성 후 kubectl apply -f yaml파일명.yaml를 실행하여 적용하세요.

    secrets.yaml
    apiVersion: v1
    kind: Secret
    type: kubernetes.io/service-account-token
    metadata:
    name: whatap-scheduler-monitoring-token
    namespace: whatap-monitoring
    annotations:
    kubernetes.io/service-account.name: "whatap"
  3. Deployment 수정

    whatap-master-agent deployment의 내용을 수정한 후 kubectl apply -f <yaml파일명>.yaml 명령어를 통해 적용하세요.

    • 환경 변수 추가

      containers 항목 하위의 whatap-master-agent 컨테이너의 env 섹션에 다음 내용을 추가하세요.

      env:
      - name: "collect_kube_scheduler_monitoring_enabled"
      value: "true"
    • 명령어 인자 추가

      containers 항목 하위의 whatap-control-plane-helper 컨테이너의 args 섹션에 다음 내용을 추가하세요.

      - args:
      - "-collect_kube_scheduler_monitoring_enabled=true"

    환경 변수 및 명령어 인자 추가 시 다음 예시를 참조하세요.

    apiVersion: "apps/v1"
    kind: "Deployment"
    metadata:
    name: "whatap-master-agent"
    namespace: "whatap-monitoring"
    spec:
    replicas: 1
    selector:
    matchLabels:
    name: "whatap-master-agent"
    template:
    metadata:
    labels:
    name: "whatap-master-agent"
    spec:
    priorityClassName: high-priority
    containers:
    - command:
    - "/bin/entrypoint.sh"
    env:
    - name: "WHATAP_LICENSE"
    value: "c1024123i1kko-241245127abdbe-612632344235"
    - name: "WHATAP_HOST"
    value: "192.168.1.0"
    - name: "WHATP_MEM_LIMIT"
    valueFrom:
    resourceFieldRef:
    containerName: "whatap-master-agent"
    resource: "limits.memory"
    - name: "collect_kube_scheduler_monitoring_enabled"
    value: "true"
    image: "whatap/kube_mon"
    name: "whatap-master-agent"
    ports:
    - containerPort: 6600
    resources:
    limits:
    cpu: "200m"
    memory: "350Mi"
    requests:
    cpu: "100m"
    memory: "300Mi"
    volumeMounts:
    - mountPath: "/bin/entrypoint.sh"
    name: "start-script-volume"
    readOnly: true
    subPath: "entrypoint.sh"
    - mountPath: "/whatap_conf"
    name: "whatap-config-volume"
    - args:
    - "-collect_kube_scheduler_monitoring_enabled=true"
    command:
    - "/data/agent/master/whatap_control_plane_helper"
    image: "whatap/kube_mon"
    imagePullPolicy: "Always"
    name: "whatap-control-plane-helper"
    ports:
    - containerPort: 9496
    serviceAccount: "whatap"
    volumes:
    - configMap:
    defaultMode: 448
    name: "master-start-script"
    name: "start-script-volume"
    - emptyDir: {}
    name: "whatap-config-volume"

kube-scheduler 메트릭

구분설명
Pod 수현재 실행 중인 kube-scheduler Pod의 수
kube-scheduler 재기동 수 추이kube-scheduler Pod의 재기동 횟수 합계 추이
CPU 사용량 합계kube-scheduler Pod의 총 CPU 사용량
CPU 사용량kube-scheduler Pod의 CPU 사용량 추이
Memory 사용량 합계kube-scheduler Pod의 총 메모리 사용량
Memory 사용량kube-scheduler Pod의 메모리 사용량 추이
kube-scheduler 로그kube-scheduler Pod에서 발생한 로그
선점 시도 횟수 추이Pod 스케줄링을 위해 선점을 시도한 횟수 추이
선점 피해자 수 추이선점으로 인해 축출된 Pod 수의 추이
Pending Pod Reason별 추이스케줄링되지 않고 Pending 상태로 대기 중인 Pod의 원인별 추이