# 1. 什么是controller
- 在集群上管理和运行容器的对象
- controller的几种类型
- Deployment : 部署无状态应用
- SatefulSet : 部署有状态应用
- DaemonSet : 部署守护进程
- Job : 一次性任务
- cronJob : 定时任务
# 2.pod和controller之间的关系
- pod是通过Controller实现应用的运维(弹性伸缩、滚动升级)
- pod通过打标签来和controller建立关系
# 3.Deployment控制器应用场景
- 部署无状态应用
- 管理Pod和ReplicasSet(副本)
- 部署、滚动升级... 应用场景:web服务、微服务
用命令行创建的只用于学习和测试,一般还是用yaml文件来声明式创建
kubectl create deployment web --image=nginx
1
# 4.yaml文件字段说明
# 5.Deployment控制器部署应用
- 生成一个pod的yaml文件
kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml
1
- 部署一个pod
kubectl apply -f web.yaml
1
2
2
- 对外发布(暴露端口号)
kubctl expse deployment web --port=80 --type=nodePort --target-port=80 --name=web-demo -o
-o yaml > web1.yaml
1
2
2
# 6.升级回滚
- eg: 升级一个Nginx应用的Nginx镜像版本
kuebctl set image deployment web nginx=nginx:1.1.7
1
除了用命令,也可以直接改yaml文件中的镜像版本和副本数量
并且升级过程中pod的应用服务不会中断,因为下载新的之后并且启动了容器才会替换之前的旧副本应用
- 查看deployment的升级状态
kubectl rollout status deployment web
1
- 回滚(rollout) 查看历史版本
kubectl rollout history deployment web
1
# 7.弹性伸缩
- replicas(副本)
- 也可以 kubectl scale 命令 来进行deployment中pod的容器副本
# 8.无状态和有状态应用的区别
- 无状态 可用deployment来部署
- 可以认为pod都是一样的
- 没有顺序要求
- 不用考虑在哪个node运行
- 随意进行伸缩和扩展
- 有状态
上面无状态的因素都需要考虑
让每个pod独立,保持pod启动顺序和唯一性
- 唯一的网络标识符,数据持久存储
- 有序,比如mysql的主从
如何部署有状态应用
- 需要有一个无头 service (即一个service的 ClusterIp : none)
- 通过 SatefulSet 来部署
# 9.DaemonSet
# 10. Job
kubectl get jobs
1
backoffLimit: 重启策略 4次