【深入pod】

在这里插入图片描述

1、Pod配置文件


apiVersion: v1  #api文档版本
kind: Pod  #资源对象类型,也可以配置为像Dep loyment、StatefulSet.这类的对象
metadata: #Pod用关的元城据,用于描述Pod的数据name: nginx-po  #Pod的名称labels:  #定义Pod的标签type: app  #自定义label标签,名字为type,值为apptest: l.0.0  #自定义label标签,描述Pod版本写namespace: 'default'  #命名空间的配間
spec:  #期望Pod按照这里面的描述进行创建containers:  #对于Pod中的容器描述- name: nginx  #容器的名称image: nginx:1.20   #指定容器的镜像imagePullPolicy: IfNotPresent    #镜像拉取策略,指定如果本抛有就用本地的,I果没有就拉取远程的startupProbe:  #应用启动探针配置httpGet:   #探测方式,基于http请求探测path: /index.html #http请求路循port: 80  #请求端口failureThreshold: 3  #失败多少次才算真止失败periodSeconds: 10  #间隔时间successThreshold: 1  #多少次监测成功算成功timeoutSeconds: 5  #请求的超时时间command:  #指定容器眉动时执行的偷令- nginx- -g- 'daemon off;'    #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    #限制cpu最少使用0.1个核心memory: 128Mi  #限制内存最少使用128兆limits:    #最多可以用多少资源cpu: 200m    #限制cpu最多使用0.2个核心memory: 256Mi   #限削最多使用256兆restartPolicy: OnFailure  # 重启策略,只有失败的情况才会重启

2、Pod探针

2.1 探针的类型

2.1.1 StartupProbe 启动探针

k8s v1.16版本新增的深针,用于判新应用程序是否已经启动了。

当配置了startupProbe后,会先禁用其他探针,直到startupProbe成功后,其他探针才会继续。

作用:由于有时候不准确预估应用一定是多长时间启动成功,因此配置另外两种方式不方便配置初始化时长来检测。而配置了statupProbe后,只有在应用启动成功了,才会执行另外两种探针,可以更加方便的结合使用另外两种探针使用。

  • 这个启动探针需要排它性,这个如果还未成功,剩下两个探针是关闭状态
startupProbe:httpGet:path: /api/startupport: 80

2.1.2 LivenessProbe 重启探针

用于探测容器中的应用是否运行,如果深测失败,kubelet会根据配置的重启策路进行重启,若没有配置,默认就认为容器启动成功。不会执行重启策路。

  • 存在问题:多长时间去检测应用,如果设置10s,应用正好是11s启动,那么在第10s的时候,应用还没启起来,又会去重启pod。
livenessProbe:failureThreshold: 5httpGet:path: /healthport: 8080scheme: HTTPinitialDelaySeconds: 60penodSeconds: 10successThreshold: 1 timeoutSeconds: 2  

2.1.3 ReadinessProbe 就绪探针

用于探测容器内的程序是否健康,它的返回值如果返回success,那么就认为该容器已经完全启动,并且该容器是可以接收外部流量的。

  • 存在问题:间隔多长时间以后去检测,启动时间长,应用初始化时间长,我么你在启动的时候有没有必要去检测这个服务启动完?
readinessProbe:failureThreshold: 3 #错误次数httpGet:path: /ready  #路径port: 8181scheme: HTTPperiodSeconds: 10 #间隔时间successThreshold: 1timeoutSeconds: 2  

2.2 探测方式

2.2.1 ExecAction 通过命令的方式检测

在容器内部执行一个命令,如果返回值为0,则任务容器是健康的。如果返回值不是0,则表明启动失败。(使用场景:查看文件的场景)

livenessProbe:exec:command:  # 执行什么命令- cat- /health

2.2.2 TCPSocketAction 通过tcp检测端口方式检测

通过tcp连接监测容器内端口是否开放,如果开放则证明该容器健康。(使用场景:nginx服务)

livenessProbe:tcpSocket:port: 80

2.2.3 HTTPGetAction 通过http请求方式检测

生产环境用的较多的方式,发送HTTP请求到容器内的应用程序,如果按口返回的状态码在200~400之间。则认为容器健康。(使用场景:Java应用)

