美文网首页
k8s 中的 Deployment,DaemonSet,Job

k8s 中的 Deployment,DaemonSet,Job

作者: wayyyy | 来源:发表于2024-01-08 18:29 被阅读0次

    k8s 通常不会直接创建Pod,而是通过 Controller 来管理Pod的,Controller 定义了Pod的部署特性,比如有几个副本,在什么样的Node上运行等。为了满足不同的业务场景,k8s提供了多种Controller ,包括Deployment,DaemonSet,Job 等。

    Deployment

    配置文件简介
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: web_server
      template:
        metadata:
          labels:
            app: web_server
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.0
    

    使用kubectl apply -f nginx.yml 部署完成我们第一个deployment。

    # kubectl get deployment 
    
    image.png
    伸缩

    伸缩指的是在线增加或减少Pod的副本数。


    image.png

    从上面可以看出,nginx deployment 初始是2个副本,分别被调度到了 viros2 和 viros3 上执行。现在我们将副本数从2改为5。再重新部署,发现新建的副本被部署到了viros1, viros2,viros3。


    image.png

    如果我们再将副本数改为3,再重新部署,发现有2个副本被删除:


    image.png
    Failover

    我们模拟viros3 故障,关闭该节点。

    label 实现控制POD的位置

    默认情况下,Scheduler 会将Pod调度到所有可用的Node,


    DaemonSet

    Deployment 部署的副本Pod 会分布在各个Node上,每个Node可能运行好几个副本。DaemonSet的不同之处在于:每个Node上最多只能运行一个副本。

    DaemonSet 典型应用场景有:

    • 在集群的每个节点上运行的存储Daemon,比如ceph
    • 在每个节点上运行的日志收集的Daemon
    • 在每个节点上运行的监控Daemon,比如 prometheus 的 node exporter

    其实k8s 自己就在用 DaemonSet 运行系统组件:


    image.png

    Job

    容器按照持续运行的时间可分为两类:

    1. 服务类容器
      服务类容器通常持续提供服务,需要一直运行,比如HTTP Server,Daemon 等。
    2. 工作类容器
      工作类容器则是一次性任务,比如批处理程序,完成后容器就退出。

    定义 job.yml 文件如下:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: myjob
    spec:
      template:
        metadata:
          name: myjob
        spec:
          containers:
          - name: hello
            image: busybox
            command: [ "echo", "Hello kids jobs" ]
          restartPolicy: Never
    
    • restartPolicy
      指定什么情况下需要重启容器,对于Job,只能设置为Nerver 或者 OnFailure,对于其他 controller(比如deployment)可以设置为Always。

    通过kubectl apply -f job.yml,启动:

    # kubectl get job
    
    image.png

    我们可以通过查看pod的状态和输出来确定我们Job是否已经成功执行:
    因为pod已经退出,所以我们需要使用-A 选项查看。

    image.png
    Job 的并行性
    定时Job

    Linux 中有cron程序定时执行任务,k8s 中也有 CronJob 提供类似的功能,可以定制执行Job。

    定义 cronjob.yml 文件如下:

    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: mycronjob
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: hello
                image: busybox
                command: [ "echo", "Hello kids cronjobs" ]
              restartPolicy: Never
    

    通过 kubectl apply -f cronjob.yml,启动:

    # kubectl get cronjob
    
    image.png

    可以看到每隔1分钟就会启动一个Job,可以查看相应的Pod输出:


    image.png

    相关文章

      网友评论

          本文标题:k8s 中的 Deployment,DaemonSet,Job

          本文链接:https://www.haomeiwen.com/subject/xtfwndtx.html