微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检查 Kubernetes 作业是否正在运行

如何解决如何检查 Kubernetes 作业是否正在运行

我们使用 client-go 与我们的 kubernetes 集群(api 版本:batchv1/appv1/corev1)通信,我们主要使用三种类型的资源:Job、Deployment 和 Service。

我的问题是我们如何判断作业或部署何时准备就绪并处于运行状态?

对于A Job,我们发现当batchV1.Spec.Active > 0时,该Job控制的pod可能处于pending状态或running状态。那么要检查一个kubernetes Job的pods是否都处于running状态,是不是要枚举Kubernetes Job的每个pods并检查它们都处于running状态,那么Job就准备好运行了?有没有简单的方法来做到这一点?

kubernetes 部署和服务怎么样?有没有简单的方法来检查部署是否准备就绪?

解决方法

要检查部署状态,您需要检查此部署创建的 pod 状态。 例子:

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。 豆荚

您可以使用与部署选择器中相同的标签列出从部署创建的 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
    }
}

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

每当 livenessProbe 失败时,Pod 就会重新启动。

Pod 状态示例:

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

希望能帮助您解决问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。