kubectl 推出状态后获取新 pod 名称之一 | kubectl get pods --field-selector 返回终止 pod

2024-03-03

问题是在部署新部署后

kubectl apply -f deployment.yml

(假设使用一个副本进行部署)

Kubernetes 将创建第二个 pod 并关闭前一个 pod - 到目前为止一切正常。

但是在 kubectl apply 之后,我想在 CI/CD 中检测部署是否成功,并且在任何情况下(无论推出成功还是失败)从新部署的 Pod 之一获取日志,以便在 CI 中提供尽可能多的信息/CD 日志以确定出了什么问题。

所以我正在使用

kubectl rollout status deployment deployment-name

正在等待部署推出。但紧接着您将看到两个 Pod,一个处于“正在运行”状态,另一个处于“正在终止”状态。

现在有问题的部分: 通常我会使用类似的方法

kubectl get pods --selector=app=deployment-name --output=jsonpath='{.items[*].metadata.name}' --field-selector=status.phase=Running

但不幸的是,它将返回两个 pod 的名称(“正在运行”和“正在终止”),并用空格分隔。

现在我也尝试过

kubectl get pods --selector=app=deployment-name --output=jsonpath='{.items[*].metadata.name}' --field-selector=status.phase=Running,status.phase!=Terminating

根据文件:

但由于某种原因,这将返回完全相同的结果,两个 Pod 都在运行和终止。

问题是:

如何从结果中正确排除 TERMINATING pod?


自 2018 年以来的已知问题。尚未解决。

请参阅当通过 --field-selector 或 -o jsonpath 仅选择处于 Running 状态的 pod 时,Kubectl 返回各种状态的 pod https://github.com/kubernetes/kubectl/issues/450更多细节。

简而言之:没有正常、简短、足够的一行命令可以完成您想要的操作。

背后的原因 https://github.com/kubernetes/kubectl/issues/450#issuecomment-448153487:

这看起来不是一个错误。 kubectl get pods 输出 STATUS 列不存在 显示状态.阶段。 kubectl get pods 显示 PodList 的表格格式 对象并使用 status.containerStatuses states 来显示 STATUS 列数据。

Pod 阶段有效状态有挂起、运行、成功、失败和 未知。从本文档中,“正在运行”状态取决于 '重启策略'。

Jsonpath 适用于“PodList”对象,而不适用于 kubectl 输出。 status.containerStatuses 给出 pod 容器是否正在运行。 字段选择器因 Kubernetes 资源类型而异。 pod 字段选择器不支持 status.containerStatuses。

解决方法:

1. kubectl get pods | grep Running

2. kubectl get pods -o jsonpath='{.items[*].status.containerStatuses[*].state.running},{.items[*].metadata.name}' --field-selector=status.phase==Running | sed 's/ /\n/' | grep startedAt | awk -F',' '{print $2}'

