bash 可以使用 kubectl get pods 运行 按顺序查看日志吗?

can bash use kubectl get pods run a log watch sequentially?

注意:与 Kubernetes 相比,这更多是 bash/shell 脚本问题。

所以我有一个 pod 副本,所以 kubectl get pods 只会 return 一个活动副本。

从概念上讲,我想做的很简单。我想和观察者一起做一个 kubectl logs my-pod-nnn1,但是当那个 pod 终止时,我想流式传输一条消息“my-pod-nnn1 终止,现在记录 my-pod-nnn2”,然后流式传输新日志。这是一个相当复杂的过程(对我来说),我想知道我可以采取什么方法,以及是否可以(或者可能不需要)使用某种多线程(我还没有这样做)。谢谢

作为您需要做的事情的粗略概述,如果我正确阅读了您的需求

slm-log-continue() {
  while true ; do
    PODLINE=$(kubectl get pod | grep regional-wkspce | grep Running | awk '/^regional-wkspce-.*/{print }')
    if [[ -z "$PODLINE" ]]; then
        echo no pod currently active, waiting 5 seconds ...
        sleep 5
    else
        echo "----- logging for $PODLINE -----"
        kubectl logs -f $PODLINE
        echo "----- pod $PODLINE disconnected -----"
    fi
  done
}

假设 kubectl 日志在 pod 完成后终止并且它收到了日志的结尾(我没有测试过),类似的东西应该可以做你需要的,而不需要任何花哨的多线程。它只会使用针对 get pods 输出的任何正则表达式找到当前 pod,提取名称,然后吐出日志,直到它消失。