我有一個網路應用程式,我正在嘗試使用Kubernetes. 它作業正常,但是當我嘗試添加資源限制時,ElasticSearch將無法部署。
彈性搜索部署.yaml:
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-service
spec:
type: NodePort
selector:
app: elasticsearch
ports:
- port: 9200
targetPort: 9200
name: serving
- port: 9300
targetPort: 9300
name: node-to-node
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch-deployment
labels:
app: elasticsearch
spec:
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: elasticsearch:7.9.0
ports:
- containerPort: 9200
- containerPort: 9300
env:
- name: discovery.type
value: single-node
# resources:
# limits:
# memory: 8Gi
# cpu: "4"
# requests:
# memory: 4Gi
# cpu: "2"
如果我取消注釋檔案的資源部分,則 pod 將處于掛起狀態:
> kubectl get pods
NAME READY STATUS RESTARTS AGE
backend-deployment-bd4f98697-rxsz8 1/1 Running 1 (6m9s ago) 6m40s
elasticsearch-deployment-644475545b-t75pp 0/1 Pending 0 6m40s
frontend-deployment-8bc989f89-4g6v7 1/1 Running 0 6m40s
mysql-0 1/1 Running 0 6m40s
如果我檢查事件:
> kubectl get events
...
Warning FailedScheduling pod/elasticsearch-deployment-54d9cdd879-k69js 0/1 nodes are available: 1 Insufficient cpu.
Warning FailedScheduling pod/elasticsearch-deployment-54d9cdd879-rjj24 0/1 nodes are available: 1 Insufficient cpu.
...
事件表明 pod 的cpu 不足,但我嘗試將資源限制更改為:
resources:
limits:
memory: 8Gi
cpu: "18"
requests:
memory: 4Gi
cpu: "18"
仍然不起作用,它起作用的唯一方法是洗掉資源限制,但是為什么呢?
uj5u.com熱心網友回復:
這是因為請求,而不是限制。這意味著您的節點沒有足夠的記憶體來調度請求 2 個 CPU 的 pod。您需要將該值設定為較低的值(例如 500m)。
您可以檢查服務器的可分配 CPU。所有 Pod 的 CPU 請求的總和應該低于這個值。
# kubectl describe nodes
...
Allocatable:
cpu: 28
...
uj5u.com熱心網友回復:
除了醍醐
請求和限制基于每個容器。Pod 中的每個容器都有自己的限制和請求。將每個容器的限制和請求加在一起時,您將獲得 Pod 的聚合值。
結合每個容器的請求和限制值將表示 Pod 請求是 500m cpu 和 128Mi 記憶體,Pod 限制是 1 cpu 和 256Mi 記憶體。
請求是容器保證得到的。如果容器請求資源,k8s 只會將其調度到可以為其提供該資源的節點上。
另一方面,Limits確保容器不會超過某個值或限制。
如果未定義請求和限制,調度程式可能會將 Pod 放置在可用記憶體少于 1 GiB 的節點上。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/448764.html
標籤:弹性搜索 Kubernetes 谷歌 Kubernetes 引擎