3. (source https://github.com/kubernetes/kubectl/issues/450#issuecomment-706677565) kubectl get pods --field-selector=status.phase=Running --template {{range .items}}{{ if not .metadata.deletionTimestamp }}{{.metadata.name}}{{"\n"}}{{end}}{{end}}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubectl 推出状态后获取新 pod 名称之一 | kubectl get pods --field-selector 返回终止 pod 的相关文章

  • 如何让 celery Worker 停止接收新任务 (Kubernetes)

    因此 我们有一个 kubernetes 集群 运行一些带有 celery 工作线程的 pod 我们使用 python3 6 来运行这些工作程序 celery 版本是 3 1 2 我知道 真的很旧 我们正在努力升级它 我们还设置了一些自动缩放
  • Jenkins 服务始终在 minikube 上挂起

    我安装了minikube在本地 仪表板是 192 168 99 100 30000 我通过 helm 安装了 Jenkins helm install stable jenkins 然后服务始终挂起 kubectl get services
  • 删除所有 kubernetes 命名空间中所有 pod 的命令

    查看文档后 有一个 API 调用可以删除单个 pod 但是有没有办法删除all所有命名空间中的 Pod 没有命令可以完全按照您的要求进行操作 以下是一些势均力敌的比赛 运行任何这些命令之前请务必小心 如果您使用多个集群 请确保您连接到正确的
  • 从 kubectl 输出显示失败的 pod

    我想写一个包装kubectl仅显示失败的 Pod 这意味着它应该只显示 Ready 列值不相同的项目 即0 1 0 2 1 2 2 3 etc kubectl get pods all namespaces NAMESPACE NAME R
  • Istio 直接 Pod 到 Pod 通信

    我在使用 Istio 部署的 Pod 与 Pod 进行通信时遇到问题 我实际上需要它与 Istio 合作进行 Hazelcast 发现 https github com hazelcast hazelcast kubernetes issu
  • Pod 清单写入 Deployment Manifest

    在 Kubernetes 中 将正在运行的 pod 清单转换为具有 x 个副本的部署的简单方法是什么 我尝试获取清单 k get po xyz o yaml gt po1 yaml 然后编辑 yaml 并与部署清单匹配 但这似乎并不容易 我
  • 通过流式传输将分段文件上传到 Amazon S3 时内存使用率过高?

    我的 Java Spring 应用程序中的以下方法直接将文件流式传输并上传到 Amazon S3 存储桶 我研究过 使用流将使上传大文件 对于我的用例 gt 100MB 视频 更加内存有效 当使用 25MB 文件测试该方法时 Kuberne
  • 检查线程状态,同时使其处于等待状态

    我想知道是否可以检查线程的状态 该线程可能处于可等待状态 但不一定如此 如果它处于可等待状态 我想将其保留在该状态 基本上 如何在不更改线程 可等待 状态的情况下检查线程的状态 通过等待 我的意思是如果我调用 wait pid 它会正确返回
  • kubernetes POD IP什么时候会改变?

    我正在尝试将一个整体应用程序移植到 k8s pod 理论上 Pod 被认为是短暂的 建议使用服务概念来提供静态 IP 但到目前为止 在我的测试中 我还没有看到 POD IP 被更改 那么现在的问题是 k8s 什么时候会为我的 POD 分配一
  • 一个持久卷是否可以被多个持久卷声明消耗?

    假设一个 PV 可以被多个 PVC 消耗并且每个 pod 实例需要一个 PVC 绑定 这样的假设是否正确 我这么问是因为我创建了一个 PV 然后创建了一个具有不同尺寸要求的 PVC 例如 kind PersistentVolume apiV
  • 将代码/文件直接注入 Google Cloud Engine 上的 Kubernetes 容器中

    如何将代码 文件直接注入 Google Cloud Engine 上的 Kubernetes 容器中 类似于使用 Docker 挂载主机文件 目录的方式 例如 docker run d name nginx p 443 443 v ngin
  • Kubernetes ConfigMap 大小限制

    Though resourceQuotas可能会限制命名空间中的配置映射的数量 是否有任何这样的选项来限制单个配置映射的大小 我不喜欢某些用户开始上传大型文本文件作为配置映射 ConfigMap etcd 支持的最大大小是多少 如果 etc
  • 从头开始使用映像部署无法启动

    我正在使用以下内容构建图像Dockerfile FROM golang 1 19 2 bullseye as builder COPY src src WORKDIR src RUN CGO ENABLED 1 go build race
  • Jenkinsfile 泊坞窗

    我正在 docker 容器内的 GCE 上运行一个 jenkins 实例 并希望从此 Jenkinsfile 和 Github 执行多分支管道 我正在使用GCE詹金斯 https cloud google com solutions con
  • prometheus 节点实例列表

    是否可以使用 prometheus 获取节点实例列表 我有一个节点导出器 但我没有看到这样的指标 我们应该添加一个新的运算符吗 您可以使用kube 状态指标 https github com kubernetes kube state me
  • Grafana/prometheus 中没有 kafka 指标

    我成功部署了 Helm Chart普罗米修斯操作员 https github com coreos prometheus operator tree master helm prometheus operator kube 普罗米修斯 ht
  • kubernetes 集群中 django 应用程序的 Nginx 配置

    我在为部署在 kubernetes 中的 django 应用程序创建 nginx 配置文件时遇到困难 Nginx 和 app 是同一集群中的两个独立容器 据我了解 容器可以通过 127 0 0 1 XX 和主机名相互通信 我为此使用 min
  • 减法进位标志

    我正在使用 MASM32 有了这个代码 mov eax 5 sub eax 10 CF 状态标志将被设置 但使用我的铅笔和纸 我实际上看到 MSB 没有任何进位 是的 我知道从较少的数字中减去大的数字集CF 但我想知道为什么 因为使用这段代
  • Kubernetes 集群自动缩放器似乎不适用于 GKE?

    我定义了一个节点池 最小实例设置为 1 最大实例设置为 5 并启用了自动缩放 但它似乎并没有缩小规模 我已经封锁了一个节点 已经过去12个多小时了 没有待处理的 Pod 删除节点不会减少我自己的部署的副本数量 相关节点上运行以下 pod f
  • 如何使用 Prometheus Alert Manager 在 Kubernetes 中触发警报

    我在集群中设置了 kube prometheus https github com coreos prometheus operator tree master contrib kube prometheus https github co

随机推荐