來源:Avoid running out of ephemeral storage space on your Kubernetes worker Nodes
Kubernetes 裡用 emptyDir 的 volume 的話,就是用 ephemeral storage,這塊空間就是 node 上的磁碟空間。所以用完的話,表示 node 上也沒空間了,其他 pod 在使用上可能就會有狀況。
node 上的位置可能會因發行版而有差異,文章裡提供的位置是:/var/lib/kubelet/pods//volumes/kubernetes.io~empty-dir//…
避免的方法有兩種。
第1種是在掛載 volume 時,設定 sizeLimit ,例如
volumes:
- name: www-content
emptyDir:
sizeLimit: 2Mi
缺點是當超過這限制時,kubernetes 會把這個 pod evict 掉。
第二種是設定 ResourceQuotas/LimitRange,先新增以下 YAML,然後 apply
apiVersion: v1
kind: ResourceQuota
metadata:
name: default-resource-quotas
namespace: my-application-namespace
spec:
hard:
limits.cpu: "2"
limits.memory: 8Gi
limits.ephemeral-storage: 2Gi
requests.cpu: "1"
requests.memory: 4Gi
requests.ephemeral-storage: 1Gi
---
apiVersion: v1
kind: LimitRange
metadata:
name: default-limit-ranges
namespace: my-application-namespace
spec:
limits:
- default:
cpu: 100m
memory: 128Mi
ephemeral-storage: "2Mi"
defaultRequest:
cpu: 25m
memory: 64Mi
ephemeral-storage: "1Mi"
type: Container
再來在 deployment/statefulset 裡增加 resource 指定,例如
apiVersion: apps/v1
kind: Deployment
metadata:
name: helloworld-deployment-3
spec:
selector:
matchLabels:
app.kubernetes.io/name: helloworld-deployment-3
replicas: 2
template:
metadata:
labels:
app.kubernetes.io/name: helloworld-deployment-3
spec:
volumes:
- name: www-content
emptyDir: {}
containers:
- name: hello-world
image: helloworld:1.0
volumeMounts:
- mountPath: /www
name: www-content
resources:
requests:
ephemeral-storage: "1Mi"
limits:
ephemeral-storage: "2Mi"
在 Kubernetes 裡雖然可以很容易擴充,但不表示資源無限,反而更應該去管控好,避免浪費。
沒有留言:
張貼留言