私は EKS v1.20.11-eks-f17b81 で作業していますが、Alpine ベースの Java コンテナで問題が発生しています。基本的に、私のデプロイメントにはリクエストの一時ストレージの制限があり、次のような制限もあります。
- containerPort: 8080
protocol: TCP
resources:
limits:
cpu: 2048m
ephemeral-storage: 1300Mi
memory: 4096M
requests:
cpu: 500m
memory: 1024M
ephemeral-storage: 1000Mi
数時間後にはポッドはすべてEvicted状態になりますが、その理由がわかりません。ノードの/var/libフォルダを見ると十分なスペースがあり、また、kubectl exec -ti POD -- shそして、私は du -sch / のようなことをしましたが、300MB 以上が使用されていることは一度もありませんでした。何が起こっているのでしょうか?
答え1
TLDR: 制限をまったく使用しないかephemeral-storage
、ポッド内のすべてのコンテナで制限を使用します。
ephemeral-storage
制限を設けていないようですすべてのコンテナその特定のポッドで。エビクションマネージャはコンテナのすべての制限を合計し、それを上限として設定しますポッドレベル。
これは実際コードスニペット:
func (m *managerImpl) localStorageEviction(pods []*v1.Pod, statsFunc statsFunc) []*v1.Pod {
evicted := []*v1.Pod{}
for _, pod := range pods {
podStats, ok := statsFunc(pod)
if !ok {
continue
}
if m.emptyDirLimitEviction(podStats, pod) {
evicted = append(evicted, pod)
continue
}
if m.podEphemeralStorageLimitEviction(podStats, pod) {
evicted = append(evicted, pod)
continue
}
if m.containerEphemeralStorageLimitEviction(podStats, pod) {
evicted = append(evicted, pod)
}
}
return evicted
}
ご覧のとおり、podEphemeralStorageLimitEviction
と は両方ともcontainerEphemeralStorageLimitEviction
削除に使用されます。執筆時点では、なぜ両方が使用されるのか (コンテナ 1 だけではなく) がわかりません。