常用controller:
- Deployment
Deployment 是最常用的 Controller,比如我们可以通过创建 Deployment 来部署应用的。Deployment 可以管理 Pod 的多个副本,并确保 Pod 按照期望的状态运行。
- ReplicaSet
ReplicaSet 实现了 Pod 的多副本管理。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,我们通常不需要直接使用 ReplicaSet。
- DaemonSet
DaemonSet 用于每个 Node 最多只运行一个 Pod 副本的场景。正如其名称所揭示的,DaemonSet 通常用于运行 daemon。
- StatefuleSet
StatefuleSet 能够保证 Pod 的每个副本在整个生命周期中名称是不变的。而其他 Controller 不提供这个功能,当某个 Pod 发生故障需要删除并重新启动时,Pod 的名称会发生变化。同时 StatefuleSet 会保证副本按照固定的顺序启动、更新或者删除。
- Joba
Job 用于运行结束就删除的应用。而其他 Controller 中的 Pod 通常是长期持续运行。
deployment
controller中部署无状态应用的方式,可以建立相同应用的不同副本
pod通过controller来实现对应用的伸缩回滚,pod和controller之间建立联系通过label标签对应来实现
deployment部署一个应用会生成一个pod将其封装,并被分配到某个节点中去(controller创建pod)
deployment应用场景:

deployment实例:
使用deployment部署应用:
1、创建yaml文件:**
(此处资源名以web为例)
—dry-run:想在集群中执行(但还未)
-o yaml:不让资源在集群中正真创建而是只生成yaml文件
—image==nginx:拉取nginx的镜像
2、执行yaml文件,创建nginx应用:kubectl apply -f web.yaml
3、暴露端口:kubectl expose deployment web —port 80 —type=NodePort —target-port=80 —name=web1 -o yaml > web1.yaml
注:—port 80是nginx自身端口号
—target-port对外端口(我理解为创建svc后由于冲突会将80变为了下图30048)
—name给本次发布定义名称
>生成web1.yaml文件(与web区分)
4、再次执行yaml文件(web1),实现对外发布,外部可以访问(80为对内,30048对外)
deployment应用升级回滚和弹性伸缩:
kubectl set image deployment web nginx=nginx:1.15
查看升级状态,是否成功:kubectl rollout status deployment web
回滚到上一版本:kubectl rollout undo deployment web
查看升级版本:kubectl rollout history deployment web
回滚到指定版本:kubectl rollout undo deployment web —to-revision=1(版本对应编号)
弹性伸缩,为一个应用创建多个副本应用:kubectl scale deployment web —replicas=10
Statefulset、Daemonset、job/cronjob**(尚硅谷35、36)
