Controller
1. 什么是controller
在集群上管理和运行容器的对象
2. Pod 和 Controller 的关系
Pod 是通过controller 实现应用的运维,比如伸缩,滚动升级等等
Pod 和controller 之间通过label 标签建立关系
3. Deployment 控制器应用场景
部署无状态应用
管理Pod和 ReplicaSet
部署,滚动升级等功能
一般用于 web服务,微服务
4. yaml 文件字段说明、使用yaml文件部署应用
- 导出yaml文件
kubectl create deployment web --image=nginx --dry-run -o yaml > web.yamll
- 使用 yaml 文件部署应用
kubectl apply -f web.yamll
- 对外发布(暴露端口号)
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml
- 对外发布
kubectl apply -f web1.yaml
5. Deployment 控制器部署应用
6. 升级回滚
1 | 应用升级 |
7. 弹性伸缩
1 | kubectl scale deployment web --replicas=10 |
8. 无状态和有状态应用
无状态
- 认为pod都是一样的
- 没有顺序要求
- 不用考虑在那个 node 运行
- 随意进行伸缩和扩展
有状态
- 上面因素都需要考虑到
- 让每个Pod独立的,保持Pod启动顺序和唯一性
- 唯一的网络标识符,持久存储
- 有序,比如mysql主从
9. 部署有状态应用
无头 service:ClusterIP的值为none
Satefulset 部署有状态应用
10. deployment 和statefuset 区别
statefueset:有身份的(唯一标识的)、根据主机名+按照一定规则生成域名
每个pod有唯一主机名、唯一域名
11. 部署守护进程 DaemonSet
在每个node 上运行一个pod,新加入的node 也同样运行在一个pod里面