livenessProbe:failureThreshold: 5httpGet:path: /health  # 请求路径port: 8080scheme: HTTPhttpHeaders:  # 请求头- name: xxxvalue: xxx

2.3 参数配置

initialDelaySeconds: 60  # 初始化时间,只有在这个时间之后LivenessProbe 或者 ReadinessProbe才会执行。
timeoutSeconds: 2  # 超时时间,不管使用命令行、tcp或者http,超过这个时间就算失败。
periodSeconds: 5  # 监测间隔时间,当上一次执行失败后,间隔多久再进行一次执行。
successThreshold: 1  # 成功阈值:检查1次成功就表示成功
failureThreshold: 2  # 失败阈值:监测失败2次就表示失败

2.4 探针的使用应用

2.4.1 StartupProbe的使用

2.4.1.1 使用http请求的探测方式检测pod

使用上文pod配置文件夹中的配置,配置中包含了StartupProbe启动探针,使用http请求的方式检测。因为/index.html这个文件是存在的,故创建pod是可以正常启动。

在这里插入图片描述

[root@k8s-master ~]# kubectl create  -f nginx-po.yml
pod/nginx-po created
[root@k8s-master ~]# kubectl describe po  nginx-po
Name:             nginx-po
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-node-02/10.10.10.113
Start Time:       Fri, 23 Feb 2024 00:09:33 +0800
Labels:           test=l.0.0type=app
Annotations:      <none>
Status:           Running
IP:               10.2.1.13
IPs:IP:  10.2.1.13
Containers:nginx:Container ID:  docker://39d108ab9c2da1414af8b0f1bb288f38179d44ba791a76f86a5504827704b7deImage:         nginx:1.20Image ID:      docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00bPort:          80/TCPHost Port:     0/TCPCommand:nginx-gdaemon off;State:          RunningStarted:      Fri, 23 Feb 2024 00:09:34 +0800Ready:          TrueRestart Count:  0Limits:cpu:     200mmemory:  256MiRequests:cpu:     100mmemory:  128Mi## 启动的时候通过http请求的方式检测Startup:   http-get http://:80/index.html delay=0s timeout=5s period=10s #success=1 #failure=3Environment:JVM_OPTS:  -Xms128m -Xmx128mMounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9w9zb (ro)
Conditions:Type              StatusInitialized       TrueReady             TrueContainersReady   TruePodScheduled      True
Volumes:kube-api-access-9w9zb:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type    Reason     Age   From               Message----    ------     ----  ----               -------Normal  Scheduled  21s   default-scheduler  Successfully assigned default/nginx-po to k8s-node-02Normal  Pulled     21s   kubelet            Container image "nginx:1.20" already present on machineNormal  Created    21s   kubelet            Created container nginxNormal  Started    21s   kubelet            Started container nginx[root@k8s-master ~]# kubectl get pod
NAME       READY   STATUS    RESTARTS   AGE
nginx-po   1/1     Running   0          112s

现在把http请求的方式改一下,该一个不存在的接口,我们在检测下,看是什么情况,如下图

在这里插入图片描述

