登录
首页 >  Golang >  Go问答

获取 Pod 中容器状态的方法 - Kubernetes `client-go`

来源:stackoverflow

时间:2024-03-27 12:21:33 395浏览 收藏

在 Kubernetes 中,观察容器状态并在其发生变化时触发事件至关重要。本文探讨了使用 `client-go` 库的方法来获取特定 pod 中容器的状态,例如完成或崩溃。通过创建异步事件侦听器,可以针对特定容器的更新事件进行监听,从而仅接收与该容器相关的信息,有效管理多容器 pod 中的事件处理。

问题内容

遵循此和此后,如何观察 pod 中的容器状态(如果容器崩溃、完成等)并在 pod 中容器状态发生变化时触发事件?

假设我有一个带有 2 个容器的 pod:

apiversion: v1
kind: pod
metadata:
  name: busybox
  labels:
    app: busybox
spec:
  containers:
  - image: busybox
    name: busybox5
    command:
      - sleep
      - "5"
    imagepullpolicy: ifnotpresent
  - image: busybox
    name: busybox50
    command:
      - sleep
      - "50"
    imagepullpolicy: ifnotpresent
  restartpolicy: never

我希望在 busybox5 容器完成执行时收到通知,而不是关于 busybox50。我使用通知者做了如下的事情:

UpdateFunc: func(oldObj, obj interface{}) {
            mObj := obj.(v1.Object)
            log.Printf("%s: Updated", mObj.GetName())
        },

这很简单。但它在多容器 pod 中如何工作呢?如果我只想在 pod 中处理有关 busybox5 容器的事件怎么办?我怎样才能在 go 中实现这一目标?


解决方案


我认为您需要客户举报人。这是关于它们的一个很好的教程:https://firehydrant.io/blog/stay-informed-with-kubernetes-informers/

您可以为运行容器的 Pod 创建一个异步事件侦听器,然后当其中一个容器状态发生更改时,Pod 状态也会发生更改(已更新,因此您应该侦听更新事件)。 因此,您从 pod 中获取了更新事件,毕竟您需要获取 Pod cointainers。

我希望你正在寻找这个:)

今天关于《获取 Pod 中容器状态的方法 - Kubernetes `client-go`》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>