我正在使用Kubernetes-client java客户端在Kubernetes集群上创建Deployments。这是代码
Deployment deployment = new DeploymentBuilder()
.withNewMetadata()
.withName("first-deployment")
.endMetadata()
.withNewSpec()
.withReplicas(3)
.withNewTemplate()
.withNewMetadata()
.addToLabels(namespaceID, "hello-world-example")
.endMetadata()
.withNewSpec()
.addNewContainer()
.withName("nginx-one")
.withImage("nginx")
.addNewPort()
.withContainerPort(80)
.endPort()
.withResources(resourceRequirements)
.endContainer()
.endSpec()
.endTemplate()
.endSpec()
.build();
deployment = client.extensions().deployments().inNamespace(namespace).create(deployment);
我添加了3分钟的等待时间,然后测试了pod的状态
PodList podList = client.pods().withLabel(namespaceID, "hello-world-example").list();
System.out.println("Number of pods " + podList.getItems().size());
for (Pod pod : podList.getItems()) {
System.out.println("Name " + pod.getMetadata().getName()
+ " Status " + pod.getStatus().getPhase()
+ " Reason " + pod.getStatus().getReason()
+ " Containers " + pod.getSpec().getContainers().get(0).getResources().getLimits());
}
返回以下sttaus
Name first-deployment-2418943216-9915m Status Pending Reason null Containers null
Name first-deployment-2418943216-fnk21 Status Pending Reason null Containers null
Name first-deployment-2418943216-zb5hr Status Pending Reason null Containers null
但是,如果我得到kubectl get pods --all-namespaces
,则从命令行开始。它将pod状态返回为running。我使用正确的API吗?我错过了什么?
答案 0 :(得分:2)
也许更好的方法来检查这是一个循环和内部睡眠循环并持续检查状态,直到所有pod正在运行。我做了类似的事情,通过检查状态来检查所有必需的pod是否都已启动。 但是,在进行此类检查之前,您可能还需要考虑在pod上添加活动性和就绪性探测。此处提供了其他详细信息。
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
答案 1 :(得分:1)
不确定此问题是否仍然存在,但我建议使用以下内容:https://github.com/kubernetes/helm/blob/d790f7d843182f1c126cfa64989ffdd4e9583747/pkg/kube/wait.go#L174
它循环部署,并等待清单中的最大可用空间。