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 <replicaset_name>
【参考方案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 <deployment-name>
会怎样。
如果您要部署的部署已正确编写和应用,您应该会看到至少尝试创建自己的 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
如何使用 Spring Boot 将来自 Google Secret Manager 的秘密作为环境变量注入 Kubernetes Pod?