一、控制器简介
自主POD调度绑定至节点若主程序崩溃则节点kubelet能够自动重启容器,但若是非主进程崩溃类的容器kubelet无从感知。这便需要依赖于POD对象定义的存活探测,以便kubelet能够探知到此类故障,但若pod被删除或者工作节点自身发生故障(工作节点上都有kubelet,kubelet不可用,因此其健康状态便无法保证),则便需要控制器来处理相应的容器重启和配置。
Kubernetes 中内建了很多 controller(控制器),这些相当于一个状态机,用来控制 Pod 的具体状态和行为。
Pod 的分类:
- 自主式 Pod:Pod 退出后不会被创建
- 控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目
控制器类型:
- ReplicationController和ReplicaSet
- Deployment
- DaemonSet
- StatefulSet
- Job
- CronJob
- HPA全称Horizontal Pod Autoscaler
二、各控制器示例
1.Deployment控制器
- ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet。
- ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet 支持新的基于集合的选择器需求。
- ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行
- 虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的机制。
Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。
典型的应用场景:
- 用来创建Pod和ReplicaSet
- 滚动更新和回滚
- 扩容和缩容
- 暂停与恢复
(1)删除已有的pod,编辑Deployment控制器清单文件deploy.yml,读取该文件新建pod
vim depoly.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-myapp
labels:
app: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:v1
ports:
- containerPort: 80
[root@server2 pod]# kubectl apply -f depoly.yml
(2)查看pod信息可以看到由RS控制器管理的三个pod副本成功创建