pause容器:
参见:kubernetes原理及核心组件
init容器:
一个主容器可以创建一个或多个init容器,init容器用于为主容器加载一些资源。
事例
#init.yaml
apiVersion: demo/v1
kind: Pod
metadata:
name: init-demo
labels:
app: demo
spec:
containers:
- name: demo-container
image: www.harbor.com/harbor/demo:v1
#init容器
initContainers:
- name: init-mydb
image: hub.kaikeba.com/library/busybox:v1
#可以在此处写脚本加载一些资源
command: []
post start和pre stop函数:
start函数用于在主容器创建完成之后执行一些额外的操作
stop用于在停止容器之前执行一些额外的操作
事例
apiVersion: demo/v1
kind: Pod
metadata:
name: demo
spec:
containers:
- name: demo-container
image: www.harbor.com/harbor/demo:v1
lifecycle:
poststart:
exec:
#可以在此处写脚执行一些额外的操作
command: []
prestop:
exec:
#可以在此处写脚本执行一些额外的操作
command: []
容器探针:
探针是指kubelet定期对容器执行诊断,检测容器是否按预期运行。kubelet通过调用容器实现的Handler来进行诊断。有三种类型的处理程序:
-
exec:在容器内执行指定命令。如果命令退出时返回码为0则认为通过诊断。
-
tcpSocket:对指定端口上的容器的IP地址进行TCP检查。如果端口打开,则诊断被认为是成功的。
-
httpGet:对指定的端口和路径上的容器的IP地址执行HTTPGet请求。如果响应的状态码大于等于200且小于400,则诊断被认为是成功的
-
成功:通过诊断。
-
失败:未通过诊断。
-
未知:诊断失败,不会采取任何行动
探测方式
- readinessProbe:检测容器是否准备好服务请求。可以通过调用服务的一个接口来进行检测。如果探测未通过,端点控制器将从与Pod匹配的所有Service的端点中删除该Pod的IP地址。初始延迟之前的就绪状态默认为Failure。如果容器不提供就绪探针,则默认状态为Success
- livenessProbe:检测容器是否正在运行。如果检测未通过,则kubelet会杀死容器。如果容器不提供存活探针,则默认状态为Success,可能会出现pod是Running状态单服务不可用的情况。
事例
#就绪探针
apiVersion: demo/v1
kind: Pod
metadata:
name: demo
namespace: default
spec:
containers:
- name: demo-container
image: www.harbor.com/harbor/demo:v1
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
port: 80
#检测接口路径
path: /health
#1秒后执行
initialDelaySeconds: 1
#每3秒执行1次
periodSeconds: 3
################################
#存活探针
apiVersion: v1
kind: Pod
metadata:
name: demo
namespace: default
spec:
containers:
- name: demo-container
image: www.harbor.com/harbor/demo:v1
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
#执行命令进行检测
command: []
initialDelaySeconds: 1
periodSeconds: 3