kube-scheduler 대시보드
홈 화면 > 클러스터 프로젝트 선택 > Cluster > kube-scheduler 대시보드
요구 사항
-
와탭 쿠버네티스 에이전트 1.8.1 버전 이상이 필요합니다.
-
쿠버네티스 클러스터 프로젝트(
CP
)일 경우 해당 메뉴를 조회할 수 있습니다. -
바닐라 쿠버네티스 또는
kube-scheduler
Pod를 관측할 수 있는 클러스터일 경우 해당 메뉴를 사용할 수 있습니다.
kube-scheduler
는 쿠버네티스 환경에서 Pod의 스케줄링을 담당하는 주요 컴포넌트입니다. 와탭은 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
을 사용합니다.
활성화 과정
활성화 순서
-
whatap service account의 RBAC에
secrets
에 대한GET
권한을 추가하세요. -
whatap service account를 기반으로
secrets
을 생성하세요. -
whatap-master-agent
deployment에kube-scheduler
모니터링 활성화 옵션을 적용하세요.
-
권한 설정
whatap-monitoring
네임스페이스 내 whatap ClusterRole의rules
에서 접근 가능한 리소스에secrets
자원을 추가하세요. 다음 내용을 yaml 파일로 생성 후kubectl apply -f <yaml파일명>.yaml
를 실행하여 적용하세요.ClusterRole.yamlapiVersion: "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:
- "*" -
Secret 생성
다음 내용을 yaml 파일로 생성 후
kubectl apply -f yaml파일명.yaml
를 실행하여 적용하세요.secrets.yamlapiVersion: 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" -
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의 원인별 추이 |