保持 pod 的健康
- 在实际的应用里,希望部署的pod能自动保持运行和健康,无需手动干预
- 不要直接创建pod,而是创建RC或者Deployment这样的资源由他们来管理
- 如何托管我们的pod,k8s如何自动重启pod,node节点失败pod如何被调度。
- 即使进程崩溃,应用程序会停止工作,比如java进程的内存泄露
存活探针
1 | # k8s三种探测容器机制 |
基于HTTP的存活探针
1 | # https://github.com/luksa/kubernetes-in-action/tree/master/Chapter04/kubia-unhealthy |
1 | # 大约1分半后容器会重启 |
获取崩溃容器的应用日志
1 | # 当想知道前一个容器日志,而不是当前的容器时 加上 --previous |
查看事件
1 | [root@k8s-master1 demo]# kubectl describe pod kubia-liveness |
配置存活探针的附加属性
1 | # http-get http://:8080/ delay=0s timeout=1s period=10s #success=1 #failure=3 |
1 | # initialDelaySeconds: 10 # 容器启动5秒后 开始健康检查 |
1 | [root@k8s-master1 demo]# vim kubia-libeness-probe.yaml |
创建 ReplicationController
1 | # ReplicationController 三部分 |
1 | [root@k8s-master1 demo]# vim kubia-rc.yaml |
断开 node2 节点测试
1 | [root@k8s-master1 demo]# kubectl get pods -o wide |
pod 迁移或迁出 rc 的作用域
1 | 1. 通过修改pod的标签 可以将它从rc的作用域中添加或者删除 |
1 | # 更改已托管到rc中的pod标签 |
kubectl edit 修改模板
1 | [root@k8s-master1 demo]# kubectl edit rc kubia |
kubectl sacle 水平扩容
1 | [root@k8s-master1 demo]# kubectl scale rc kubia --replicas=5 |
删除 ReplicationController
1 | # 1. 删除rc的同时,它管理的pod也会被删除 |
使用 ReplicatSet 替换 ReplicationController
1 | # 1. ReplicationController 是用于复制和在异常时重新调度节点的最早组件 |
ReplicatSet 和 ReplicationController 的区别
1 | # 1. ReplicationController 只能匹配一组标签 |
定义 ReplicatSet
1 | # 参考 |
ReplicatSet 的标签选择器
1 | # ReplicatSet 对于 rc的主要改进就是标签选择器 |
删除 ReplicatSet
1 | # 删除rs,则下面的pod同时删除 |
DaemonSet 在每个 node节点上运行1个pod
1 | 1. 如果 node节点下线 DaemonSet不会再其他节点上重新部署pod |
创建 DaemonSet
1 | [root@k8s-master2 ssd]# vim Dockerfile |
1 | [root@k8s-master1 demo]# kubectl create -f kubia-ds.yaml |
1 | # 查看 |
1 | # 删除 ds |
Job 运行单个任务的 pod
1 | 1. jod 一旦运行完成不会重启容器 |
创建 Job
1 | [root@k8s-master2 job]# vim Dockerfile |
1 | [root@k8s-master1 demo]# kubectl explain job |
1 | • Always: 当容器终止退出后,总是重启容器,默认策略。 |
查看 Job 运行
1 | [root@k8s-master1 demo]# kubectl get jobs |
计划任务 CronJob
创建 CronJob
1 | [root@k8s-master1 demo]# kubectl explain cronjob |
1 | [root@k8s-master1 demo]# vim cronjob.yaml |