探针的使用
kubectl edit deploy -n kube-system coredns
livenessprobe 的使用
livenessProbe:
failureThreshold: 5
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 60
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
readinessProbe
readinessProbe:
failureThreshold: 3
httpGet:
path: /ready
port: 8181
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
kubectl edit po nginx
kubectl describe po nginx-daemon
最下面有容器启动时候相关日志
容器探针启动实验1-启动探针的使用-startupprobe
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 20s default-scheduler Successfully assigned default/my-pod1 to ha2.example.local
Normal Pulled 20s kubelet Container image "nginx:1.7.9" already present on machine
Normal Created 20s kubelet Created container nginx
Normal Started 20s kubelet Started container nginx
Warning Unhealthy 4s (x2 over 14s) kubelet Startup probe failed: HTTP probe failed with statuscode: 404
[root@kubeadm-master1 test]# kubectl get pod
NAME READY STATUS RESTARTS AGE
client 1/1 Running 0 48d
my-pod 1/1 Running 0 7d23h
my-pod1 0/1 Running 0 37s
net-test1 1/1 Running 133 55d
net-test2 1/1 Running 13 55d
nginx-deployment-67dfd6c8f9-5s6nz 1/1 Running 1 55d
tomcat-deployment-6c44f58b47-4pz6d 1/1 Running 1 55d
[root@kubeadm-master1 test]# kubectl get pod
NAME READY STATUS RESTARTS AGE
client 1/1 Running 0 48d
my-pod 1/1 Running 0 7d23h
my-pod1 0/1 Running 0 42s
net-test1 1/1 Running 133 55d
net-test2 1/1 Running 13 55d
nginx-deployment-67dfd6c8f9-5s6nz 1/1 Running 1 55d
tomcat-deployment-6c44f58b47-4pz6d 1/1 Running 1 55d
[root@kubeadm-master1 test]# cat nginx-po.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod1
labels:
type: app
test: "1.0.0"
namespace: default
spec:
containers:
- name: nginx
image: nginx:1.7.9
imagePullPolicy: IfNotPresent
command:
- nginx
- -g
- 'daemon off;'
workingDir: /usr/share/nginx/html
ports:
- name: http
containerPort: 80
protocol: TCP
env:
- name: JVM_OPTS
value: '-Xms128m -Xmx128m'
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
startupProbe:
httpGet:
path: /api/path
port: 80
failureThreshold: 3
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
restartPolicy: OnFailure
Liveness Probes 和 Readiness Probes
用于检查容器是否还在运行。如果 liveness 探针失败,Kubernetes 将杀死容器,并根据其重启策略来处理。
用于检查容器是否已经准备好接收流量。如果 readiness 探针失败,Kubernetes 将不会将流量路由到该容器。
定义了一个 startupProbe,它在容器启动后通过 HTTP GET 请求检查 /api/path 端点。现在我们将添加 livenessProbe 和 readinessProbe。
一个 livenessProbe 可以如下定义:
livenessProbe:
httpGet:
path: /api/health
port: 80
initialDelaySeconds: 30
periodSeconds: 10
这个 livenessProbe 会在容器启动后的30秒开始工作,每10秒检查一次 /api/health 端点。
一个 readinessProbe 可以如下定义:
readinessProbe:
httpGet:
path: /api/ready
port: 80
initialDelaySeconds: 5
periodSeconds: 5
这个 readinessProbe 会在容器启动后的5秒开始工作,每5秒检查一次 /api/ready 端点。
演示
[root@kubeadm-master1 test]# cat liveness.yml
apiVersion: v1
kind: Pod
metadata:
name: my-pod1
labels:
type: app
test: "1.0.0"
namespace: default
spec:
containers:
- name: nginx
image: nginx:1.7.9
imagePullPolicy: IfNotPresent
command:
- nginx
- -g
- 'daemon off;'
workingDir: /usr/share/nginx/html
ports:
- name: http
containerPort: 80
protocol: TCP
env:
- name: JVM_OPTS
value: '-Xms128m -Xmx128m'
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
startupProbe:
httpGet:
path: /api/path
port: 80
failureThreshold: 3
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
livenessProbe:
httpGet:
path: /api/health
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /api/ready
port: 80
initialDelaySeconds: 5
periodSeconds: 5
restartPolicy: OnFailure
State: Running
Started: Thu, 15 Feb 2024 15:15:19 +0800
Ready: False
Restart Count: 0
Limits:
cpu: 200m
memory: 256Mi
Requests:
cpu: 100m
memory: 128Mi
Liveness: http-get http://:80/api/health delay=30s timeout=1s period=10s #success=1 #failure=3
Readiness: http-get http://:80/api/ready delay=5s timeout=1s period=5s #success=1 #failure=3
Startup: http-get http://:80/api/path delay=0s timeout=5s period=10s #success=1 #failure=3
Environment:
JVM_OPTS: -Xms128m -Xmx128m
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-75cq9 (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
default-token-75cq9:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-75cq9
Optional: false
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 19s default-scheduler Successfully assigned default/my-pod1 to ha2.example.local
Normal Pulled 19s kubelet Container image "nginx:1.7.9" already present on machine
Normal Created 19s kubelet Created container nginx
Normal Started 19s kubelet Started container nginx
Warning Unhealthy 2s (x2 over 12s) kubelet Startup probe failed: HTTP probe failed with statuscode: 404
若存在started.html 则进行