我使用以下方法在Google Cloud上创建了Kubernetes集群:
gcloud container clusters create my-app-cluster --num-nodes=1
然后,我部署了3个应用程序(后端,前端和刮板),并创建了负载平衡器。我使用了以下配置文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-server
image: gcr.io/my-app/server
ports:
- containerPort: 8009
envFrom:
- secretRef:
name: my-app-production-secrets
- name: my-app-scraper
image: gcr.io/my-app/scraper
ports:
- containerPort: 8109
envFrom:
- secretRef:
name: my-app-production-secrets
- name: my-app-frontend
image: gcr.io/my-app/frontend
ports:
- containerPort: 80
envFrom:
- secretRef:
name: my-app-production-secrets
---
apiVersion: v1
kind: Service
metadata:
name: my-app-lb-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- name: my-app-server-port
protocol: TCP
port: 8009
targetPort: 8009
- name: my-app-scraper-port
protocol: TCP
port: 8109
targetPort: 8109
- name: my-app-frontend-port
protocol: TCP
port: 80
targetPort: 80
输入kubectl get pods
时,我得到:
NAME READY STATUS RESTARTS AGE
my-app-deployment-6b49c9b5c4-5zxw2 0/3 Pending 0 12h
在Google Cloud上进行调查时,我在Pod上看到“计划外”状态和“ CPU不足”错误:
转到“群集”页面中群集下的“节点”部分时,我看到请求的681 mCPU和分配的940 mCPU:
怎么了?为什么我的吊舱无法启动?
答案 0 :(得分:2)
每个容器都有默认的CPU请求(在GKE中,我注意到它是0.1 CPU或100m)。假设使用这些默认值,那么您在该容器中有三个容器,因此您要再请求0.3个CPU。
该节点具有其他工作负载请求的0.68 CPU(680m),该节点上的总限制(可分配)为0.94 CPU(940m)。
如果要查看哪些工作负载在保留该0.68 CPU,则需要检查节点上的Pod。在GKE的页面上,您可以看到每个节点的资源分配和限制,如果单击该节点,它将带您到提供此信息的页面。
以我为例,我可以看到kube-dns
的两个Pod各自占用0.26 CPU。这些是正确操作集群所需的系统Pod。您看到的内容还将取决于您选择的附加服务,例如:HTTP负载平衡(入口),Kubernetes仪表板等。
您的pod会将节点的CPU占用的CPU提升到0.98,这超出了0.94的限制,这就是为什么pod无法启动的原因。
请注意,调度是基于每个工作负载请求的CPU数量,而不是实际使用的数量或限制。
您的选择:
gcloud
命令行执行此操作。apiVersion: apps/v1
kind: Deployment
...
spec:
containers:
- name: my-app-server
image: gcr.io/my-app/server
...
resources:
requests:
cpu: "50m"
- name: my-app-scraper
image: gcr.io/my-app/scraper
...
resources:
requests:
cpu: "50m"
- name: my-app-frontend
image: gcr.io/my-app/frontend
...
resources:
requests:
cpu: "50m"