簡體   English   中英

K8S 獲取部署 liveness 探測狀態

[英]K8S Get deployment liveness probe status

我們已經在我們的部署資源中定義了 K8s 活性和就緒探測器(我們已經拒絕了那里的活性......),我們需要使用client-go lib 來訪問這個活性探測器,我們該怎么做?

我已經用client-go lib 試過了

https://github.com/kube.netes/client-go

如下:

client.Discovery().RESTClient().Get()

我還嘗試使用 go 庫,但沒有在 client.CoreV1 client.CoreV1()上找到任何部署屬性。 但是我確實找到了service pod等。我在這里缺少什么?

PodList, err:= client.CoreV1().Pods("mynamespace").List(metav1.ListOptions{LabelSelector: "run=liveness-app"})

最后,我需要根據部署中定義的活動探測器獲取 pod 活動狀態。 我是說活着還是死了

如何做到這一點取決於你想做什么。

部署

Deployment包含一個 PodTemplate,用於創建每個副本。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myapp
  name: myapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: myimage
        name: myapp
        livenessProbe:
          # your desired liveness check

您可以使用 client-go 從部署中獲取所需的 PodTemplate

例如:

clientset := kubernetes.NewForConfigOrDie(config)
deploymentClient := clientset.AppsV1().Deployments("mynamespace")
deployment, err := deploymentClient.Get("myapp", metav1.GetOptions{})

for _, container := range deployment.Spec.Template.Spec.Containers {
    container.LivenessProbe // add your logic
}

注意: Deployment僅包含所需的 PodTemplate,因此要查看任何狀態,您必須查看已創建的 Pod。

豆莢

您可以使用與Deployment選擇器中相同的標簽列出從 deployment 創建的 Pod。

Pod 列表示例:

pods, err := clientset.CoreV1().Pods(namespace).List(metav1.ListOptions{
    LabelSelector: "app=myapp",
})

// check the status for the pods - to see Probe status
for _, pod := range pods.Items {
    pod.Status.Conditions // use your custom logic here

    for _, container := range pod.Status.ContainerStatuses {
        container.RestartCount // use this number in your logic
    }
}

PodStatus部分包含conditions: with some Probe -information 和containerStatuses: with restartCount: ,也在上面的 Go 示例中說明。 使用您的自定義邏輯來使用此信息。

只要livenessProbe失敗,Pod 就會重新啟動。

Pod Status示例

status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2020-09-15T07:17:25Z"
    status: "True"
    type: Initialized
  containerStatuses:
  - containerID: docker://25b28170c8cec18ca3af0e9c792620a3edaf36aed02849d08c56b78610dec31b
    image: myimage
    imageID: docker-pullable://myimage@sha256:a432251b2674d24858f72b1392033e0d7a79786425555714d8e9a656505fa08c
    name: myapp
    restartCount: 0
pods, err := client.CoreV1().Pods("").List(meta_v1.ListOptions{})
if err != nil {
    log.Fatal(err)
}

for _, pod := range pods.Items {
    for _, container := range pod.Spec.Containers {
        fmt.Println(container.LivenessProbe)
        fmt.Println(container.ReadinessProbe)
    }
}

您可以遍歷 pod.Items 以獲取容器 LivenessProbe 和 ReadinessProbe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM