docker - Pod 在单节点 Kubernetes 集群上处于 Pending 状态
问题描述
我正在使用该文件在托管机器上使用一些复制因子YAML
来部署容器。Kubernetes
YAML 文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: mojo-deployment
labels:
app: mojo
spec:
selector:
matchLabels:
app: mojo
replicas: 3
template:
metadata:
labels:
app: mojo
spec:
containers:
- name: mojo
image: mojo:1.0.1
ports:
- containerPort: 9000
---
#Services Info
apiVersion: v1
kind: Service
metadata:
name: mojo-services
spec:
selector:
app: mojo
ports:
- protocol: TCP
port: 80
targetPort: 9376
---
#Ingress Configuration
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: mojo-ingress
annotations:
kubernetes.io/ingress.class: mojo
spec:
backend:
serviceName: mojo-services
servicePort: 80
脚步:
Docker
使用 `docker build -t mojo:1.0构建镜像。docker image ls
给我一个图像ID。- 跳过
docker build
命令以在容器上部署映像。我需要这样做吗?或kubectl
服务会照顾它。 - 运行
kubectl apply -f Prod.yaml
。表明
deployment.apps/mojo-deployment 创建
服务/mojo 服务已创建
ingress.networking.k8s.io/mojo-ingress 创建
问题?
我需要在部署
YAML
文件之前构建容器吗?我试过了,但仍然kubernetes
没有运行。为什么所有 pod 都显示
Pending
状态。部署也显示
pending
状态。虽然我正在尝试
Ingress
使用 :80 访问但无法访问它。
编辑
吊舱描述
Name: mojo-deployment-6665bdc557-s57m7
Namespace: default
Priority: 0
Node: <none>
Labels: app=mojo
pod-template-hash=6665bdc557
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/mojo-deployment-6665bdc557
Containers:
mojo:
Image: mojo:1.0
Port: 9000/TCP
Host Port: 0/TCP
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-tjx6p
(ro)
Conditions:
Type Status
PodScheduled False
Volumes:
default-token-tjx6p:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-tjx6p
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From
消息 ---- ------ ---- ---- -------- 警告 FailedScheduling 70s (x45 over 67m) default-scheduler 0/1 个节点可用:1 个节点是无法安排。
编辑 2
从主节点移除污点后。1.kubectl get node
退货
kubectl get pod
返回
kubectl describe node
:https ://gist.github.com/amixpal/333bffd6ab91def749267f30d4ffb079
解决方案
如果您只有一个节点(主节点),那么通常会添加一个污点,这将使主节点无法调度。使用以下命令从主节点(以及所有其他节点,如果有多个节点)中删除污点。
kubectl taint nodes --all node-role.kubernetes.io/master-
编辑:根据节点描述输出,CNI 未准备好。请确保所有与 CNI 相关的 Pod 都在运行且健康
推荐阅读
- java - Spring Cloud Bus Kafka Bean 配置
- excel - 在 Excel 中使用 Sumif 公式时出现错误
- php - 如何修复未定义的偏移量:2?
- xml - XMPP 中 Stanza ID 的用途是什么?
- cvxpy - 关于 cvxpy 的一些令人困惑的结果
- machine-learning - 客户-代理配对的最佳 ML 算法是什么?
- css - 如何设置 React-Select 组件的样式以获得以下结构?
- android - 为什么我的 this.setState 在函数中不起作用?
- unity3d - Unity3D - 在运行时切片精灵?
- travis-ci - 测试 Travis 的构建矩阵扩展