【Kubernetes】容器重启策略-Always
环境
- kubernetes 1.20.2
- Spring Boot 2.5.0-M1
目标
创建一个 Pod 将其容器的重启策略设置为:Always,查看容器停止时,Pod 的行为。
pod.yaml
直接创建 Pod 时,如果 restartPolicy 不写,默认为:Always。
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
spec:
restartPolicy: Always
containers:
- name: pod-demo
image: jiangbo920827/spring-demo:actuator
ports:
- containerPort: 8080
查看 Pod
[root@master pod]# kubectl get -f pod.yaml -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-demo 1/1 Running 0 82s 10.244.1.17 node1 <none> <none>
可以看到 Pod 正常运行,RESTARTS(重启次数)字段为 0。
停止容器
正常停止
[root@master pod]# curl -X POST 10.244.1.17:8080/actuator/shutdown
{"message":"Shutting down, bye..."}[root@master pod]#
[root@master pod]# kubectl get -f pod.yaml -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-demo 1/1 Running 1 8m4s 10.244.1.17 node1 <none> <none>
可以看到容器被终止了,并且重启次数增加了一次,Pod 恢复到了正常状态。
非正常停止
[root@master pod]# kubectl exec pod-demo -- kill 1
[root@master pod]# kubectl get -f pod.yaml -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-demo 0/1 Error 1 10m 10.244.1.17 node1 <none> <none>
[root@master pod]# kubectl get -f pod.yaml -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-demo 1/1 Running 2 10m 10.244.1.17 node1 <none> <none>
重启的次数再次增加 1,如果查看命令够快的话,还能看到中间出现了一个 Error 的状态,重启后又恢复到正常状态。
总结
介绍了容器的重启策略-Always,在创建单个 Pod 的情况下,不管 Pod 中的容器是否正常停止,最终都会恢复。
容器的重启有一个回退策略,并以指数级增加。如果在 10 分钟没有错误,则重置重启计时。
详细说明见附录摘抄的官网说明。
附录
Container restart policy
The spec
of a Pod has a restartPolicy
field with possible values Always, OnFailure, and Never. The default value is Always.
The restartPolicy
applies to all containers in the Pod. restartPolicy
only refers to restarts of the containers by the kubelet on the same node. After containers in a Pod exit, the kubelet restarts them with an exponential back-off delay (10s, 20s, 40s, …), that is capped at five minutes. Once a container has executed for 10 minutes without any problems, the kubelet resets the restart backoff timer for that container.
相关文章
- 在Azure中部署Kubernetes容器集群
- 基于OpenStack和Kubernetes的容器管理未来
- 通过kubernetes构建ela服务
- 容器技术教程:如何将Docker应用持续部署至Kubernetes当中
- 【Kubernetes】容器重启策略-OnFailure
- Kubernetes Dashboard - 每天5分钟玩转 Docker 容器技术(173)
- Kubernetes 架构(上)- 每天5分钟玩转 Docker 容器技术(120)
- Kubernetes容器集群管理环境 - Prometheus监控篇
- Kubernetes容器集群 - Secret(特殊存储卷)
- 开源项目:jeecg-boot低代码平台部署到kubernetes(更新于2022.2.15)
- Azure容器中建立Kubernetes群集
- Kubernetes会重蹈OpenStack的覆辙吗,看OpenStack基金会COO Mark怎么说
- CoreOS容器编排之路:从Fleet到Kubernetes的转变
- 容器编排初探:探索Docker swarm mode、Kubernetes和Mesosphere
- Kubernetes 1.4:一个DevOps工具管理所有的容器
- CRI-O将如何把Kubernetes推上容器生态系统的中心位置
- 为什么Kubernetes能赢得容器之战
- Mirantis使用Kubernetes容器化OpenStack以缓解运维挑战
- Kubernetes(K8s) service(服务)
- Kubernetes(K8s) kubectl scale 常用命令
- 如何使用 Kubectl 端口转发访问远程 Kubernetes 应用程序
- 如何使用 Kubernetes Hooks 跟踪容器生命周期
- 如何使用 Kubescape 扫描 Kubernetes 漏洞
- DockOne微信分享(七十二):Kubernetes容器集群中的日志系统集成实践
- 使用 Kubernetes 和 OpenStack-Salt ,打造生产环境可用的 OpenStack (上)
- Kubernetes Meetup深秋成都行 Ghostcloud精灵云获好评如云
- 阿里云容器宣布开放支持Kubernetes托管服务
- 全球首批通过Kubernetes一致性认证,阿里云容器服务之最新解读
- 将Node.js项目docker容器化并纳入kubernetes调度编排的实践