2.3. 一時ストレージ管理
クラスター管理者は、非終了状態のすべての Pod の一時ストレージに対して制限範囲や一時ストレージの要求数を定義するクォータを設定することで、プロジェクト内で一時ストレージを管理できます。開発者は Pod およびコンテナーのレベルで、このコンピュートリソースの要求および制限を設定することもできます。
要求と制限を指定することで、ローカルの一時ストレージを管理できます。Pod 内の各コンテナーは、以下を指定できます。
-
spec.containers[].resources.limits.ephemeral-storage
-
spec.containers[].resources.requests.ephemeral-storage
一時ストレージの制限と要求は、バイト単位で測定されます。ストレージは、E、P、T、G、M、k のいずれかの接尾辞を使用して、単純な整数または固定小数点数として表すことができます。Ei、Pi、Ti、Gi、Mi、Ki の 2 のべき乗も使用できます。たとえば、128974848、129e6、129M、および 123Mi はすべてほぼ同じ値を表します。接尾辞の大文字と小文字は区別する必要があります。400m の一時ストレージを指定すると、おそらく意図されたものであろう 400 メビバイト (400Mi) または 400 メガバイト (400M) ではなく、0.4 バイトが要求されます。
次の例は、2 つのコンテナーを持つ Pod を示しています。各コンテナーは、2GiB のローカル一時ストレージを要求します。各コンテナーには、4GiB のローカル一時ストレージの制限があります。したがって、Pod には 4GiB のローカル一時ストレージの要求と、8GiB のローカル一時ストレージの制限があります。
apiVersion: v1 kind: Pod metadata: name: frontend spec: containers: - name: app image: images.my-company.example/app:v4 resources: requests: ephemeral-storage: "2Gi" 1 limits: ephemeral-storage: "4Gi" 2 volumeMounts: - name: ephemeral mountPath: "/tmp" - name: log-aggregator image: images.my-company.example/log-aggregator:v6 resources: requests: ephemeral-storage: "2Gi" 3 volumeMounts: - name: ephemeral mountPath: "/tmp" volumes: - name: ephemeral emptyDir: {}
Pod 仕様のこの設定は、スケジューラーが Pod のスケジューリングを決定する方法と、kubelet が Pod を削除する方法に影響します。まず、スケジューラーは、スケジュールされたコンテナーのリソース要求の合計がノードの容量よりも少ないことを確認します。この場合は、使用可能な一時ストレージ (割り当て可能なリソース) が 4GiB を超える場合にのみ、Pod をノードに割り当てることができます。
次に、コンテナーレベルでは、最初のコンテナーがリソース制限を設定するため、kubelet エビクションマネージャーはこのコンテナーのディスク使用量を測定し、このコンテナーのストレージ使用量がその制限 (4GiB) を超える場合は、Pod をエビクトします。Pod レベルでは、kubelet は、その Pod 内のすべてのコンテナーの制限を合計することで、Pod 全体のストレージ制限を計算します。この場合、Pod レベルでの合計ストレージ使用量は、すべてのコンテナーからのディスク使用量と Pod の emptyDir
ボリュームの合計になります。この合計使用量が全体的な Pod ストレージの制限 (4GiB) を超えた場合、kubelet は Pod にエビクションのマークも付けます。