有三种探测方式,测试服务是否正在正常运行
- HTTP GET探针针对容器的IP地址执行HTTP GET请求,如果收到响应,并且状态码不代表错误,则认为服务正常运行
- TCP套接字探针尝试与容器指定端口建立TCP连接,如果连接成功则探测成功
- Exec探针在容器内执行命令,并检查命令的退出状态码。
创建带存活探针的pod
apiVersion: v1
kind: Pod
metadata:
name: kubia-web
labels:
name: kubia-web
spec:
containers:
- name: kubia-web
livenessProbe:
httpGet:
path: /
port: 8080
image: luksa/kubia
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 8080
存活探针在容器运行后立即开始,我们使用时通常会设置参数不会让探针在容器运行后立即开始,因为容器运行后,还要开启服务,在开启服务这段时间,探针会认为服务有错误,所以会不断的创建新的容器,并将现有的容器删除。
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 15
设置初始间隔时间,等待一段时间后,再进行探测
还可以设置探测周期间隔时间
periodSeconds:10
创建有效的存活探针
我们要确保一个服务的错误,要通过对此服务的重新创建能够修复,如果对现有服务进行重新创建不能修复,则会一直创建新的服务,还不会正常进行服务
注意:如果探针遇到服务错误,会重新创建一个服务,不会对现有服务进行重启
ReplicationCtronllerReplicationController控制器会对响应类型的pod进行监控,将pod数目与预期相符
apiVersion: v1
kind: ReplicationController
metadata:
name: myapp
spec:
#replicas表示预期的pod数量
replicas: 3
selector:
#选择的标签,根据标签控制pod数量
app: myapp
template:
metadata:
name: myapp
labels:
#携带的标签
app: myapp
spec:
containers:
- name: myapp
image:
ports:
- containerPort: 8080
控制器会确保标签为app=myapp的pod数量为3
对pod的一些操作,导致控制器的反应
删除一个pod
控制器会发现携带有指定标签的pod少于预期数量,则会创建pod到预期数量
修改标签选择器指定的标签
控制器发现携带有指定标签的pod少于预期数量,则会创建pod到预期数量
新增一个带有相同标签的pod
控制器发现现有带有指定标签的pod多于预期数量,会删除pod到预期数量
注意:修改模板的内容只会造成修改后创建的pod改变,不会影响之前的pod
ReplicationController的扩缩容
扩缩容有两种方法
第一种方法使用命令
kubectl scale rc replicationcontrollername --replicas=3
第二种方法,修改yaml文件
kubectl edit rc replicationcontrollername
删除一个ReplicationController
kubectl delete rc replicationcontrollername
注意,删除控制器时,该控制器下的pod也会被删除,如果你想删除控制器,将控制器下的pod作为独立运行的。
kubectl delete rc replicationcontroller --cascade=falseDaemonSet
DaemonSet控制器,将每一个工作节点都部署一个指定的pod。如果只部署在部分节点上可以使用nodeselector选择节点。
Job前面的控制器,将会监督pod的工作情况,如果出现不能正常工作,就会重新创建。如果我们有一些任务,执行完就可以结束,当使用上面的控制器就会很麻烦,因为如果执行完了,服务就没有了,但是控制器会认为服务出现问题,会重新创建一个服务。
job控制器,就是让指定的程序运行,结束之后就会自动退出,但是如果中途出现错误,控制器会重新创建一个pod,再运行。
使用job控制器
apiVersion: batch/v1
kind: Job
metadata:
name: myjob
spec:
ttlSecondsAfterFinished: 100
#设置运行多少次
completions: 5
#设置并行的程序个数
parallelism: 2
#设置限制任务完成的时间
activeDeadlineSeconds: 100
template:
spec:
containers:
- name: pi
image: luksa/batch-job
#设置重启的策略
restartPolicy: onFailure



