本文へスキップ

kube-scheduler ダッシュボード

ノート

要求事項

  • WhaTap Kubernetesエージェント1.8.1バージョン以降が必要です。

  • Kubernetesクラスタープロジェクト(CP)の場合、該当メニューを照会できます。

  • Vanilla Kubernetesまたはkube-scheduler Podを観測できるクラスターの場合は、そのメニューを使用できます。

kube-schedulerはKubernetes環境でPodのスケジューリングを担当する主要なコンポーネントです。 WhaTapは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の原因別推移