问题描述
突然间 StatefulSet 认为有 5 个准备好的副本,如果是 6。当我查看 pod 状态时,所有 6 个 pod 都准备好了,所有的准备检查都通过了 1/1
。
现在我正在尝试根据 StatefulSet 查找显示哪个 pod 不健康的日志或状态,以便我可以进一步调试。
我在哪里可以找到 StatefulSet 的信息或日志,可以告诉我哪个 Pod 不健康?我已经检查了 describe pods
和 describe statefulset
的输出,但没有一个显示哪个 Pod 不健康。
解决方法
假设您创建了下一个 statefulset:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
user: anurag
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
user: anurag # has to match .spec.template.metadata.labels
serviceName: "nginx"
replicas: 6 # by default is 1
template:
metadata:
labels:
user: anurag # has to match .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "standard"
resources:
requests:
storage: 1Gi
结果是:
kubectl get StatefulSet web -o wide
NAME READY AGE CONTAINERS IMAGES
web 6/6 8m31s nginx k8s.gcr.io/nginx-slim:0.8
我们还可以检查StatefulSet
的状态:
kubectl get statefulset web -o yaml
status:
collisionCount: 0
currentReplicas: 6
currentRevision: web-599978b754
observedGeneration: 1
readyReplicas: 6
replicas: 6
updateRevision: web-599978b754
updatedReplicas: 6
根据 Debugging a StatefulSet,您可以使用标签列出属于当前 StatefulSet 的所有 pod。
$ kubectl get pods -l user=anurag
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 13m
web-1 1/1 Running 0 12m
web-2 1/1 Running 0 12m
web-3 1/1 Running 0 12m
web-4 1/1 Running 0 12m
web-5 1/1 Running 0 11m
此时,如果您的任何 Pod 不可用,您肯定会看到。下一个调试是 Debug Pods and ReplicationControllers,包括检查您是否有足够的资源来启动所有这些 pod 等等。
描述有问题的 pod (kubectl describe pod web-0
) 应该会在事件部分的最后告诉您为什么会发生这种情况。
例如,如果您将在 statefulset components 的本示例中使用 origin yaml - 您将遇到错误并且您的任何 Pod 都将启动并运行。 (原因是 storageClassName: "my-storage-class"
)
确切的错误和对正在发生的事情的理解来自描述有问题的 pod……这就是它的工作原理。
kubectl describe pod web-0
vents:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 31s (x2 over 31s) default-scheduler 0/3 nodes are available: 3 pod has unbound immediate PersistentVolumeClaims.