沿用 default 裡的 web,這次替 Nginx 加上 CPU 與記憶體額度,避免單一容器毫無限制地吃掉節點資源。
下面的 requests 表示容器希望保留的基本資源,limits 則是允許使用的上限。100m 等於十分之一個 CPU 核心,64Mi 約為 64 MiB 記憶體:
kubectl set resources deployment web --requests=cpu=100m,memory=64Mi --limits=cpu=500m,memory=128Mi
這些數字只是練習用,不是 Nginx 的通用建議值。正式環境要根據監控結果與壓力測試調整,不能直接照抄。
修改資源設定會改動 Deployment 的 Pod 範本,因此 Kubernetes 會建立新 Pod 取代舊 Pod。先等待更新完成,再查看目前的 Pod:
kubectl rollout status deployment/web --timeout=120s
kubectl get pods -l app=web
如果新 Pod 一直停在 Pending,可能是節點已經沒有足夠資源可以滿足 requests。這時先用 kubectl describe pod 查看 Events,不要只看電腦當下似乎還很閒。
從上一個結果複製一個新 Pod 的完整名稱,把 POD_NAME 換掉。在 Containers 區段中,應該會看到 Requests 與 Limits:
kubectl describe pod POD_NAME
也可以直接查看 Deployment 的完整設定,確認數值已經寫進 Pod 範本:
kubectl get deployment web -o yaml
這次只驗證設定已套用,沒有證明它能承受多少流量。下一篇會加入自動擴縮;開始之前,要先分清楚設定的 requests、limits,以及容器真正使用的即時資源三者差異。
參考:資源請求與限制