Kubernetes学習ノート(1):Allocatableリソース

1718 ワード

Allocatableとは?
Kebernetesのノード状態(NodeStatus)には、CPU、メモリなどのノードのリソースの総容量を統計するプロパティCapacityがあります.ノード内のリソースの一部は、Kubernetesのコンポーネント(Kube-Reserved)または他のコンポーネント使用(System-reserved)に予約されている可能性があります.リソースの総容量からこれらの予約されたリソースを減算することは、割り当て可能なリソースです.これらの割り当て可能なリソースは、ノード状態のAllocatableプロパティです.
ノードに1つ以上のコンテナを配置すると、コンテナに割り当てられるリソースがノードに残っているにもかかわらず、Allocatableプロパティの値は減少しません.これは私たちの最初の予想と一致しないかもしれません.
現在Allocatableで実装されている問題Kebernetesバージョン1.6では、すべてのWindowsノードのAllocatableのCPUとメモリは0です.
Windowsコンテナの導入に成功しなかった場合は、このAllocatableプロパティの問題による可能性があります.Kubernetesは、ノード配置コンテナを選択する際に、ノードがリソースを割り当てることができる量に応じて、ノードがより多くのコンテナを配置できるかどうかを決定します.対応するコードは次のとおりです(https://github.com/kubernetes/kubernetes/blob/master/plugin/pkg/scheduler/algorithm/predicates/predicates.go):
allocatable := nodeInfo.AllocatableResource()
if allocatable.MilliCPU < podRequest.MilliCPU+nodeInfo.RequestedResource().MilliCPU {
    predicateFails = append(predicateFails, NewInsufficientResourceError(v1.ResourceCPU, podRequest.MilliCPU, nodeInfo.RequestedResource().MilliCPU, allocatable.MilliCPU))
}
if allocatable.Memory < podRequest.Memory+nodeInfo.RequestedResource().Memory {
    predicateFails = append(predicateFails, NewInsufficientResourceError(v1.ResourceMemory, podRequest.Memory, nodeInfo.RequestedResource().Memory, allocatable.Memory))
}

上記のコードのallocatableはノード状態のAllocatable属性であり、podRequestは配置されるコンテナに必要なリソースであり、nodeInfoである.RequestResourceは、ノードにすでに配置されているすべてのコンテナに必要なリソースの合計です.新しいコンテナを配置するには、ノードに十分なリソースが残っている必要があります.
WindowsノードのAllocatableプロパティは常に0であるため、コンテナリソース要件(コンテナ配置設定のResourcesプロパティのRequestsプロパティ)を構成するときにKubernetesにコンテナに定額のリソースを割り当てるように要求することはできません.そうしないと、Kubernetesは条件を満たすノードを見つけてコンテナを配置できません.