0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

kubernetesの便利機能

0
Posted at

Node selector

特定のNodeにのみスケジュールしたい時に使う。例えばSSDを使っているNodeにスケジュールしたいってとき、マニフェストに

Nodeselector:
    disktype:ssd

って書く。

Node Affinity

Affinity =類似性、 近づくようにする

Selectorとやることは近いけど、こっちは「可能ならスケジュールする」選択肢が取れる。Selectorだと対応するNodeが存在しない場合、PodがNodeにスケジュールされないが、Affinityなら適当なNodeにスケジュールするように設定できるので柔軟性が高い。
絶対に特定のNodeにスケジュールしたいって時以外はAffinityを使うのが無難。
設定が二つある。
requiredDuringSchedulingIgnoredDuringExecution:対応するノードが見つからなければスケジュールされない。Selectorと比べてPodの指定を細かくできる
preferredDuringSchedulingIgnoredDuringExecution:できれば対応するNodeにスケジューリングするけど、なかったら適当にスケジュールする。

Preferredを指定した場合、Weightのしていが必要になる
複数Preferredを指定した時、各条件に重みをつけることで、各Weightの合計が高いNodeにスケジュールされる。

Pod Affinity(Anti-affinity)

NodeSelectorやNodeaffinityと違い、すでにNodeにスケジュールされたPodを基準に考える
例えば
すでにNodeAにPodAがスケジュールされている。
ここでPodBはPodAと同じNodeがいいと言っている。これがPodAffinity
しかしPodCはPodAと同じNodeは無理と言っている。これがPodAntiaffinity
よく使うケースとして、Node障害に備えて同じアプリケーションを動かしているPodを同じNodeに載せないという使い方がある。なぜか。いくらdeploymentでアプリケーションを冗長化させてもNodeがイカれたらアプリケーションが停止してしまうから

Pod Topology Spread Constraints(PTSC)

TopologyKeyを使うことでどうPodを分散させるかを表現できる。
例:Kubernetes.io/hostnameラベルを指定すると、ホスト間でPodを分散してスケジュールできる。
PodAntiaffinityではPreferrを指定しても、Podの数がNodeの数を超えると制御できなかった。
逆に完全に分散させようとRequireを使うとPodの数がNodeの数を超えられなくなる。
そこでPTSC
ポイントはmaxSkew:数字という指定。
これはNode間の差分が1以下になるようにスケジュールするという設定。
例えば三つNodeがあったとする時、全てのNode間のPodの個数の差分をみて、全体の差分が1以下になるようにスケジュールする

TaintとToleration

TaintはNodeに、TolerationはPodにつけるもの。
Taintは汚れ、Tolerationは寛容という意味。
NodeについているTaint(汚れ)をPodが許容できるかという考え方
Node Affinityでは 「あるPodをどういうNodeにスケジュールしたいか という考えだったが、Taint/Tolerationは 「あるNodeが特定のPodしかスケジュールしたくない(特に指定のないPodはスケジュールしたくない)」 という考え方になる
NodeにTaintをつける方法

kubectl taint nodes <対象ノード名><Label名>=<Labelの値>:<Taintの効果>

Pod priorityとPreemption

Podがスケジュールされる優先順位を決めることができる。
やりかた
1.Priorityclassを作成
2.設定したPriorityclassをPodのマニフェストに設定
①value:10000みたいに重みをつける。多いほど重要
②PriorityclassName:に①のMetadataの名前を書く

水平スケールと垂直スケール

アクセスが増えると一つのPodでは厳しくなる。スケールさせてアプリケーションを安定させよう。
水平スケール:同時に使えるアプリケーションを増やすこと
垂直スケール:使用できるリソースを増やすこと

Horizontal Pod Autoscale

HPAが自動でPodの個数を調整できる。
HPAのマニフェスト
minReplicasmaxReplicasを指定。Podの増減の幅を決める。
増減を決めるメトリクスはMetrics以下に書く
targetaverageUtilizationには望ましいCPU使用率を書く

VPA

resource requests/limitsの値を自動で調整してくれる

アプリケーションの可用性を保証しよう

PodDisruptionBudget

DeploymentでカバーできるのはPodの更新のみ。Nodeのメンテナンスの時などにPodがどっか言ってしまったりする。それを安全に行う方法。
ポイント
minAvailable 「最低幾つのPodが利用可能な状態か」 を指定
maxUnavailable 「最大幾つのPodが利用不可な状態か」 を指定
例:deploymentのReplicas:3の時、必ず二つ以上のPodが利用可能な状態で存在してほしいという要件があったとする。
このときPDBはminAvailable:2と書く
例えば何らかの理由でPodが一つPendingになった時、同時にapp:hello-serverのPodが載っているPodからPodをどかせられなくなる。これによってNodeのメンテはPendingが解消されるまでできなくなるので、自動的にNodeが保たれる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?