常用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)
    image.png
    deployment应用场景:
    image.png
    deployment实例:
    image.png
    使用deployment部署应用:
    1、创建yaml文件:**image.png
    (此处资源名以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对外)
    image.png

    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)