我有一个创建pod的作业,我可以像这样跟踪它的日志:
kubectl logs job/migration --follow
然而,由于这是一个作业,因此pod应该运行、完成然后终止。如果我运行上面的命令,我可以看到最后一次运行pod的日志,但kubectl
在打印出所有日志后退出,可能是因为它试图跟随的所有pod都已终止。
我的工作有这样的注释:
annotations:
helm.sh/hook: post-install,post-upgrade
这样,当我运行helm install ...
时,它将导致Job创建另一个pod,该pod再次运行并按预期终止。
我的问题是,是否可以构造一个kubctl logs ...
命令,以便我可以跟踪未来迁移pod的日志?这样我就可以在一个终端中跟踪命令,然后在另一个终端运行helm install
,然后我会立即在我的终端中看到新pod的日志?
您也可以使用stern。
stern --namespace example migration
或stern --namespace -l component=migration
将分别显示名称中包含单词"migration"的所有当前和未来pod的所有日志。标签。
该工具打印出所有pod/容器的所有日志,并与(部分(名称相匹配,因此您也可以使用stern --namespace example mig
。您还可以包含/排除某些容器,针对所有命名空间运行,并获得非常好的着色模式来区分不同的pod/容器。
我认为解决方案是使用xargs
。
为了实现这一点,我们需要添加-o name
来只获取现有pod和新pod的名称,然后将其管道传输到xargs中,并在它们发生时遵循它们的日志。
kubectl get pods -n example -l component=migration --watch -o name
| xargs kubectl logs -n example --follow
欢迎改进。