[root@k8s-master ~]# kubectl delete po nginx-po
pod "nginx-po" deleted[root@k8s-master ~]# kubectl create -f  nginx-po.yml
pod/nginx-po created[root@k8s-master ~]# kubectl describe po  nginx-po
Name:             nginx-po
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-node-02/10.10.10.113
Start Time:       Fri, 23 Feb 2024 00:16:45 +0800
Labels:           test=l.0.0type=app
Annotations:      <none>
Status:           Running
IP:               10.2.1.14
IPs:IP:  10.2.1.14
Containers:nginx:Container ID:  docker://6b233c24af075db71790eac3ae19ce179e42e93aba9397e93d3b76d7bb1f6be5Image:         nginx:1.20Image ID:      docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00bPort:          80/TCPHost Port:     0/TCPCommand:nginx-gdaemon off;State:          RunningStarted:      Fri, 23 Feb 2024 00:16:46 +0800Ready:          FalseRestart Count:  0Limits:cpu:     200mmemory:  256MiRequests:cpu:     100mmemory:  128Mi## 此处显示探针的探测方式Startup:   http-get http://:80/api/ delay=0s timeout=5s period=10s #success=1 #failure=3Environment:JVM_OPTS:  -Xms128m -Xmx128mMounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-fm927 (ro)
Conditions:Type              StatusInitialized       TrueReady             FalseContainersReady   FalsePodScheduled      True
Volumes:kube-api-access-fm927:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type     Reason     Age   From               Message----     ------     ----  ----               -------Normal   Scheduled  18s   default-scheduler  Successfully assigned default/nginx-po to k8s-node-02Normal   Pulled     19s   kubelet            Container image "nginx:1.20" already present on machineNormal   Created    19s   kubelet            Created container nginxNormal   Started    19s   kubelet            Started container nginxWarning  Unhealthy  9s    kubelet            Startup probe failed: HTTP probe failed with statuscode: 404# 因为探测http请求的接口不存在,所以容器启动后,探针探测失败又重启了pod,所以就会出现如下情况: restart 的状态是3次
[root@k8s-master ~]# kubectl get po nginx-po
NAME       READY   STATUS    RESTARTS      AGE
nginx-po   0/1     Running   3 (13s ago)   103s# 超过3次失败代表pod启动失败,如下可以看到完成,但是pod没有启动起来
[root@k8s-master ~]# kubectl get po nginx-po
NAME       READY   STATUS      RESTARTS   AGE
nginx-po   0/1     Completed   4          3m38s
2.4.1.2 使用tcp请求的探测方式检测pod

探测方式,改成tcpSocket方式,再来测试下

在这里插入图片描述

[root@k8s-master ~]# kubectl delete po nginx-po
pod "nginx-po" deleted[root@k8s-master ~]# kubectl create -f nginx-po.yml
pod/nginx-po created[root@k8s-master ~]# kubectl describe po  nginx-po.yml
Error from server (NotFound): pods "nginx-po.yml" not found
[root@k8s-master ~]# kubectl describe po  nginx-po
Name:             nginx-po
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-node-02/10.10.10.113
Start Time:       Fri, 23 Feb 2024 00:25:01 +0800
Labels:           test=l.0.0type=app
Annotations:      <none>
Status:           Running
IP:               10.2.1.15
IPs:IP:  10.2.1.15
Containers:nginx:Container ID:  docker://711ffce625d048d2adb97d787aef11bc50f195a2b1b53a788e7165510f33c62fImage:         nginx:1.20Image ID:      docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00bPort:          80/TCPHost Port:     0/TCPCommand:nginx-gdaemon off;State:          RunningStarted:      Fri, 23 Feb 2024 00:25:02 +0800Ready:          TrueRestart Count:  0Limits:cpu:     200mmemory:  256MiRequests:cpu:     100mmemory:  128Mi## 此处可以看到探针方式是tcpStartup:   tcp-socket :80 delay=0s timeout=5s period=10s #success=1 #failure=3Environment:JVM_OPTS:  -Xms128m -Xmx128mMounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-lwbbz (ro)
Conditions:Type              StatusInitialized       TrueReady             TrueContainersReady   TruePodScheduled      True
Volumes:kube-api-access-lwbbz:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type    Reason     Age   From               Message----    ------     ----  ----               -------Normal  Scheduled  16s   default-scheduler  Successfully assigned default/nginx-po to k8s-node-02Normal  Pulled     17s   kubelet            Container image "nginx:1.20" already present on machineNormal  Created    17s   kubelet            Created container nginxNormal  Started    17s   kubelet            Started container nginx[root@k8s-master ~]# kubectl get po nginx-po
NAME       READY   STATUS    RESTARTS   AGE
nginx-po   1/1     Running   0          26s
2.4.1.3 使用命令的探测方式检测pod

此处我们改为命令的方式去做探针探测
在这里插入图片描述

[root@k8s-master ~]# kubectl create -f nginx-po.yml
pod/nginx-po created[root@k8s-master ~]# kubectl describe po  nginx-po
Name:             nginx-po
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-node-02/10.10.10.113
Start Time:       Fri, 23 Feb 2024 00:34:07 +0800
Labels:           test=l.0.0type=app
Annotations:      <none>
Status:           Running
IP:               10.2.1.16
IPs:IP:  10.2.1.16
Containers:nginx:Container ID:  docker://f03f904f0d25cedac772362a9944a40d5dd780bec0c2d814196d068f679c2d59Image:         nginx:1.20Image ID:      docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00bPort:          80/TCPHost Port:     0/TCPCommand:nginx-gdaemon off;State:          RunningStarted:      Fri, 23 Feb 2024 00:34:08 +0800Ready:          FalseRestart Count:  0Limits:cpu:     200mmemory:  256MiRequests:cpu:     100mmemory:  128Mi## 这里可以看到是命令的方式做为探针 Startup:   exec [sh -c echo "这个是命令探针" > /test.log] delay=0s timeout=5s period=10s #success=1 #failure=3Environment:JVM_OPTS:  -Xms128m -Xmx128mMounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-s4x9g (ro)
Conditions:Type              StatusInitialized       TrueReady             FalseContainersReady   FalsePodScheduled      True
Volumes:kube-api-access-s4x9g:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type    Reason     Age   From               Message----    ------     ----  ----               -------Normal  Scheduled  8s    default-scheduler  Successfully assigned default/nginx-po to k8s-node-02Normal  Pulled     8s    kubelet            Container image "nginx:1.20" already present on machineNormal  Created    8s    kubelet            Created container nginxNormal  Started    8s    kubelet            Started container nginx[root@k8s-master ~]# kubectl get po nginx-po
NAME       READY   STATUS    RESTARTS   AGE
nginx-po   1/1     Running   0          18s# 通过exec的方式进入到容器中可以查看到这个文件信息
[root@k8s-master ~]# kubectl exec nginx-po -it -c nginx -- cat /test.log
这个是命令探针
  • 进入容器查看容器内文件信息方式 \color{#FF0000}{进入容器查看容器内文件信息方式} 进入容器查看容器内文件信息方式
  • kubectl exec nginx-po -it -c nginx – cat /test.log
  • kubectl exec 【指定pod名称】 -it -c 【指定容器名称】 − − \color{#FF0000}{--} 【执行的命令】

2.4.2 LivenessProbe 的使用

重启探针,我想实现这样一个需求,nginx如果10s中还没有这个文件,那么会重启pod,同时添加了StartupProbe和LivenessProbe这两个探针类型。

在这里插入图片描述

[root@k8s-master ~]# kubectl create -f nginx-po.yml
pod/nginx-liveness-po created# 首先启动成功由于LivenessProbe探测不到文件,所以又重启了pod。
root@k8s-master ~]# kubectl get pod nginx-liveness-po
NAME                READY   STATUS    RESTARTS      AGE
nginx-liveness-po   0/1     Running   1 (11s ago)   51s# 在这重启pod成功
[root@k8s-master ~]# kubectl get pod nginx-liveness-po
NAME                READY   STATUS    RESTARTS      AGE
nginx-liveness-po   1/1     Running   1 (26s ago)   66s[root@k8s-master ~]# kubectl describe po nginx-liveness-po
Name:             nginx-liveness-po
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-node-02/10.10.10.113
Start Time:       Fri, 23 Feb 2024 00:55:44 +0800
Labels:           test=l.0.0type=app
Annotations:      <none>
Status:           Running
IP:               10.2.1.17
IPs:IP:  10.2.1.17
Containers:nginx:Container ID:  docker://0b4851536a55afcefea805f7011a94523338d71f92ef3a11ca1f804063db5192Image:         nginx:1.20Image ID:      docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00bPort:          80/TCPHost Port:     0/TCPCommand:nginx-gdaemon off;State:          RunningStarted:      Fri, 23 Feb 2024 00:56:25 +0800Last State:     TerminatedReason:       CompletedExit Code:    0Started:      Fri, 23 Feb 2024 00:55:45 +0800Finished:     Fri, 23 Feb 2024 00:56:25 +0800Ready:          TrueRestart Count:  1Limits:cpu:     200mmemory:  256MiRequests:cpu:     100mmemory:  128Mi# 这里是LivenessProbe探针的信息Liveness:  http-get http://:80/started.html delay=0s timeout=5s period=10s #success=1 #failure=3# 这里是startupProbe探针的信息Startup:   exec [sh -c sleep 3;echo "这个是命令探针" > /test.log] delay=0s timeout=5s period=10s #success=1 #failure=3Environment:JVM_OPTS:  -Xms128m -Xmx128mMounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-km6bb (ro)
Conditions:Type              StatusInitialized       TrueReady             TrueContainersReady   TruePodScheduled      True
Volumes:kube-api-access-km6bb:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type     Reason     Age                From               Message----     ------     ----               ----               -------Normal   Scheduled  77s                default-scheduler  Successfully assigned default/nginx-liveness-po to k8s-node-02Normal   Pulled     38s (x2 over 78s)  kubelet            Container image "nginx:1.20" already present on machineNormal   Created    38s (x2 over 78s)  kubelet            Created container nginxNormal   Started    38s (x2 over 78s)  kubelet            Started container nginxNormal   Killing    38s                kubelet            Container nginx failed liveness probe, will be restarted# 这里有Liveness的状态是检测失败了Warning  Unhealthy  8s (x5 over 58s)   kubelet            Liveness probe failed: HTTP probe failed with statuscode: 404# 这里可以看到pod的状态还未就绪
[root@k8s-master ~]# kubectl get pod nginx-liveness-po
NAME                READY   STATUS    RESTARTS     AGE
nginx-liveness-po   0/1     Running   2 (2s ago)   82s

在设想一个问题,刚才我们liveness判断的这个文件是不存在的, 如果我们创建一个started.html文件,然后把这个文件放到容器中,pod是否会恢复正常。实际的工作场景中,是否可以通过这样的方式来进行pod的自我恢复。

[root@k8s-master ~]# touch started.html[root@k8s-master ~]# kubectl cp started.html  nginx-liveness-po:/usr/share/nginx/html/[root@k8s-master ~]# kubectl get po nginx-liveness-po
NAME                READY   STATUS    RESTARTS       AGE
nginx-liveness-po   1/1     Running   2 (3m9s ago)   4m29s

2.4.3 ReadinessProbe 的使用

Readiness 是就绪探针,也就是说我们他去检测,如果检测正常,pod可以接受外部流量,如果不正常,pod不可以接受外部流量。
在这里插入图片描述

[root@k8s-master ~]# kubectl create -f nginx-readiness-po.yml
pod/nginx-liveness-po created
[root@k8s-master ~]# kubectl get pod nginx-liveness-po
NAME                READY   STATUS    RESTARTS   AGE
nginx-liveness-po   0/1     Running   0          6s
[root@k8s-master ~]# kubectl describe  pod nginx-liveness-po
Name:             nginx-liveness-po
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-node-02/10.10.10.113
Start Time:       Fri, 23 Feb 2024 01:32:17 +0800
Labels:           test=l.0.0type=app
Annotations:      <none>
Status:           Running
IP:               10.2.1.19
IPs:IP:  10.2.1.19
Containers:nginx:Container ID:  docker://30ba14e4759d735b148259c45db01eaf24c89d75f5aa150efbc19da127815ddeImage:         nginx:1.20Image ID:      docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00bPort:          80/TCPHost Port:     0/TCPCommand:nginx-gdaemon off;State:          RunningStarted:      Fri, 23 Feb 2024 01:32:18 +0800Ready:          FalseRestart Count:  0Limits:cpu:     200mmemory:  256MiRequests:cpu:      100mmemory:   128MiReadiness:  http-get http://:80/started.html delay=0s timeout=3s period=10s #success=1 #failure=5Startup:    exec [sh -c sleep 3;echo "这个是命令探针" > /test.log] delay=0s timeout=5s period=10s #success=1 #failure=3Environment:JVM_OPTS:  -Xms128m -Xmx128mMounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-pfcnk (ro)
Conditions:Type              StatusInitialized       TrueReady             FalseContainersReady   FalsePodScheduled      True
Volumes:kube-api-access-pfcnk:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type     Reason     Age   From               Message----     ------     ----  ----               -------Normal   Scheduled  19s   default-scheduler  Successfully assigned default/nginx-liveness-po to k8s-node-02Normal   Pulled     19s   kubelet            Container image "nginx:1.20" already present on machineNormal   Created    19s   kubelet            Created container nginxNormal   Started    19s   kubelet            Started container nginxWarning  Unhealthy  7s    kubelet            Readiness probe failed: HTTP probe failed with statuscode: 404
[root@k8s-master ~]### 映射端口
[root@k8s-master ~]# kubectl expose po nginx-readiness-po   --port 80 --type=NodePort
service/nginx-readiness-po exposed
[root@k8s-master ~]# kubectl get  pod,svc  -owide
NAME                     READY   STATUS    RESTARTS   AGE   IP          NODE          NOMINATED NODE   READINESS GATES
pod/nginx-readiness-po   0/1     Running   0          69s   10.2.1.20   k8s-node-02   <none>           <none>NAME                         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE    SELECTOR
service/kubernetes           ClusterIP   10.1.0.1       <none>        443/TCP        3d3h   <none>
service/nginx-readiness-po   NodePort    10.1.135.241   <none>        80:31815/TCP   14s    test=l.0.0,type=app
[root@k8s-master ~]# curl 10.10.10.100:31815
curl: (7) Failed connect to 10.10.10.100:31815; 拒绝连接
[root@k8s-master ~]## 流量放行
[root@k8s-master ~]# kubectl cp started.html nginx-readiness-po:/usr/share/nginx/html
[root@k8s-master ~]# kubectl get po nginx-readiness-po
NAME                 READY   STATUS    RESTARTS   AGE
nginx-readiness-po   1/1     Running   0          4m
[root@k8s-master ~]# curl 10.10.10.100:31815
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

3、生命周期

在这里插入图片描述


lifecycle:postStart:  # 容创速完成后执行的动作,不能保证该操作一定在容器的command之前执行,一般不使用exec:    # 可以是 exec/httpGet/tcpSocketcommand:- sh- -c- 'mkdir /data'preStop: #在客器停止前执行的动f作httpGet: #发送个http语求path: /port:80

3.1 Pod的退出流程

  1. 首先删除pod相关的网络信息,如果有暴露端口,删除pod的时候会删除这个POD暴露IP信息,会把我们的pod变成一个Terminating的的状态
  2. 变成Terminating中这个状态的时候,会给pod一个宽限期,让pod去执行一些清理或销毁操作。
    • 配置参数:作用与pod中的所有容器
    • terminationGracePeriodSeconds:30
    • containers:
    • -xxx

3.2 PreStop的应用

在这里插入图片描述

同样使用上文的nginx-po的yaml文件,修改spec的配置如上。我们的prestop运行的命令 sleep 50,睡眠50s,但是pod的默认销毁时间是30,由上文的 terminationGracePeriodSeconds 这个参数控制,也就是说,prestop的命令还未执行呢,pod就已经删除了, 实际工作中,如果删除pod的时候,有数据需要持久化,那么需要配置 terminationGracePeriodSeconds 这个参数来控制pod删除时间。

[root@k8s-master ~]# kubectl create -f nginx-prestop-po.yml
pod/nginx-liveness-po created[root@k8s-master ~]# kubectl get pod nginx-prestoop-po  -owide
NAME                READY   STATUS    RESTARTS   AGE   IP          NODE          NOMINATED NODE   READINESS GATES
nginx-prestoop-po   1/1     Running   0          13s   10.2.1.23   k8s-node-02   <none>           <none>[root@k8s-master ~]# curl 10.2.1.23/life.html
Fri Feb 23 09:07:35 UTC 2024 poststart[root@k8s-master ~]# time kubectl delete po nginx-prestoop-po
pod "nginx-prestoop-po" deletedreal	0m31.183s
user	0m0.067s
sys	0m0.065s

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/486447.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20240113----重返学习-`nginx/conf/nginx.conf`的https证书配置说明

20240113----重返学习-nginx/conf/nginx.conf的https证书配置说明 文件说明 不同域名的多虚拟主机配置 server {listen 443 ssl;#在443端口上监听SSL/TLS流量;server_name localhost;#指定服务器名称&#xff0c;应该与域名匹配;ssl_certificate fangchaoduan.com.pem;#指定SS…

蓝桥 算法训练 粘木棍(C++)

问题描述 有N根木棍&#xff0c;需要将其粘贴成M个长木棍&#xff0c;使得最长的和最短的的差距最小。 输入格式 第一行两个整数N,M。   一行N个整数&#xff0c;表示木棍的长度。 输出格式 一行一个整数&#xff0c;表示最小的差距 样例输入 3 2 10 20 40 样例输出 10…

使用LinkedList实现堆栈及Set集合特点、遍历方式、常见实习类

目录 一、使用LinkedList实现堆栈 堆栈 LinkedList实现堆栈 二、集合框架 三、Set集合 1.特点 2.遍历方式 3.常见实现类 HashSet LinkedHashSet TreeSet 一、使用LinkedList实现堆栈 堆栈 堆栈&#xff08;stack&#xff09;是一种常见的数据结构&#xff0c;一端…

ArcgisForJS如何实现添加含图片样式的点要素?

文章目录 0.引言1.加载底图2.获取点要素的坐标3.添加含图片样式的几何要素4.完整实现 0.引言 ArcGIS API for JavaScript 是一个用于在Web和移动应用程序中创建交互式地图和地理空间分析应用的库。本文在ArcGIS For JavaScript中使用Graphic对象来创建包含图片样式的点要素。 …

人工智能_CPU微调ChatGLM大模型_使用P-Tuning v2进行大模型微调_007_微调_002---人工智能工作笔记0102

这里我们先试着训练一下,我们用官方提供的训练数据进行训练. 也没有说使用CPU可以进行微调,但是我们先执行一下试试: https://www.heywhale.com/mw/project/6436d82948f7da1fee2be59e 可以看到说INT4量化级别最低需要7GB显存可以启动微调,但是 并没有说CPU可以进行微调.我们…

Java SpringBoot测试OceanBase

对上篇mysql导入到OceanBase中的数据库进行代码测试&#xff0c;写了个demo包含测试方法&#xff0c;在原mysql库中成功执行&#xff0c;迁移到OceanBase时看是否能不修改业务代码而成功执行测试方法&#xff1a; 代码基于SpringBoot MyBastis测试增删改查、批量新增、多表联…

【算法与数据结构】链表、哈希表、栈和队列、二叉树(笔记二)

文章目录 四、链表理论五、哈希表理论五、栈和队列理论5.1 单调栈 六、二叉树理论6.1 树的定义6.2 二叉树的存储方式6.3 二叉树的遍历方式6.4 高度和深度 最近博主学习了算法与数据结构的一些视频&#xff0c;在这个文章做一些笔记和心得&#xff0c;本篇文章就写了一些基础算法…

文章SCI/EI检索流程

前言&#xff1a; 想查询某篇文章是否被SCI/EI检索&#xff0c;以及其对应SCI/EI检索号可通过以下流程查询。 一、SCI检索 网址&#xff1a;https://webofscience-clarivate-cn-s.xidian.yitlink.com/wos/alldb/basic-search 搜索对应论文的题目&#xff0c;若有对应查询结果…

Vue | (四)使用Vue脚手架(上) | 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;初始化脚手架&#x1f407;创建初体验&#x1f407;分析脚手架结构&#x1f407;关于render&#x1f407;查看默认配置 &#x1f4da;ref与props&#x1f407;ref属性&#x1f407;props配置项 &#x1f4da;混入&#x1f4da;插件&#x1f4da;scoped样…

敏捷项目管理在现代软件开发中的应用

在现代软件开发领域&#xff0c;项目管理起着至关重要的作用。随着技术的不断进步和市场需求的快速变化&#xff0c;传统的项目管理方法已逐渐无法满足软件开发的需求。因此&#xff0c;敏捷项目管理应运而生&#xff0c;成为许多软件开发团队的首选方法。本文将探讨敏捷项目管…

图文说明Linux云服务器如何更改实例镜像

一、应用场景举例 在学习Linux的vim时&#xff0c;我们难免要对vim进行一些配置&#xff0c;这里我们提供一个vim插件的安装包&#xff1a; curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o./install.sh && bash ./install.sh 但是此安装包…

基于springboot+vue的智慧社区系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…