为了账号安全,请及时绑定邮箱和手机立即绑定

K8S 获取部署活跃度探测状态

K8S 获取部署活跃度探测状态

Go
慕妹3242003 2022-07-11 10:21:31
我们已经在我们的部署资源中定义了 K8s 的 liveness 和 readiness 探针(我们已经定义了 liveness ......),我们需要使用client-golib 来访问这个 liveness probe,我们该怎么做呢?client-go我已经用lib试过了https://github.com/kubernetes/client-go如下:client.Discovery().RESTClient().Get()我也尝试过使用go库,但没有在client.CoreV1(). 但是我确实找到service pod了等等。我在这里缺少什么?PodList, err := client.CoreV1().Pods("mynamespace").List(metav1.ListOptions{LabelSelector: "run=liveness-app"})最后,我需要根据部署中定义的 liveness probe 来获取 pod 的 liveness 状态。我的意思是生还是死
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

如何做到这一点取决于你想做什么。


部署

包含一个 PodTemplate ,Deployment用于创建每个副本。


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


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

    }

}

包含一些-information 和with的Status部分,也在上面的 Go 示例中进行了说明。使用您的自定义逻辑来使用此信息。Podconditions:ProbecontainerStatuses:restartCount:


每当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


查看完整回答
反对 回复 2022-07-11
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

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


查看完整回答
反对 回复 2022-07-11
  • 2 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号