Kubernetes api没有显示错误pod状态



我使用Kubernetes API C#库尝试了ListPodForAllNamespaces((。使用Status.Phase属性获取pod的当前状态。当我尝试kubectl comman获取pod状态时,它显示为crashloop和error状态。

kubectl get pods -n api
NAME                                 READY   STATUS             RESTARTS   AGE
test-web-api-78777-2zlwl             1/1     Running            0          9m8s
jobapp1-878787-knt46                 0/1     CrashLoopBackOff   5          4m53s
jobapp2-878787-knt46                 0/1     Error              5          4m53s

但如果pod状态为错误状态,则Kubernetes api显示为正在运行。下面是我的代码

var config = KubernetesClientConfiguration.InClusterConfig();//for local testing BuildDefaultConfig && for cluster testing InClusterConfig
var client = new Kubernetes(config);
var namespaces = client.ListPodForAllNamespaces();
foreach (var ns in namespaces.Items){
Console.WriteLine(ns.Metadata.Name +" status - "+ns.Status.Phase);
}

输出是

test-web-api-78777-2zlwl状态-运行
jobapp1-878787-knt46状态-运行
jobapp2-878787-knt46状态-运行

您的kubectl命令和C#kubernetes api都不正确。

您可以看到最后两个pod重新启动了5次。在5次重启过程中,它们中的每一个都处于CCD_ 3状态一段时间。

当您运行C#api时,所有的pod实际上都处于Running阶段。

如果您在等待一段时间后运行C#api,您会发现它们不在Running阶段。

尝试

kubectl describe [-n namespace] pod [pod_id]

你可能会看到一些东西,告诉你为什么吊舱处于坠毁状态。。您还可以在谷歌云控制台中检查是否有任何报告。

如果在查询状态的时候,这个Main Status可能仍然显示正在运行,稍后它可能会变成其他东西,因此为了避免这个问题,我建议在C#中使用K8client中的pod对象(类型:V1PodList(的属性,如:

pod.Status.Conditions.Any(x=>x.Status== "False")

这将实际给出4个条件的状态,即Initialized ,Ready,ContainersReady & PodScheduled。对于一个成功运行的pod,所有4个都将为true,否则至少有一个将为false。

相关内容

最新更新