pod 没有在 kubernetes 中创建,但存在部署?

Posted

技术标签:

【中文标题】pod 没有在 kubernetes 中创建,但存在部署?【英文标题】:pod are not getting created in kubernetes but deployment exists? 【发布时间】:2019-10-25 17:56:41 【问题描述】:

我有一个在 Azure 云上运行的集群。我在该集群上部署了对等服务。但是该部署的 pod 没有被创建。我还扩大了该分解的副本集。

即使我尝试创建 docker busybox 映像的简单部署,它也无法创建 pod。

请指导我可能是什么问题?

编辑

描述部署的输出

Name:               peer0-org-myorg
Namespace:          internal
CreationTimestamp:  Tue, 28 May 2019 06:12:21 +0000
Labels:             cattle.io/creator=norman
                    workload.user.cattle.io/workloadselector=deployment-internal-peer0-org-myorg
Annotations:        deployment.kubernetes.io/revision=1
                    field.cattle.io/creatorId=user-b29mj
                    field.cattle.io/publicEndpoints=null
Selector:           workload.user.cattle.io/workloadselector=deployment-internal-peer0-org-myorg
Replicas:           1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:       Recreate
MinReadySeconds:    0
Pod Template:
  Labels:       workload.user.cattle.io/workloadselector=deployment-internal-peer0-org-myorg
  Annotations:  cattle.io/timestamp=2019-06-11T08:19:40Z
                field.cattle.io/ports=[["containerPort":7051,"dnsName":"peer0-org-myorg-hostport","hostPort":7051,"kind":"HostPort","name":"7051tcp70510","protocol":"TCP","sourcePort":7051,"containerPo...
  Containers:
   peer0-org-myorg:
    Image:       hyperledger/fabric-peer:1.4.0
    Ports:       7051/TCP, 7053/TCP
    Host Ports:  7051/TCP, 7053/TCP
    Environment:
      CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS:  couchdb0:5984
      CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD:        root
      CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME:        root
      CORE_LEDGER_STATE_STATEDATABASE:                 CouchDB
      CORE_LOGGING_CAUTHDSL:                           INFO
      CORE_LOGGING_GOSSIP:                             WARNING
      CORE_LOGGING_GRPC:                               WARNING
      CORE_LOGGING_MSP:                                WARNING
      CORE_PEER_ADDRESS:                               peer0-org-myorg-com:7051
      CORE_PEER_ADDRESSAUTODETECT:                     true
      CORE_PEER_FILESYSTEMPATH:                        /var/hyperledger/peers/peer0/production
      CORE_PEER_GOSSIP_EXTERNALENDPOINT:               peer0-org-myorg-com:7051
      CORE_PEER_GOSSIP_ORGLEADER:                      false
      CORE_PEER_GOSSIP_USELEADERELECTION:              true
      CORE_PEER_ID:                                    peer0.org.myorg.com
      CORE_PEER_LOCALMSPID:                            orgMSP
      CORE_PEER_MSPCONFIGPATH:                         /mnt/crypto/crypto-config/peerOrganizations/org.myorg.com/peers/peer0.org.myorg.com/msp
      CORE_PEER_PROFILE_ENABLED:                       true
      CORE_PEER_TLS_CERT_FILE:                         /mnt/crypto/crypto-config/peerOrganizations/org.myorg.com/peers/peer0.org.myorg.com/tls/server.crt
      CORE_PEER_TLS_ENABLED:                           false
      CORE_PEER_TLS_KEY_FILE:                          /mnt/crypto/crypto-config/peerOrganizations/org.myorg.com/peers/peer0.org.myorg.com/tls/server.key
      CORE_PEER_TLS_ROOTCERT_FILE:                     /mnt/crypto/crypto-config/peerOrganizations/org.myorg.com/peers/peer0.org.myorg.com/tls/ca.crt
      CORE_PEER_TLS_SERVERHOSTOVERRIDE:                peer0.org.myorg.com
      CORE_VM_ENDPOINT:                                unix:///host/var/run/docker.sock
      FABRIC_LOGGING_SPEC:                             DEBUG
    Mounts:
      /host/var/run from worker1-dockersock (ro)
      /mnt/crypto from crypto (ro)
      /var/hyperledger/peers from vol2 (rw)
  Volumes:
   crypto:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  worker1-crypto-pvc
    ReadOnly:   false
   vol2:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  worker1-pvc
    ReadOnly:   false
   worker1-dockersock:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  worker1-dockersock
    ReadOnly:   false
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Progressing    True    NewReplicaSetAvailable
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  peer0-org-myorg-6d6645ddd7 (1/1 replicas created)
NewReplicaSet:   <none>
Events:          <none>

【问题讨论】:

kubectl describe deploy %deploymentname% 看看它是否说了什么有意义的东西 正如你所说,部署已创建但没有 pod,我们需要的是副本集的输出来找出它无法创建 pod 的原因,你能做一个kubectl get replicaset然后找到对应于你的部署然后kubectl describe replicaset &lt;replicaset_name&gt; 【参考方案1】:

您的 pod 可能被破坏的原因有上百万种,您可以获得大量信息,这些信息可以为您提供有关未创建 pod 的原因的更多信息。我会开始:

豆荚在说什么:

kubectl get pods --all-namespaces -o wide

如果您可以看到 pod 但它们有错误,那么错误说明了什么。进一步描述破碎的豆荚。

kubectl describe pod <pod-name>

或者抓取日志

kubectl logs <pod-name>

您的部署可能出了点问题。检查部署。

kubectl get deployments

描述部署(如上面的 pod),查找错误。

在您提供更多信息之前,我们无法真正帮助您。到目前为止,您进行了哪些调试尝试?显示了哪些错误,您在哪里看到它们?尝试创建 pod 时实际发生的情况。

kubectl 获取/描述/记录所有内容,让我们知道实际发生了什么。

这是一个很好的起点:

Troubleshoot clusters Kubectl command cheatsheet

编辑:在 Azure 门户中添加了故障排除图片(在下面的 cmets 中提到)

【讨论】:

kubectl get pods --all-namespaces -o wide 我没有看到任何有关部署的同行。这是在没有任何 pod 的情况下创建部署的问题。检查更新问题 我可以看到对等方的部署,但看不到 pod 你能澄清最后的评论吗?当您运行 get deployments 时,您正在搜索的部署在列表中还是不存在?如果你运行kubectl rollout status &lt;deployment-name&gt; 会怎样。 如果您要部署的部署已正确编写和应用,您应该会看到至少尝试创建自己的 pod。我们会在列表中看到它们,并且至少能够看到错误。部署本身似乎有些不正确。检查您正在部署的 yaml 是否有错误。手动将此 yaml 应用到您的集群并 (kubectl apply) 检查结果。 get deployments 返回什么?描述?豆荚看起来像什么?他们现在在吗? 还有!转到 Azure 门户。转到有问题的资源组。检查“活动”选项卡中的事件。这里有错误吗?此外,在左上角的概览选项卡下,您应该有一个指向“部署”的链接。也检查这个是否有错误。您的失败部署应在此处列出,它可以告诉您出了什么问题。【参考方案2】:

kube-apiserver(k8s 主平面组件)负责为您的 API 请求提供服务,例如:kubectl create ..kubectl scale ... 现在将这些 kubernetes 资源的状态实际维护到所需状态是kube-controller-manager(另一个 k8s 主平面组件)的工作。 此外,将这些资源调度到节点是 kube-scheduler(另一个 k8s 主平面组件)的工作。

上述信息并假设(我认为)您正在使用托管 Kubernetes,因此上述组件由您的云提供商管理。但是根据我的(本地 kubernetes)经验,我可以说,如果您的部署命令正确执行,则意味着 kube-apiserver 工作正常,但 kube-controller 工作不正常。此外,如果 pod 出现但卡在创建状态,那么这是 kube-scheduler 的问题,它没有完成它的工作。

总而言之,kube-controller和kube-scheduler的日志值得查看。

【讨论】:

我们正在使用牧场主。有时我们会收到诸如控制器管理器不健康的警报 @PankajCheema 当控制器管理器不健康时,将发生以下情况(例如):您的命令 kubectl create/scale/.. .. 将成功执行,但您的资源(工作负载/pod)不会实际创建或扩展。跨度> 【参考方案3】:

我在 Mac 上使用“Docker Desktop”时遇到了类似的情况,并通过增加“Docker Desktop Preferences”中的 Docker 资源来克服...

所以,请尝试增加您的 Kubernetes 集群资源。

【讨论】:

以上是关于pod 没有在 kubernetes 中创建,但存在部署?的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes第七篇:Pod进阶Controller进阶Resource和Dashboard

Pods和Nodes

如何使用 Spring Boot 将来自 Google Secret Manager 的秘密作为环境变量注入 Kubernetes Pod?

精品k8s(kubernetes)的网络策略详networkpolicy实例精讲

8. K8s 资源部署

Kubernetes NFS 服务器占用 100% cpu