繁体   English   中英

Pod 在单节点 Kubernetes 集群上处于 Pending 状态

[英]Pod is in Pending state on single node Kubernetes cluster

我正在使用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

脚步:

  1. 使用 `docker build -t mojo:1.0 构建Docker镜像。
  2. docker image ls显示一个图像 ID。
  3. 跳过docker build命令在容器上部署镜像。 我需要这样做吗? 或者kubectl服务会处理它。
  4. 运行kubectl apply -f Prod.yaml 表明

deployment.apps/mojo-deployment 创建

已创建服务/mojo-services

ingress.networking.k8s.io/mojo-ingress 创建

  1. kubectl get service返回

  2. kubectl get pod返回
  3. kubectl get deployment返回在此处输入图片说明

问题?

  1. 在部署YAML文件之前是否需要构建容器? 我试过了,但kubernetes仍然没有运行。

  2. 为什么所有 Pod 都显示Pending状态。

  3. 部署也显示pending状态。

  4. 尽管我尝试使用 :80 访问Ingress并且无法访问它。

编辑

吊舱描述

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               

消息 ---- ------ ---- ---- ------- Warning FailedScheduling 70s (x45 over 67m) default-scheduler 0/1 nodes are available: 1 node(s) was不可安排。

编辑 2

从主节点删除污点后。 1. kubectl get node返回

  1. kubectl get pod返回

  1. kubectl describe nodehttps : kubectl describe node

如果您只有一个节点 (master) ,那么通常会向其中添加一个污点,这将使主节点无法调度。 使用下面的方法从主节点(以及所有其他节点,如果有多个节点)中删除污点。

kubectl taint nodes --all node-role.kubernetes.io/master-

编辑:根据节点描述输出,CNI 未准备好。 请确保所有与 CNI 相关的 Pod 都在运行且健康

  1. 你的容器清单应该包含可下载的 docker 镜像,或者 k8s 节点应该已经包含了 docker 镜像:
containers:
        - name: mojo
          image: mojo:1.0.1
          ports:
            - containerPort: 9000

请回答:你的 mojo:1.0.1 docker 镜像如何出现在 kubernetes 节点上?

  1. 所有 pod 都等待图像可用。

  2. 部署等待所有 pod 将处于Running状态。

  3. 部署就绪后,K8s 服务使入口可用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM