镇楼图

复制到typora效果更佳哦
# 笔记
### 1、pod
```bash
k8s最小的管理单元是pod,pod主要是用来管理pod,在一个pod中包含的是一个调用链的服务。
例如:
nginx Django
```

### 2 、pod生命周期
```bash
上图就是pod的整个生命周期:
1.容器初始化
2.启动回调(postStart)
3.存活探针(liveness probe)
4.就绪探针(readiness probe)
5.停止回调(pre stop)
```
#### 2.1、容器初始化
```bash
初始化容器必须运行完成直至结束,若某初始化容器运行失败,那么k8s需要重启它直到成功完成
每个初始化容器都必须按定义的顺序串行运行
1.既然有了command,那为什么还要用初始化(initcontainers)呢?
#command,不保证在容器启动之前运行,而初始化是一定是容器启动之前运行,运行成功才会继续启动容器否则,重启容器
用法:
#initcontainers和containers同级
……
spec:
initcontainers:
……
containers:
……
```
#### 2.2、启动回调(postStart)
```bash
当Pod中所有的容器创建完成之后,立即调用的命令。
执行失败:如果启动回调钩子执行失败,容器无法进入正常启动状态。
#检测方式又有三种:
exec、http、socket三种,分别是通过执行命令、http请求、检测端口是否开启,三种方式检测
---
PostStart:容器创建成功后,运行前的任务,用于资源部署、环境准备等。
......
containers:
- image: sample:v2
name: war
lifecycle:
postStart:
exec:
command:
- “cp”
- “/sample.war”
- “/app”
————————————————
使用方法
---
#exec
……
spec:
containers:
- name: nginx
image: nginx:1.18
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
exec:
command:
- "/bin/sh"
- "-c"
- "echo 'Hello World!' > /root/1.txt"
#容器启动成功后执行"echo 'Hello World!' > /root/1.txt"这个命令执行成功则,检测通过,否则检测失败无法进入正常状态
---
#http协议访问
……
spec:
restartPolicy: OnFailure
containers:
- name: nginx
image: nginx:1.18
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
httpGet:
port: 80
path: /
host: www.baidu.com
#容器启动成功后访问www.baidu.com这个域名80端口访问成功则检测通过,否则无法进入正常状态
---
#socket 通过ping命令检测端口
……
spec:
restartPolicy: OnFailure
containers:
- name: nginx
image: nginx:1.18
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
tcpSocket:
port: 80
host: 106.13.81.75
```
#### 2.3、存活探针(liveness probe)
```bash
存活探针的主要作用就用来测试容器是否存活,如过检测失败,则认为容器不健康,会根据相应的设置来判断是否进行重启操作,如果不配置存活探针则默认为健康状态
initialDelaySeconds。如果没有设置,探针将在启动时立即探测,通常会导致探测失败,因为程序还没准备好开始接收请求
#示例:
存活探针同样有三种探测方式:exec、http、socket三种,分别是通过执行命令、http请求、检测端口是否开启,三种方式检测
liveness probe,在containers下级
---
……
spec:
containers:
livenessProbe:
initialDelaySeconds: 10 #延迟检测时间
periodSeconds: 5 #检测时间间隔
exec:
command:
- cat
- /tmp/healthy
#http、socket和上面都一样这里就直接跳过了
---
#相关配置(在livenessProbe下级):
initialDelaySeconds: Pod 启动后首次进行检查的等待时间,单位“秒”。
periodSeconds: 检查的间隔时间,默认为 10s,单位“秒”。
timeoutSeconds: 探针执行检测请求后,等待响应的超时时间,默认为 1s,单位“秒”。
successThreshold: 探针检测失败后认为成功的最小连接成功次数,默认为 1s,在 Liveness 探针中必须为 1s,最小值为 1s。
failureThreshold: 探测失败的重试次数,重试一定次数后将认为失败,在 readiness 探针中,Pod会被标记为未就绪,默认为 3s,
```
#### 2.4、就绪探针(readiness probe)
```bash
用于判断容器中应用是否启动完成,当探测成功后才使 Pod 对外提供网络访问,如果探测失败,将会从负载均衡上驱逐,再接收流量,直到再次检测通过
#示例:
readiness probe的配置和livenessProbe是一样的
---
……
spec:
containers:
readinessProbe:
initialDelaySeconds: 10 #延迟检测时间
periodSeconds: 5 #检测时间间隔
exec:
command:
- cat
- /tmp/healthy
#http、socket和上面都一样这里就直接跳过了
---
#相关配置(在livenessProbe下级):
initialDelaySeconds: Pod 启动后首次进行检查的等待时间,单位“秒”。
periodSeconds: 检查的间隔时间,默认为 10s,单位“秒”。
timeoutSeconds: 探针执行检测请求后,等待响应的超时时间,默认为 1s,单位“秒”。
successThreshold: 探针检测失败后认为成功的最小连接成功次数,默认为 1s,在 Liveness 探针中必须为 1s,最小值为 1s。
failureThreshold: 探测失败的重试次数,重试一定次数后将认为失败,在 readiness 探针中,Pod会被标记为未就绪,默认为 3s,
```
#### 2.5、停止回调(pre stop)
```bash
PreStop:在容器被终止前的任务,用于优雅关闭应用程序、通知其他系统等等。
优雅的删除资源对象:
当用户请求删除含有pod的资源对象时(如RC、deployment等),K8S为了让应用程序优雅关闭(即让应用程序完成正在处理的请求后,再关闭软件),K8S提供两种信息通知:
1)、默认:K8S通知node执行docker stop命令,docker会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认超时时间(30s),会继续发送SIGKILL的系统信号强行kill掉进程。
2)、使用pod生命周期(利用PreStop回调函数),它执行在发送终止信号之前。
---
……
spec:
containers:
prestop:
httpGet:
host: monitor.com
psth: /waring
port: 8080
scheme: HTTP
```