Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
"なるべくスケジューリングしない" を実現する "PreferNoSchedule" taint
Search
Kazuki Suda
November 25, 2025
Technology
300
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
"なるべくスケジューリングしない" を実現する "PreferNoSchedule" taint
Kubernetes Meetup Tokyo 72 - LT
Kazuki Suda
November 25, 2025
More Decks by Kazuki Suda
See All by Kazuki Suda
実践/先取り「入門 Kubernetes Validating/Mutating Admission Policy」 / CloudNative Days Winter 2024
superbrothers
0
110
個人的、Kubernetes の最新注目機能! (2024年5月版)
superbrothers
0
190
Kubernetes + containerd で cgroup v2 に移行したら "failed to create fsnotify watcher" エラーが発生する原因と対策
superbrothers
0
1.6k
Kubernetes にこれから入るかもしれない注目機能!(2022年11月版)
superbrothers
2
1.6k
コミュニティ/ 勉強会紹介
superbrothers
0
290
高可用性、省力運用を目指す 自宅 Kubernetes クラスタ (K8s@home #1)
superbrothers
13
6.8k
KubeCon + CloudNativeCon Europe 2022 Recap
superbrothers
0
130
独断と偏見で選んだ Kubernetes 1.24 の注目機能と今後!
superbrothers
2
8.8k
わかる!metadata.managedFields
superbrothers
4
2.6k
Other Decks in Technology
See All in Technology
AI AgentによるEmbedded SREの取り組み
tgidgd
1
350
視野はAIに、視座は人に / ai-for-breadth-humans-for-perspective
nkzn
6
3.1k
eBPF 簡介 2026 版
shunghsiyu
0
190
Building Audio Plugin Ecosystem for Android in 2026
atsushieno
2
150
bpf_arenaとstruct_opsを使うのが難しかった話
masu_mi
0
200
AI時代に求められる優秀なTechLeadの振る舞い
pospome
10
15k
AI時代の組織作り:チーム開発から「個人×AI」への移行と、持続可能な「開発資本」の築き方
ham0215
1
250
`go get`したらELFが降ってきた件
taiyow
0
180
なぜ東京にいる私が、新潟の技術コミュニティを運営するのか by 八雲慎之助
yakumo
0
220
詳解 never 型 - ボトム型の性質を深掘り
nealle
0
150
AI時代のエンジニアの情報発信〜個人の発信を組織の力に変える〜
ryo_kawamata
1
7.4k
Autonomous AI Lakehouse - Live AI Hubから始めるセキュアなAIデータ活用 -
oracle4engineer
PRO
3
190
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
360
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.2k
Paper Plane (Part 1)
katiecoart
PRO
2
12k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
550
Scaling GitHub
holman
464
140k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
740
Fireside Chat
paigeccino
43
4.1k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
930
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Transcript
@superbrothers Kubernetes Meetup Tokyo # 7 2 - LT
( 2025 / 11 / 25 ) SUDA Kazuki “なるべくスケジューリングしない” を実現する “PreferNoSchedule” taint
@superbrothers ノードの taint ノードに Pods をスケジューリングしないように制御する機能 2 kind: Node
taints: - key: "key1" value: "value1" effect: "NoSchedule" kind: Pod tolerations: - key: "key1" value: "value1" effect: "NoSchedule" ノードの taints を許容するための設定
@superbrothers ノードの taint: e ff ect の種類 ▶ NoSchedule
+ Pod が合致する toleration を持たなければスケジューリングしない ▶ NoExecute + Pod が合致する toleration を持たなければスケジューリングしない + 既に実 行 中の Pod がノードから排除される ▶ PreferNoSchedule + Pod が合致する toleration を持たなければ ”なるべくスケジューリングしない” 3 目立ってないけど、taints/tolerations が Kubernetes に初めて実装された v1.3 から存在してます。
@superbrothers PreferNoSchedule taint: なるべくスケジューリングしない 4 GPU Node taints: -
key: “nvidia.com/gpu“ effect: “PreferNoSchedule" allocatable: cpu: “36” nvidia.com/gpu: “8” GPU pod resources: requests: cpu: “1000m" limits: nvidia.com/gpu: 8 CPU pod resources: requests: cpu: “1000m" CPU Node allocatable: cpu: “24” GPU ノードにしか入らないのでそのまま入っていく GPU ノードに PreferNoSchedule taint があるので CPU ノードに空きがあればこっちが優先される CPU ノードに空きがなければ GPU ノードに入る
@superbrothers PreferNoSchedule taint の使いどころ ▶ GPU ノードに CPU pods
をなるべくスケジューリングしたくない + GPU ノードに nvidia.com/gpu:PreferNoSchedule taint を付与する + GPU pod をスケジューリングする際に CPU 割り当て量が 足 りずにスケジューリングできない 自 体を避けたいが、CPU ノードのリソースが 足 りない場合は GPU ノードへのスケジューリン グを許容したい ▶ これからメンテナンスするノードに pods を新たになるべくスケジューリングしたくない + メンテ対象の全ノードに maintenance-20251125:PreferNoSchedule taint を付与して 1ノードずつ完了後に削除する + メンテでノード上の pods を drain する際にこれからメンテされるノードではなく、既にメン テが完了したノードになるべくスケジューリングして evict の機会を減らしたい + Cluster API ではクラスタアップグレード時にロールアウト対象ノードに PreferNoSchedule taint を設定することでこれを実現している 5
@superbrothers PreferNoSchedule taint を実現する “TaintToleration” scheduler plugin ▶ 各ノードで
intolerable な (許容できない) taint の個数が最少のノードを100、最多を0の範囲で 線形に正規化する(スコア値が 高 いノードが望ましいノード) 6 func (pl *TaintToleration) Score(ctx context.Context, state fwk.CycleState, pod *v1.Pod, nodeInfo fwk.NodeInfo) (int64, *fwk.Status) { node := nodeInfo.Node() s, err := getPreScoreState(state) if err != nil { return 0, fwk.AsStatus(err) } score := int64(countIntolerableTaintsPreferNoSchedule(node.Spec.Taints, s.tolerationsPreferNoSchedule)) return score, nil } // CountIntolerableTaintsPreferNoSchedule gives the count of intolerable taints of a pod with effect PreferNoSchedule func countIntolerableTaintsPreferNoSchedule(taints []v1.Taint, tolerations []v1.Toleration) (intolerableTaints int) { for _, taint := range taints { // check only on taints that have effect PreferNoSchedule if taint.Effect != v1.TaintEffectPreferNoSchedule { continue } if !v1helper.TolerationsTolerateTaint(tolerations, &taint) { intolerableTaints++ } } return } https://github.com/kubernetes/kubernetes/blob/v 1 . 34 . 2 /pkg/scheduler/framework/plugins/tainttoleration/taint_toleration.go#L 1 8 3 -L 1 9 4
@superbrothers Appendix ▶ Taints and Tolerations | Kubernetes 7