今天看到了Pod的控制器才发现我的前几天写的Pod资源清单都是不能在生成环节中使用的,因为他无法实现动态扩容和缩小。而今天学的ReplicaSet,Deployment,DaemonSet,Job,CronJob,StatefulSet等控制器就能很好完成生成环节中各种各样的需求。
ReplicaSet控制器:
ReplicaSet简称rs,rs控制器主要实现了对Pod对象副本数量的控制,当Pod有故障时会自动创建,当Pod数量大于期望值时会自动删减。也能实现弹性伸缩,Pod版本升级(金丝雀发布)。
Deployment控制器:
Deployment控制器是基于rs控制器的二次开发,所以rs控制器有的功能他都有,还对Pod版本升级后的发布有更多的选择,也增加了回滚的功能,能控制多个rs控制器。
DaemonSet控制器:
DaemonSet控制器用于在集群中的全部节点上同时运行一份指定的Pod资源副本,当有新节点连接会自动生成Pod,如果有节点移除也会把Pod资源回收。
Job控制器:
Job控制器用于管理只用运行一次的Pod,在Pod运行结束后不会重启,而是显示Pod对象置于“Completed”状态 。
CronJob控制器:
CronJob周期性任务作业计划,控制其运行的时间和重复运行的方式。
StatefulSet控制器:
StatefulSet控制器其实是Deployment一种 变种,他主要管理有状态的Pod资源副本。
他具有新的特点:
- 具有固定(主机名)
- 具有持久化存储
- 需要按顺序部署和扩展
- 需要按顺序终止及删除
- 需要按顺序滚动更新
发布方式:
今天我了解了两个不同的发布方式:金丝雀发布和蓝绿发布。
金丝雀发布:
慢慢的把新版本替换旧版本,一台一台慢慢替换。
优点:如果现版本有问题不至于整个集群挂,用户体验良好
蓝绿发布:
两个rs控制器,只要server指向已经更新好的rs控制器就可以实现版本更新。
优点:更新速度快,如果发现新版本有问题也可以快速回滚。
rs控制器例子:
apiVersion: /apps/v1
bind: ReplicaSet
metadata:
name: www-rs
namespace: default
spec:
relicas: 2
selector:
matchLables:
app: nginx
template:
mentadata:
name: www
lables:
app: nginx
spec:
containers:
- name: nginx
image: nginx
port:
containersPort: 80
如果你想更改已经生成的rs控制器数量和rs控制中的Pod镜像版本可以通下面命令修改
kubectl edit rs www-rs
注:如果你修改了镜像的版本需要手动删除现有的Pod才会生成最新镜像。