【问题标题】:Quarantine pod and create a replacement隔离 pod 并创建替换
【发布时间】:2020-04-15 23:52:43
【问题描述】:

我有一个奇怪的环境,我目前无法将 k8s pod 日志写入日志服务(loggly、相扑等)。有时,其中一个 pod 在 prod 中开始出现问题,解决方法是删除该 pod 并替换它,由运营团队管理(我没有直接访问权限)。

我想做的是保存有问题的 pod,不再有流量路由到它并被控制器替换。这样我就可以挖掘 pod 和日志以确定发生了什么。

我在这里研究了标签:https://kubernetes.io/docs/concepts/configuration/overview/

重要的部分是这个

您可以操纵标签进行调试。因为 Kubernetes 控制器(例如 ReplicaSet)和服务匹配到 Pod 使用 选择器标签,从 Pod 中删除相关标签将停止它 被控制器考虑或被提供流量 一项服务。如果您删除现有 Pod 的标签,它的控制器 将创建一个新的 Pod 来代替它。这是一种有用的调试方法 以前在“隔离”环境中“活”的 Pod。到 以交互方式删除或添加标签,使用 kubectl label。

我已经进入并直接使用以下方法编辑了 pod:

kubectl edit <pod> 

然后完全删除标签部分并保存。

当我这样做时,尽管似乎什么也没发生。据我检查,吊舱仍然存在并且没有被替换:

kubectl get pods

它是否移动到我没有看到的地方? 删除标签是否应该像我期望的那样工作(控制器创建一个新的 pod 来代替它)?

任何帮助将不胜感激。谢谢。

编辑 1:

按照 mdaniel 的帖子中的建议从 pod 中删除或更改标签不会删除 pod 并启动替换。

我正在使用 Helm 进行部署,因此没有像示例中那样的运行标签,但我确实有服务选择器部分和 pod 标签设置,如下所示:

服务选择器 yaml 部分:

 selector:
    app.kubernetes.io/instance: foo
    app.kubernetes.io/name: bar

Pod 标签部分:

  labels:
    app.kubernetes.io/instance: foo
    app.kubernetes.io/name: bar
    controller-revision-hash: some-hash
    statefulset.kubernetes.io/pod-name: pod-name

我将 Pod Label 部分更改为:

  labels:
    app.kubernetes.io/instance: i-am-debugging-this-pod
    app.kubernetes.io/name: i-am-debugging-this-pod
    controller-revision-hash: some-hash
    statefulset.kubernetes.io/pod-name: pod-name

然后……什么都没有发生。吊舱只是不停地咕咕叫。看起来它应该工作,但是nada。

【问题讨论】:

标签: kubernetes kubernetes-pod


【解决方案1】:

两个答案。一个是你可以用你的准备探测来做到这一点。二,删除的 pod 日志无论如何都会保留一段时间,所以也许只使用那些?使用 -p 选项来 kubectl 日志。

【讨论】:

  • 或者,a 3rd answer,重新标记 Pod,使其标签不再符合Service selector 标准,但保持原样
  • 我试过 kubectl get logs $podname --previous 但没有任何东西。我会看看准备探测。
猜你喜欢
  • 2020-08-21
  • 1970-01-01
  • 2021-10-06
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多