はじめに
この記事では、Kubernetes 1.26 の CHANGELOG から Metrics の変更と SIG Instrumentation の取り組みについてまとめています。
Kubernetes v1.26 で SIG Instrumentation が扱う主要なテーマに Kubernetes メトリクスの改善(Improvements to Kubernetes metrics)
があり、注目すべきいくつかの改善が入っています。それではその内容を確認していきます。
Metrics Stability Framework の拡張
Metrics Stability Framework の拡張が 導入(Alpha) されました。
v1.25 までの Stability Level は ALPHA
と STABLE
のみでしたが、v1.26 では INTERNAL
と BETA
が追加されました。
// StabilityLevel represents the API guarantees for a given defined metric.
type StabilityLevel string
const (
// INTERNAL metrics have no stability guarantees, as such, labels may
// be arbitrarily added/removed and the metric may be deleted at any time.
INTERNAL StabilityLevel = "INTERNAL"
// ALPHA metrics have no stability guarantees, as such, labels may
// be arbitrarily added/removed and the metric may be deleted at any time.
ALPHA StabilityLevel = "ALPHA"
// BETA metrics are governed by the deprecation policy outlined in by
// the control plane metrics stability KEP.
BETA StabilityLevel = "BETA"
// STABLE metrics are guaranteed not be mutated and removal is governed by
// the deprecation policy outlined in by the control plane metrics stability KEP.
STABLE StabilityLevel = "STABLE"
)
Stability Level は Kubernetes 独自のメトリクスフレームで定義されたものです。Prometheus のメトリクスのヘルプテキストに # HELP xxxxx [ALPHA] xxxx
のようなフォーマットで記録されます。Metrics Stability Framework 自体は Kubernetes v1.17 で Beta、v1.21 で Stable となっています。
メトリクスのヘルプテキストの例
# HELP apiserver_audit_event_total [ALPHA] Counter of audit events generated and sent to the audit backend.
# TYPE apiserver_audit_event_total counter
apiserver_audit_event_total 0
KEP を確認すると INTERNAL
は内部開発用であり、どのバージョンでも自由に消せるようなので Kubernetes 利用者(Kubernetes Administrator/Kubernetes Application Developer)が利用することは避けた方が良さそうです。
BETA
は ALPHA
と STABLE
の間の安定性です。モチベーションを見ると ALPHA
をより初期段回のメトリクスである点を強調させ、今までの ALPHA
相当の安定性を BETA
として扱う方向のようです。
ALPHA
と BETA
の Stability Level は Feature Gate のステージと同様に周期を決めて強制的にアップグレード、または非推奨となるような仕組みが検討されています。Alpha では未実装となり Beta で実装予定になります。
また今回のリリースでは Stability Level や Label が記載されたメトリクスのドキュメントも公開されました
このドキュメントはコードから自動で生成されています。Kubernetes の Changelog だけではどうしても抜け漏れが発生するので、私も次のバージョンからは自動生成されたものを比較しメトリクスの記事を記載する予定です。
Kubernetes コンポーネントの Service Level Indicator (SLI) メトリクス
Kubernetes コンポーネントの Service Level Indicator (SLI) メトリクスが導入(Alpha)されました。
ComponentSLIs
フィーチャーゲートを有効にすると、ヘルスチェックのデータからメトリクスに変換された Service Level Objectives(SLO) を算出できるメトリクスのエンドポイント /metrics/slis
が利用できるようになります。
実際に ComponentSLIs
フィーチャーゲートを有効にして /metrics/slis
エンドポイントにアクセスすると Cauge: kubernetes_healthcheck
と Counter: kubernetes_healthchecks_total
の 2 つのメトリクスが取得できます。
kube-controller-manager の SLI メトリクス
# HELP kubernetes_healthcheck [ALPHA] This metric records the result of a single healthcheck.
# TYPE kubernetes_healthcheck gauge
kubernetes_healthcheck{name="attachdetach",type="healthz"} 1
kubernetes_healthcheck{name="bootstrapsigner",type="healthz"} 1
kubernetes_healthcheck{name="clusterrole-aggregation",type="healthz"} 1
kubernetes_healthcheck{name="cronjob",type="healthz"} 1
kubernetes_healthcheck{name="csrapproving",type="healthz"} 1
kubernetes_healthcheck{name="csrcleaner",type="healthz"} 1
kubernetes_healthcheck{name="csrsigning",type="healthz"} 1
kubernetes_healthcheck{name="daemonset",type="healthz"} 1
kubernetes_healthcheck{name="deployment",type="healthz"} 1
kubernetes_healthcheck{name="disruption",type="healthz"} 1
kubernetes_healthcheck{name="endpoint",type="healthz"} 1
kubernetes_healthcheck{name="endpointslice",type="healthz"} 1
kubernetes_healthcheck{name="endpointslicemirroring",type="healthz"} 1
kubernetes_healthcheck{name="ephemeral-volume",type="healthz"} 1
kubernetes_healthcheck{name="garbagecollector",type="healthz"} 1
kubernetes_healthcheck{name="horizontalpodautoscaling",type="healthz"} 1
kubernetes_healthcheck{name="job",type="healthz"} 1
kubernetes_healthcheck{name="leaderElection",type="healthz"} 1
kubernetes_healthcheck{name="namespace",type="healthz"} 1
kubernetes_healthcheck{name="nodeipam",type="healthz"} 1
kubernetes_healthcheck{name="nodelifecycle",type="healthz"} 1
kubernetes_healthcheck{name="persistentvolume-binder",type="healthz"} 1
kubernetes_healthcheck{name="persistentvolume-expander",type="healthz"} 1
kubernetes_healthcheck{name="podgc",type="healthz"} 1
kubernetes_healthcheck{name="pv-protection",type="healthz"} 1
kubernetes_healthcheck{name="pvc-protection",type="healthz"} 1
kubernetes_healthcheck{name="replicaset",type="healthz"} 1
kubernetes_healthcheck{name="replicationcontroller",type="healthz"} 1
kubernetes_healthcheck{name="resourcequota",type="healthz"} 1
kubernetes_healthcheck{name="root-ca-cert-publisher",type="healthz"} 1
kubernetes_healthcheck{name="serviceaccount",type="healthz"} 1
kubernetes_healthcheck{name="statefulset",type="healthz"} 1
kubernetes_healthcheck{name="tokencleaner",type="healthz"} 1
kubernetes_healthcheck{name="ttl",type="healthz"} 1
kubernetes_healthcheck{name="ttl-after-finished",type="healthz"} 1
# HELP kubernetes_healthchecks_total [ALPHA] This metric records the results of all healthcheck.
# TYPE kubernetes_healthchecks_total counter
kubernetes_healthchecks_total{name="attachdetach",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="bootstrapsigner",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="clusterrole-aggregation",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="cronjob",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="csrapproving",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="csrcleaner",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="csrsigning",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="daemonset",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="deployment",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="disruption",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="endpoint",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="endpointslice",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="endpointslicemirroring",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="ephemeral-volume",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="garbagecollector",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="horizontalpodautoscaling",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="job",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="leaderElection",status="success",type="healthz"} 138
kubernetes_healthchecks_total{name="namespace",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="nodeipam",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="nodelifecycle",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="persistentvolume-binder",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="persistentvolume-expander",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="podgc",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="pv-protection",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="pvc-protection",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="replicaset",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="replicationcontroller",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="resourcequota",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="root-ca-cert-publisher",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="serviceaccount",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="statefulset",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="tokencleaner",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="ttl",status="success",type="healthz"} 137
kubernetes_healthchecks_total{name="ttl-after-finished",status="success",type="healthz"} 137
フィーチャーゲートメトリクスの提供
Kubernetes コンポーネントごとにフィーチャーゲートの有効無効が確認できる kubernetes_feature_enabled
メトリクスが利用できるようになりました。
https://github.com/kubernetes/kubernetes/pull/112690
# HELP kubernetes_feature_enabled [ALPHA] This metric records the data about the stage and enablement of a k8s feature.
# TYPE kubernetes_feature_enabled gauge
kubernetes_feature_enabled{name="APIListChunking",stage="BETA"} 1
kubernetes_feature_enabled{name="APIPriorityAndFairness",stage="BETA"} 1
kubernetes_feature_enabled{name="APIResponseCompression",stage="BETA"} 1
kubernetes_feature_enabled{name="APISelfSubjectReview",stage="ALPHA"} 0
kubernetes_feature_enabled{name="APIServerIdentity",stage="ALPHA"} 0
kubernetes_feature_enabled{name="APIServerTracing",stage="ALPHA"} 0
kubernetes_feature_enabled{name="AdvancedAuditing",stage=""} 1
kubernetes_feature_enabled{name="AggregatedDiscoveryEndpoint",stage="ALPHA"} 0
kubernetes_feature_enabled{name="AllAlpha",stage="ALPHA"} 0
kubernetes_feature_enabled{name="AllBeta",stage="BETA"} 0
kubernetes_feature_enabled{name="AnyVolumeDataSource",stage="BETA"} 1
kubernetes_feature_enabled{name="AppArmor",stage="BETA"} 1
kubernetes_feature_enabled{name="CPUManager",stage="BETA"} 1
kubernetes_feature_enabled{name="CPUManagerPolicyAlphaOptions",stage="ALPHA"} 0
kubernetes_feature_enabled{name="CPUManagerPolicyBetaOptions",stage="BETA"} 1
kubernetes_feature_enabled{name="CPUManagerPolicyOptions",stage="BETA"} 1
kubernetes_feature_enabled{name="CSIInlineVolume",stage=""} 1
kubernetes_feature_enabled{name="CSIMigration",stage=""} 1
kubernetes_feature_enabled{name="CSIMigrationAWS",stage=""} 1
kubernetes_feature_enabled{name="CSIMigrationAzureDisk",stage=""} 1
kubernetes_feature_enabled{name="CSIMigrationAzureFile",stage="BETA"} 1
kubernetes_feature_enabled{name="CSIMigrationGCE",stage=""} 1
kubernetes_feature_enabled{name="CSIMigrationPortworx",stage="BETA"} 0
kubernetes_feature_enabled{name="CSIMigrationRBD",stage="ALPHA"} 0
kubernetes_feature_enabled{name="CSIMigrationvSphere",stage="BETA"} 1
kubernetes_feature_enabled{name="CSINodeExpandSecret",stage="ALPHA"} 0
kubernetes_feature_enabled{name="CSIStorageCapacity",stage=""} 1
kubernetes_feature_enabled{name="CSIVolumeHealth",stage="ALPHA"} 0
kubernetes_feature_enabled{name="ContainerCheckpoint",stage="ALPHA"} 0
kubernetes_feature_enabled{name="ContextualLogging",stage="ALPHA"} 0
kubernetes_feature_enabled{name="ControllerManagerLeaderMigration",stage=""} 1
kubernetes_feature_enabled{name="CronJobTimeZone",stage="BETA"} 1
kubernetes_feature_enabled{name="CustomCPUCFSQuotaPeriod",stage="ALPHA"} 0
kubernetes_feature_enabled{name="CustomResourceValidationExpressions",stage="BETA"} 1
kubernetes_feature_enabled{name="DaemonSetUpdateSurge",stage=""} 1
kubernetes_feature_enabled{name="DelegateFSGroupToCSIDriver",stage="BETA"} 1
kubernetes_feature_enabled{name="DevicePlugins",stage="BETA"} 1
kubernetes_feature_enabled{name="DisableAcceleratorUsageMetrics",stage=""} 1
kubernetes_feature_enabled{name="DisableCloudProviders",stage="ALPHA"} 0
kubernetes_feature_enabled{name="DisableKubeletCloudCredentialProviders",stage="ALPHA"} 0
kubernetes_feature_enabled{name="DownwardAPIHugePages",stage="BETA"} 1
kubernetes_feature_enabled{name="DryRun",stage=""} 1
kubernetes_feature_enabled{name="DynamicKubeletConfig",stage="DEPRECATED"} 0
kubernetes_feature_enabled{name="EfficientWatchResumption",stage=""} 1
kubernetes_feature_enabled{name="EndpointSliceTerminatingCondition",stage="BETA"} 1
kubernetes_feature_enabled{name="EphemeralContainers",stage=""} 1
kubernetes_feature_enabled{name="ExecProbeTimeout",stage=""} 1
kubernetes_feature_enabled{name="ExpandCSIVolumes",stage=""} 1
kubernetes_feature_enabled{name="ExpandInUsePersistentVolumes",stage=""} 1
kubernetes_feature_enabled{name="ExpandPersistentVolumes",stage=""} 1
kubernetes_feature_enabled{name="ExpandedDNSConfig",stage="ALPHA"} 0
kubernetes_feature_enabled{name="ExperimentalHostUserNamespaceDefaulting",stage="BETA"} 0
kubernetes_feature_enabled{name="GRPCContainerProbe",stage="BETA"} 1
kubernetes_feature_enabled{name="GracefulNodeShutdown",stage="BETA"} 1
kubernetes_feature_enabled{name="GracefulNodeShutdownBasedOnPodPriority",stage="BETA"} 1
kubernetes_feature_enabled{name="HPAContainerMetrics",stage="ALPHA"} 0
kubernetes_feature_enabled{name="HPAScaleToZero",stage="ALPHA"} 0
kubernetes_feature_enabled{name="HonorPVReclaimPolicy",stage="ALPHA"} 0
kubernetes_feature_enabled{name="IPTablesOwnershipCleanup",stage="ALPHA"} 0
kubernetes_feature_enabled{name="IdentifyPodOS",stage=""} 1
kubernetes_feature_enabled{name="InTreePluginAWSUnregister",stage="ALPHA"} 0
kubernetes_feature_enabled{name="InTreePluginAzureDiskUnregister",stage="ALPHA"} 0
kubernetes_feature_enabled{name="InTreePluginAzureFileUnregister",stage="ALPHA"} 0
kubernetes_feature_enabled{name="InTreePluginGCEUnregister",stage="ALPHA"} 0
kubernetes_feature_enabled{name="InTreePluginPortworxUnregister",stage="ALPHA"} 0
kubernetes_feature_enabled{name="InTreePluginRBDUnregister",stage="ALPHA"} 0
kubernetes_feature_enabled{name="InTreePluginvSphereUnregister",stage="ALPHA"} 0
kubernetes_feature_enabled{name="JobMutableNodeSchedulingDirectives",stage="BETA"} 1
kubernetes_feature_enabled{name="JobPodFailurePolicy",stage="ALPHA"} 0
kubernetes_feature_enabled{name="JobReadyPods",stage="BETA"} 1
kubernetes_feature_enabled{name="JobTrackingWithFinalizers",stage="BETA"} 1
kubernetes_feature_enabled{name="KMSv2",stage="ALPHA"} 0
kubernetes_feature_enabled{name="KubeletCredentialProviders",stage="BETA"} 1
kubernetes_feature_enabled{name="KubeletInUserNamespace",stage="ALPHA"} 0
kubernetes_feature_enabled{name="KubeletPodResources",stage="BETA"} 1
kubernetes_feature_enabled{name="KubeletPodResourcesGetAllocatable",stage="BETA"} 1
kubernetes_feature_enabled{name="KubeletTracing",stage="ALPHA"} 0
kubernetes_feature_enabled{name="LegacyServiceAccountTokenNoAutoGeneration",stage="BETA"} 1
kubernetes_feature_enabled{name="LocalStorageCapacityIsolation",stage=""} 1
kubernetes_feature_enabled{name="LocalStorageCapacityIsolationFSQuotaMonitoring",stage="ALPHA"} 0
kubernetes_feature_enabled{name="LogarithmicScaleDown",stage="BETA"} 1
kubernetes_feature_enabled{name="LoggingAlphaOptions",stage="ALPHA"} 0
kubernetes_feature_enabled{name="LoggingBetaOptions",stage="BETA"} 1
kubernetes_feature_enabled{name="MatchLabelKeysInPodTopologySpread",stage="ALPHA"} 0
kubernetes_feature_enabled{name="MaxUnavailableStatefulSet",stage="ALPHA"} 0
kubernetes_feature_enabled{name="MemoryManager",stage="BETA"} 1
kubernetes_feature_enabled{name="MemoryQoS",stage="ALPHA"} 0
kubernetes_feature_enabled{name="MinDomainsInPodTopologySpread",stage="BETA"} 0
kubernetes_feature_enabled{name="MixedProtocolLBService",stage="BETA"} 1
kubernetes_feature_enabled{name="MultiCIDRRangeAllocator",stage="ALPHA"} 0
kubernetes_feature_enabled{name="NetworkPolicyEndPort",stage=""} 1
kubernetes_feature_enabled{name="NetworkPolicyStatus",stage="ALPHA"} 0
kubernetes_feature_enabled{name="NodeInclusionPolicyInPodTopologySpread",stage="ALPHA"} 0
kubernetes_feature_enabled{name="NodeOutOfServiceVolumeDetach",stage="ALPHA"} 0
kubernetes_feature_enabled{name="NodeSwap",stage="ALPHA"} 0
kubernetes_feature_enabled{name="OpenAPIEnums",stage="BETA"} 1
kubernetes_feature_enabled{name="OpenAPIV3",stage="BETA"} 1
kubernetes_feature_enabled{name="PodAndContainerStatsFromCRI",stage="ALPHA"} 0
kubernetes_feature_enabled{name="PodDeletionCost",stage="BETA"} 1
kubernetes_feature_enabled{name="PodDisruptionConditions",stage="ALPHA"} 0
kubernetes_feature_enabled{name="PodHasNetworkCondition",stage="ALPHA"} 0
kubernetes_feature_enabled{name="PodSecurity",stage=""} 1
kubernetes_feature_enabled{name="ProbeTerminationGracePeriod",stage="BETA"} 1
kubernetes_feature_enabled{name="ProcMountType",stage="ALPHA"} 0
kubernetes_feature_enabled{name="ProxyTerminatingEndpoints",stage="ALPHA"} 0
kubernetes_feature_enabled{name="QOSReserved",stage="ALPHA"} 0
kubernetes_feature_enabled{name="ReadWriteOncePod",stage="ALPHA"} 0
kubernetes_feature_enabled{name="RecoverVolumeExpansionFailure",stage="ALPHA"} 0
kubernetes_feature_enabled{name="RemainingItemCount",stage="BETA"} 1
kubernetes_feature_enabled{name="RemoveSelfLink",stage=""} 1
kubernetes_feature_enabled{name="RetroactiveDefaultStorageClass",stage="ALPHA"} 0
kubernetes_feature_enabled{name="RotateKubeletServerCertificate",stage="BETA"} 1
kubernetes_feature_enabled{name="SELinuxMountReadWriteOncePod",stage="ALPHA"} 0
kubernetes_feature_enabled{name="SeccompDefault",stage="BETA"} 1
kubernetes_feature_enabled{name="ServerSideApply",stage=""} 1
kubernetes_feature_enabled{name="ServerSideFieldValidation",stage="BETA"} 1
kubernetes_feature_enabled{name="ServiceIPStaticSubrange",stage="BETA"} 1
kubernetes_feature_enabled{name="ServiceInternalTrafficPolicy",stage="BETA"} 1
kubernetes_feature_enabled{name="SizeMemoryBackedVolumes",stage="BETA"} 1
kubernetes_feature_enabled{name="StatefulSetAutoDeletePVC",stage="ALPHA"} 0
kubernetes_feature_enabled{name="StatefulSetMinReadySeconds",stage=""} 1
kubernetes_feature_enabled{name="StorageVersionAPI",stage="ALPHA"} 0
kubernetes_feature_enabled{name="StorageVersionHash",stage="BETA"} 1
kubernetes_feature_enabled{name="TopologyAwareHints",stage="BETA"} 1
kubernetes_feature_enabled{name="TopologyManager",stage="BETA"} 1
kubernetes_feature_enabled{name="UserNamespacesStatelessPodsSupport",stage="ALPHA"} 0
kubernetes_feature_enabled{name="VolumeCapacityPriority",stage="ALPHA"} 0
kubernetes_feature_enabled{name="WatchBookmark",stage=""} 1
kubernetes_feature_enabled{name="WinDSR",stage="ALPHA"} 0
kubernetes_feature_enabled{name="WinOverlay",stage="BETA"} 1
kubernetes_feature_enabled{name="WindowsHostProcessContainers",stage="BETA"} 1
以上が v1.26 で SIG Instrumentation が扱う主要なテーマとなります。次は SIG Instrumentation に関連する変更点についてピックアップしたものを紹介します。
メトリクスの追加
kube-apiserver
- APF(Priority and Fairness) に
_borrowing_
という新しい機能が導入され、API Priority Level が他の Priority Level からシート数を借用できるようになりました。クラスタのオペレーターは、指定された Priority Level の.spec.limited
フィールド配下に新しく導入された 2 つのフィールドlendablePercent
とborrowingLimitPercent
を利用して、特定の PriorityLevelConfiguration オブジェクトを借用できます。この機能の導入により以下のメトリクスが追加されました。また借用の可能性があるため、既存メトリクスであるapiserver_flowcontrol_request_concurrency_limit
は、設定された同時実行数の制限と強制された同時実行数の制限の両方ではなく、設定された同時実行数のみを記録します(#113485, @MikeSpreitzer)。-
apiserver_flowcontrol_nominal_limit_seats
: Nominal number of execution seats configured for each priority level -
apiserver_flowcontrol_lower_limit_seats
: Configured lower bound on number of execution seats available to each priority level -
apiserver_flowcontrol_upper_limit_seats
: Configured upper bound on number of execution seats available to each priority level -
apiserver_flowcontrol_demand_seats
: Observations, at the end of every nanosecond, of (the number of seats each priority level could use) / (nominal number of seats for that level) -
apiserver_flowcontrol_demand_seats_high_watermark
: High watermark, over last adjustment period, of demand_seats -
apiserver_flowcontrol_demand_seats_average
: Time-weighted average, over last adjustment period, of demand_seats -
apiserver_flowcontrol_demand_seats_stdev
: Time-weighted standard deviation, over last adjustment period, of demand_seats -
apiserver_flowcontrol_demand_seats_smoothed
: Smoothed seat demands -
apiserver_flowcontrol_target_seats
: Seat allocation targets -
apiserver_flowcontrol_seat_fair_frac
: Fair fraction of server's concurrency to allocate to each priority level that can use it -
apiserver_flowcontrol_current_limit_seats
: current derived number of execution seats available to each priority level
-
kubelet
- Pod ステータスの変更が検出されてから、その Pod が正常に更新されるまでの時間を記録するメトリクスが追加されました(#107896, @smarterclayton)
- Histogram:
pod_status_sync_duration_seconds
- Labels: None
- Histogram:
- CPU コアの専有(ピンニング) 割当数と失敗数を記録するメトリクスが追加されました(#112855, @fromanirh)
- Counter:
kubelet_cpu_manager_pinning_requests_total
- Labels: None
- Counter:
kubelet_cpu_manager_pinning_errors_total
- Labels: None
- Counter:
- 全てのコンテナが開始され watch で観測できるまでの、イメージ取得と Init コンテナの実行時間を除いた Pod 開始までの時間(秒単位)を記録するメトリクスが追加されました(#111930, @azylinski)
- Histogram:
kubelet_pod_start_sli_duration_seconds
- Labels: None
- Histogram:
kube-controller-manager
- Finalizer に
batch.kubernetes.io/job-tracking
を持つ、フェーズが Failed、または Succeeded の Pod 数を記録します。ジョブステータスに計上した後に Pod の Finalizer が削除されているかどうかを監視するために使用できます(#113176, @alculquicondor)- Counter:
job_controller_terminated_pods_tracking_finalizer_total
- Labels: {"event"}
- "add" or "delete"
- Labels: {"event"}
- Counter:
- Pod GC コントローラーに、強制的に削除された Pod 数と、強制的に削除する際に発生したエラー数を記録するメトリクスが追加されました(#113519, @xing-yang)
- Counter:
pod_gc_collector_force_delete_pods_total
- Labels: None
- Counter:
pod_gc_collector_force_delete_pod_errors_total
- Labels: None
- Counter:
- podFailurePolicy で適用したアクション(FailJob|Ignore|Count)ごとに Pod Failure をカウントするメトリクスが追加されました(#113324, @mimowo)
- Counter:
job_controller_pod_failures_handled_by_failure_policy_total
- Labels: {"action"}
- Counter:
-
RetroactiveDefaultStorageClass
フィーチャーゲートのメトリクスが利用できるようになりました (#113323, @RomanBednar)- Counter:
retroactive_storageclass_total
- Labels: None
- Counter:
retroactive_storageclass_errors_total
- Labels: None
- Counter:
kube-scheduler
- kube-scheduler に goroutine を記録する以下のメトリクスが追加されました。既存の
scheduler_scheduler_goroutines
メトリクスより多くの場所で goroutine をカウントします(#112003, @sanposhiho)- Gauge:
scheduler_goroutines
- Labels: {"operation"}
- Gauge:
その他
- Kubernetes コンポーネントごとにアクティブなフィーチャーゲートの有効無効を記録するメトリクスが追加されました(#112690, @logicalhan) (#112652, @logicalhan)
- Gauge:
kubernetes_feature_enabled
- Labels: {"name", "stage"}
- Gauge:
- Kubernetes メトリクスフレームワークメトリクスの Deprecated Version と Stability Level ごとにカウントするメトリクスが追加されました(#112907, @logicalhan)
- Counter:
registered_metric_total
- Labels: {"stability_level", "deprecated_version"}
- Counter:
- Go の ランタイムに関連するメトリクスが追加されました(#111910, @tosi3k)
go_gc_cycles_automatic_gc_cycles_total
go_gc_cycles_forced_gc_cycles_total
go_gc_cycles_total_gc_cycles_total
go_gc_heap_allocs_by_size_bytes
go_gc_heap_allocs_bytes_total
go_gc_heap_allocs_objects_total
go_gc_heap_frees_by_size_bytes
go_gc_heap_frees_bytes_total
go_gc_heap_frees_objects_total
go_gc_heap_goal_bytes
go_gc_heap_objects_objects
go_gc_heap_tiny_allocs_objects_total
go_gc_pauses_seconds
go_memory_classes_heap_free_bytes
go_memory_classes_heap_objects_bytes
go_memory_classes_heap_released_bytes
go_memory_classes_heap_stacks_bytes
go_memory_classes_heap_unused_bytes
go_memory_classes_metadata_mcache_free_bytes
go_memory_classes_metadata_mcache_inuse_bytes
go_memory_classes_metadata_mspan_free_bytes
go_memory_classes_metadata_mspan_inuse_bytes
go_memory_classes_metadata_other_bytes
go_memory_classes_os_stacks_bytes
go_memory_classes_other_bytes
go_memory_classes_profiling_buckets_bytes
go_memory_classes_total_bytes
go_sched_goroutines_goroutines
go_sched_latencies_seconds
メトリクスの変更
kube-apiserver
- 以下のメトリクスがリネームされました(#113310, @logicalhan)
-
etcd_db_total_size_in_bytes
=>apiserver_storage_db_total_size_in_bytes
-
kube-controller-manager
- 以下のメトリクスに
reason
ラベルが追加されました(#113324, @mimowo)- Counter:
job_controller_job_finished_total
- Labels: {"completion_mode", "reason", "result"}
- Counter:
- 以下のメトリクスがリネームされ、Stability Level が Stable になりました(#113008, @soltysh)
-
cronjob_controller_cronjob_job_creation_skew
=>cronjob_controller_cronjob_job_creation_skew_duration_seconds
-
- 以下のメトリクスがリネームされ、Stability Level が Stable になりました(#113010, @soltysh)
-
job_controller_job_sync_total
->job_controller_job_syncs_total
-
job_controller_job_finished_total
->job_controller_jobs_finished_total
-
kubelet
- 以下のメトリクスがリネームされました(#113754, @logicalhan)
-
kubelet_kubelet_credential_provider_plugin_duration
=>kubelet_credential_provider_plugin_duration
-
kubelet_kubelet_credential_provider_plugin_errors
=>kubelet_credential_provider_plugin_errors
-
kube-scheduler
-
scheduler_preemption_victims
メトリクスのバケットがLinearBuckets
からExponentialBuckets
に変更となりました(#112939, @lengrongfu)
メトリクスの非推奨
kube-apiserver
-
apiserver_request_slo_duration_seconds
メトリクスは v1.27 で非推奨となる予定です。一定の命名規則に従うため追加されたapiserver_request_sli_duration_seconds
メトリクスを利用してください(#112679, @dgrisonnet)
kube-scheduler
-
scheduler_scheduler_goroutine
は非推奨となりました。代わりにscheduler_goroutine
メトリクスを利用してください(#112003, @sanposhiho)
メトリクスの削除
なし。
メトリクスの修正
kube-apiserver
-
etcd_request_duration_seconds
とetcd_bookmark_counts
メトリクスは、オブジェクトタイプではなく GroupResource で区別するようになりました。これまで*unstructured.Unstructured
ですべてグループ化していましたが、CustomResourceDefinition
ごとに記録されるようになりました(#112042, @ncdc)
kube-controller-manager
kube-scheduler
-
scheduler_scheduling_attempt_duration_seconds
メトリクスが正しく記録されるように修正されました(#113113, @kerthcet)
そのほか
-
ComponentSLIs
フィーチャーゲートの導入- kubelet(#113030, @Richabanker)
- kube-apiserver(#112884, @logicalhan) (#112741, @logicalhan)
- kube-controller-manager(#112978, @logicalhan)
- cloud-controller-manager(#113340, @Richabanker)
- kube-proxy(#113057, @Richabanker)
- API Server Tracing に新しい Span および Span Event が追加されました(#113172, @dashpole)
- API Server Tracing で認可の待ち時間、APF、なりすまし、監査、認証フィルタのレイテンシーがトラックされるようになりました(#113217, @dashpole)
- API Server Tracing で Root Span 名(opentelemetry) を
KubernetesAPI
からHTTP GET
に変更しました(#112545, @dims)
- cAdvisor の代わりに CRI で コンテナと Pod のメトリクスを生成する Alpha サポートを追加しました(#113609, @haircommander)
-
PodAndContainerStatsFromCRI
フィーチャーゲートが有効で CRI で Stats を実装していればその Stats を利用するように修正しました(#113291, @mengjiao-liu)
- cAdvisor を v0.46.0 に更新しました(#113769, @bobbypage)
- Watch のキャッシュのログメッセージとメトリクスは、Go の構造体型ではなく
<resource>.<group>
をキーにするようになりました。例えば*v1.Pod
の場合、pods
のようになります。さらにCustomResourceDefinitions
の場合、*unstructured.Unstructured
ではなく、正しいリソースとグループとして記録されます(#111807, @ncdc)
- klog.V(0).InfoS の代わりに klog.InfoS を使用するように修正しました。kubernetes-sigs/logtools#2 で述べられているように、パラメータとしてゼロを指定して V を呼び出すと無駄なオーバーヘッドが生じます(#111708, @yangjunmyfm192085)