前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除
出自B站博主教程笔记:
完整版Kubernetes(K8S)全套入门+微服务实战项目,带你一站式深入掌握K8S核心能力_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1MT411x7GH/?spm_id_from=333.337.search-card.all.click
目录
一、Pod配置文件
二、探针
1、类型
1.1、StartupProbe
1.2、LivenessProbe
1.3、ReadinessProbe
2、探测方式
2.1、ExecAction
2.2、TCPSocketAction
2.3、HTTPGetAction
3、参数配置
三、生命周期
1、Pod退出流程
2、PreStop的应用
一、Pod配置文件
[root@k8s-node1 ~]# cd /opt/k8s/pods
# 一个Pod基本nginx配置文件示例
[root@k8s-node1 pods]# touch nginx-demo.yaml
apiVersion: v1 # api 文档版本
kind: Pod # 资源对象类型,也可以配置为Deployment,Statufulset这一类的对象
metadata: # Pod 相关的元数据,用于描述Pod的数据
name: nginx-demo # Pod 的名称
labels: # 定义Pod 的标签
type: app # 自定义 label 标签,名字为type,值为 app
test : 1.0.0 # 自定义 label 标签,描述 Pod 版本号
namespace: 'default' # 命名空间的配置
spec: # 期望 Pod 按照这里面的描述进行创建
containers: # 对于 Pod 中的容器描述
- name: nginx # 容器的名称
image: nginx:1.7.9 # 指定容器的镜像
imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地有就用本地的,无则拉取远程
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 # 限制内存最少使用257兆
restartPolicy: OnFailure # 重启策略,只有失败的情况才会重启
# 执行命令指定yaml文件创建Pod
[root@k8s-node1 ~]# # kubecrl create -f nginx-demo.yaml
二、探针
容器内应用的监测机制,根据不同的探针来判断容器应用当前的状态
1、类型
1.1、StartupProbe
k8s 1.16 版本新增的探针,用于判断应用程序是否已经启动了
当配置了 startupProbe 后,会先禁用其他探针,直到startupProbe成功后,其他探针才会继续。
作用:由于有时候不能准确预估应用一定是多长时间启动成功,因此配置另外两种方式不方便配置初始化时长来检测,而配置了 statupProbe 后,只有在应用启动成功了,才会执行另外两种探针,可以更加方便的结合使用另外两种探针使用。
startupProbe: # 应用启动探针
httpGet: # 探针方式,基于http请求探测
path: /api/startup # http请求路径
port: 80 # 请求端口
1.2、LivenessProbe
用于探测容器中的应用是否运行,如果探测失败,kubelet 会根据配置的重启策略进行重启,若没有配置,默认就认为容器启动成功,不会执行重启策略。
livenessProbe:
failureThreshold: 5 # 失败多少次才真正失败
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 60
periodSeconds: 10 # 间隔时间
successThreshold: 1 # 多少次检测成功算成功
timeoutSeconds: 5 # 请求的超时时间
1.3、ReadinessProbe
用于探测容器内的程序是否健康,它的返回值如果返回 success,那么就认为该容器已经完全启动,并且该容器是可以接收外部流量的。
readinessProbe:
failureThreshold: 3 # 错误次数
httpGet:
path: /ready
port: 8181
scheme: HTTP
periodSeconds: 10 # 间隔时间
successThreshold: 1
timeoutSeconds: 1
2、探测方式
2.1、ExecAction
在容器内部执行一个命令,如果返回值为 0,则任务容器时健康的。
livenessProbe:
exec:
command:
- cat
- /health
2.2、TCPSocketAction
通过 tcp 连接监测容器内端口是否开放,如果开放则证明该容器健康
livenessProbe:
tcpSocket:
port: 80
2.3、HTTPGetAction
生产环境用的较多的方式,发送 HTTP 请求到容器内的应用程序,如果接口返回的状态码在 200~400 之间,则认为容器健康。
livenessProbe:
failureThreshold: 5
httpGet:
path: /health
port: 8080
scheme: HTTP
httpHeaders:
- name: xxx
value: xxx
3、参数配置
initialDelaySeconds: 60 # 初始化时间
timeoutSeconds: 2 # 超时时间
periodSeconds: 5 # 监测间隔时间
successThreshold: 1 # 检查 1 次成功就表示成功
failureThreshold: 2 # 监测失败 2 次就表示失败
三、生命周期
配置示例:
lifecycle:
postStart: # 容创建完成后执行的动作,不能保证该操作一定在容器的 command 之前执行,一般不使用
exec: # 可以是 exec / httpGet / tcpSocket
command:
- sh
- -c
- 'mkdir /data'
preStop: # 在容器停止前执行的动作
httpGet: # 发送一个 http 请求
path: /
port: 80
exec: # 执行一个命令
command:
- sh
- -c
- sleep 9
1、Pod退出流程
删除操作:
- Endpoint 删除 Pod 的 IP 地址
- Pod变成 Terminating 状态:变为删除中的状态后,会给 pod 一个宽限期,让 pod 去执行一些清理或销毁操作。
-
配置参数:
# 作用于 pod 中的所有容器 terminationGracePeriodSeconds: 30 # 当Pod被删除时,给这个Pod宽限多长时间 containers: - xxx
-
执行PreStop的指令
2、PreStop的应用
- 注册中心下线
- 数据清理
-
数据销毁