如何检查 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
希望可以帮助您解决问题。
我们正在使用 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
希望可以帮助您解决问题。