如何检查 Kubernetes 作业是否 运行

How to Check If A Kubernetes Job Is Running

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

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

对于A Job,我们发现当batchV1.Spec.Active > 0时,这个job控制的pod可能处于pending状态或者运行状态。因此,要检查一个 kubernetes Job 的 pods 是否都处于 运行 状态,我们是否必须枚举 Kubernetes Job 的每个 pods 并检查它们是否都处于 运行 状态,那么工作就绪并且运行?有简单的方法吗?

那么 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,因此要查看任何状态,您必须查看已创建的 Pods。 Pods

您可以使用与 Deployment 选择器中相同的标签列出从 Deployment 创建的 Pods。

Pods的示例列表:

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 部分包含 conditions: with some Probe-information 和 containerStatuses: with 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

希望可以帮助您解决问题。