当我的Node.js应用程序无法部署到 Kubernetes 时,如何发现"Pending"的原因?



我写了一个简单的node.js应用程序,它在端口上侦听并返回HTML。我可以docker运行node.js应用程序,并在适当的端口转发后,愉快地使用它。

+ docker run -p 7081:7081 split-server

现在我想在kubernetes中运行该应用程序。我在一台mac上,设置了minikube和虚拟盒子我还为我的本地应用程序设置了一个本地docker注册表,使用此处的说明。

无论我尝试什么组合,它都不起作用。悬而未决的描述如下。我想我已经接近了,但我就是无法从kubectl获得有用的调试输出:

+ kubectl describe pod split-server
Name:           split-server-68fc6cdcd-gpk5m
Namespace:      default
Priority:       0
Node:           <none>
Labels:         app=split-server
pod-template-hash=68fc6cdcd
Annotations:    <none>
Status:         Pending
IP:             
IPs:            <none>
Controlled By:  ReplicaSet/split-server-68fc6cdcd
Containers:
app:
Image:      split-server:latest
Port:       7081/TCP
Host Port:  0/TCP
Environment:
SPLIT_API_KEY:  <API KEY>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-f8lzd (ro)
Conditions:
Type           Status
PodScheduled   False 
Volumes:
kube-api-access-f8lzd:
Type:                    Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds:  3607
ConfigMapName:           kube-root-ca.crt
ConfigMapOptional:       <nil>
DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type     Reason            Age                  From               Message
----     ------            ----                 ----               -------
Warning  FailedScheduling  3m27s (x3 over 13m)  default-scheduler  0/1 nodes are available: 1 node(s) had untolerated taint {node.kubernetes.io/unschedulable: }, 1 node(s) were unschedulable. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling.

我的YAML是…

apiVersion: v1
kind: Service
metadata:
name: split-server
spec:
selector:
app: split-server
ports:
- port: 7081
targetPort: 7081
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: split-server
spec:
replicas: 1
selector:
matchLabels:
app: split-server
template:
metadata:
labels:
app: split-server
spec:
containers:
- name: app 
image: 192.168.4.26:5000/split-server:latest
#image: split-server:latest
ports:
- containerPort: 7081
env:
- name: SPLIT_API_KEY
value: <API KEY> 
imagePullPolicy: Always

以下是docker的图像列表:

docker images
REPOSITORY                             TAG             IMAGE ID       CREATED             SIZE
split-server                           latest          d2caa2d0c693   45 minutes ago      1.01GB
192.168.4.26:5000/local/split-server   latest          d2caa2d0c693   45 minutes ago      1.01GB

我应该在哪里狩猎?我缺少什么工具kubectl日志每次都是空的。。。如果应用程序运行正常,应该有一行日志记录。

由于某种原因(手动或有问题(,minikube节点被标记为unschedulable,您可以尝试删除污点:

kubectl taint nodes --all node.kubernetes.io/unschedulable-

或者在你的吊舱上添加一个容忍度:

apiVersion: v1
kind: Pod
metadata:
name: ...
...
spec:
containers:
- name: ...
...
tolerations:
- key: "node.kubernetes.io/unschedulable"
operator: "Exists"
effect: "NoSchedule"

对挂起的pod进行故障排除的方法是查看描述pod时得到的事件。在您的案例中,主节点被标记为不可调度,因此您正面临此问题。

要修复的命令就像侯赛因所说的一样。请参阅本页,了解如何对未决吊舱进行故障排除:

待处理吊舱故障排除

最新更新