我们在部署资源中定义了K8的活动性和就绪性探针(我们已经定义了活动性...),我们需要client-go
lib才能访问此活动性探针,如何我们这样做吗?
我已经尝试过client-go
lib
https://github.com/kubernetes/client-go
如下:
client.Discovery().RESTClient().Get()
我也尝试过使用go库,但没有在client.CoreV1()
上找到任何 deployment 属性。但是我确实找到了service
pod
等。我在这里想念什么?
PodList, err := client.CoreV1().Pods("mynamespace").List(metav1.ListOptions{LabelSelector: "run=liveness-app"})
最后,我需要根据部署中定义的活动性探针获取吊舱活动性状态。我的意思是生或死
答案 0 :(得分:2)
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
答案 1 :(得分:1)
如何执行此操作取决于您要执行的操作。
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
的选择器中相同的标签列出从部署中创建的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
}
}
Status
的{{1}}部分包含Pod
和一些conditions:
信息,以及Probe
和containerStatuses:
,在Go语言中也有说明上面的例子。使用您的自定义逻辑来使用此信息。
只要 livenessProbe 失败,便会重新启动Pod。
restartCount:
Pod Status