




QoSは特定のプロパティがあって設定するのはなく、ContainerにResource設定があり、ここでRequestsとLimitのMemoryとCPUをどのように設定するかによって決定される
Guaranteedは、Podに複数のContainerがある場合、全てのContainerにRequestsとLimitの設定が必要である。
そしてRequestsとLimitのmemory、cpuも設定をする必要があり、各Containerに設定されたMemoryとcpuの値は、RequestsとLimitが同じではないといけない。
このルールに一致すると、KubernetesがこのPodをGuaranteed Classに判断をする。
どのContainerにもRequestとLimitが設定されていない場合はBestEffortとして判断する。
BurstableはGuaranteedとBestEffortの特徴を持っていると考えれば良い。
すべてのContainerにRequestとLimitが設定されているが、Requestの値が小さいか、Requestだけ設定がされており、Limitは設定されていない場合、またはPodのContainerが2つなのに一つは、完全に設定されているが、他の1つが設定されていない場合はすべてBurstable Classになる。
このように3つのClassは、ContainerのRequestとLimitをどのように設定するかによって決定される。
Burstableに設定された複数Podの中でどのPodが最初に削除されるかと言うとOOM(Out Of Memory)Scoreによって決定される。
上の図の2つのPodのRequest Memoryが5Gと8Gに設定されているが、Appが実際に使っているMemoryが同じ4GだとするとPod2のMemory使用量は75%であり、Pod3は50%である。
OOM ScoreがPod2が75%で大きいので、KubernetesはPod2を最初に削除する。