• kubernetes daemonset和job


    DaemonSet典型应用

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

    DaemonSet的典型应用场景有:

    ·在集群的每个节点上运行存储Daemon,比如glusterd或ceph。
    ·在每个节点上运行日志收集Daemon,比如flunentd或logstash。
    ·在每个节点上运行监控Daemon,比如Prometheus Node ExPorter或collectd。

    其实Kubernetes自己就在用DaemonSet运行系统组件。

    主机查看系统的daemonset组件:

    [root@master ~]# kubectl get daemonsets.apps  -n  kube-system
    NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE
    kube-flannel-ds-amd64     3         3         3       3            3           <none>                        7d1h
    kube-flannel-ds-arm       0         0         0       0            0           <none>                        7d1h
    kube-flannel-ds-arm64     0         0         0       0            0           <none>                        7d1h
    kube-flannel-ds-ppc64le   0         0         0       0            0           <none>                        7d1h
    kube-flannel-ds-s390x     0         0         0       0            0           <none>                        7d1h
    kube-proxy                3         3         3       3            3           beta.kubernetes.io/os=linux   7d1h

    DaemonSet kube-flannel-ds和kube-proxy分别负责在每个节点上运行flannel和kube-proxy组件。

    master主机编写YAML配置文件,然后通过文件创建DaemonSet,最后查看DaemonSet的状态:

    案例:

    [root@master ~]# cat busybox.yml 
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
        name: busybox-daemonset
    spec:
       selector:
         matchLabels:
            app: busybox
       template:
         metadata:
            labels:
             app: busybox
         spec:
           containers:
           - name : test
             image: busybox
             command:
              - sh
              - -c
              - while true;do echo "test";sleep 10;done;
    kubectl apply -f busybox.yml

    查看:

    [root@master ~]# kubectl get daemonsets.apps
    NAME                DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    busybox-daemonset   2         2         2       2            2           <none>          48m
    [root@master ~]# kubectl get pod -o wide
    NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
    busybox-daemonset-lcz4g   1/1     Running   0          49m   10.244.1.15   node1   <none>           <none>
    busybox-daemonset-mz82h   1/1     Running   0          49m   10.244.2.20   node2   <none>           <none>
    [root@master ~]# kubectl logs -f busybox-daemonset-lcz4g

    案例:部署exporter

    [root@master caoyi]# cat node-exporter.yml 
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
        name: exporter-daemonset
    spec:
       selector:
         matchLabels:
            app: node-exporter
       template:
         metadata:
            labels:
             app: node-exporter
         spec:
            hostNatwork: true
         spec:
           containers:
           - name : node-exporter
             image: prom/node-exporter
             command:
              - /bin/node_exporter
              - --path.procfs
              - /host/proc
              - --path.sysfs
              - /host/sys
              - --collector.filesystem.ignored-mount-points
              - ^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/devicemapper|rootfs/var/lib/docker/aufs)($$|/)
             volumeMounts:
              - name: proc
                mountPath: /host/proc
              - name: sys
                mountPath: /host/sys
              - name: root
                mountPath: /rootfs
           volumes:
            - name: proc
              hostPath:
                    path: /proc
            - name: sys
              hostPath:
                   path: /sys
            - name: root
              hostPath:
                   path: /
    [root@master caoyi]# kubectl apply -f node-exporter.yml 

    查看:

    [root@master caoyi]# kubectl get pod -o wide
    NAME                       READY   STATUS    RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
    busybox-daemonset-lcz4g    1/1     Running   0          55m    10.244.1.15   node1   <none>           <none>
    busybox-daemonset-mz82h    1/1     Running   0          55m    10.244.2.20   node2   <none>           <none>
    exporter-daemonset-7qw72   1/1     Running   0          118s   10.244.1.16   node1   <none>           <none>
    exporter-daemonset-pvzjv   1/1     Running   0          118s   10.244.2.21   node2   <none>           <none>

    job

     容器按照持续运行的时间分为两类:服务类容器和工作类容器

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

    kubernetes的deployment、replicaSet 和 DaemonSet都用于管理服务类容器:对于工作类容器,我们用job.

    案例:容器不重启

     模拟job正确的

    [root@master caoyi]# cat myjob.yml 
    apiVersion: batch/v1
    kind: Job    ##指明当前资源的类型为Job
    metadata:
       name: myjob
    spec:
      template:
        metadata:
          name: myjob
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["echo","hello"]
          restartPolicy: Never   ##restartPolicy 指定什么情况下需要重启容器,对于job,只能设置为never或者ONFailure,对于其他的controller(比如deployment)可以设置为Always
    [root@master caoyi]# kubectl get pod -o wide
    myjob-6ll52                0/1     Completed   0          23m   10.244.1.17   node1   <none>           <none>

    模拟失败的job

    在command 处修改一个错误的命令,如果输出一个错误的不存在的命令,启动的时候起不起来,隔一段时间会重新创建一个,直到启动了才会停止

    当第一个pod启动时,容器失败退出,由于设置restartpolicy:Never,此容器不会被重启,但job desired的pod是目前successful为0,达不到要求。所以会启动新的pod知道successful为1。为了终止这个行为,只能删除job。

    案例:容器重启

    [root@master caoyi]# cat myjob.yml 
    apiVersion: batch/v1
    kind: Job
    metadata:
       name: myjob
    spec:
      template:
        metadata:
          name: myjob
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["xxxxx","hello"]
          restartPolicy: OnFailure    ##只有在运行成功才会停止进行重启,只要有错误,它会一直进行重启

    查看

    [root@master caoyi]# kubectl get pod -o wide
    NAME                       READY   STATUS              RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
    busybox-daemonset-lcz4g    1/1     Running             0          109m   10.244.1.15   node1   <none>           <none>
    busybox-daemonset-mz82h    1/1     Running             0          109m   10.244.2.20   node2   <none>           <none>
    exporter-daemonset-7qw72   1/1     Running             0          56m    10.244.1.16   node1   <none>           <none>
    exporter-daemonset-pvzjv   1/1     Running             0          56m    10.244.2.21   node2   <none>           <none>
    myjob-tk5br                0/1     RunContainerError   2          50s    10.244.1.18   node1   <none>           <none>
    
    
    
    
    
    [root@master caoyi]# kubectl get pod -o wide
    NAME                       READY   STATUS             RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
    busybox-daemonset-lcz4g    1/1     Running            0          111m    10.244.1.15   node1   <none>           <none>
    busybox-daemonset-mz82h    1/1     Running            0          111m    10.244.2.20   node2   <none>           <none>
    exporter-daemonset-7qw72   1/1     Running            0          57m     10.244.1.16   node1   <none>           <none>
    exporter-daemonset-pvzjv   1/1     Running            0          57m     10.244.2.21   node2   <none>           <none>
    myjob-tk5br                0/1     CrashLoopBackOff   4          2m19s   10.244.1.18   node1   <none>           <none>

    同时执行多个Job

    [root@master caoyi]# cat myjob.yml 
    apiVersion: batch/v1
    kind: Job
    metadata:
       name: myjob
    spec:
      completions: 6      ##每次运行两个pod,直到共运行6个pod成功完成
      parallelism: 2
      template:
        metadata:
          name: myjob
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["echo","hello"]
          restartPolicy: OnFailure
    [root@master caoyi]# kubectl get pod -o wide
    NAME          READY   STATUS      RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
    myjob-98wf9   0/1     Completed   0          98s    10.244.2.25   node2   <none>           <none>
    myjob-cvq4n   0/1     Completed   0          103s   10.244.2.22   node2   <none>           <none>
    myjob-hgvkb   0/1     Completed   0          101s   10.244.2.23   node2   <none>           <none>
    myjob-kvf4g   0/1     Completed   0          96s    10.244.2.27   node2   <none>           <none>
    myjob-lzckc   0/1     Completed   0          103s   10.244.1.19   node1   <none>           <none>
    myjob-mvv4k   0/1     Completed   0          99s    10.244.1.20   node1   <none>           <none>

    定时执行job

    linux中有cron程序定时执行任务,kubernetes的cronjob提供了类似的功能,可以定时执行job,

    [root@master caoyi]# cat cronjob.yml 
    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
       name: cronjob
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
       spec:
        template:
         spec:
           containers:
           - name: hello
             image: busybox
             command: ["echo","hello"]
           restartPolicy: OnFailure



    [root@master caoyi]# kubectl apply -f cronjob.yml

    查看

    [root@master caoyi]# kubectl get pod -o wide
    No resources found in default namespace.
    
    当前是没有的
    
    1分钟以后
    
    
    [root@master caoyi]# kubectl get pod -o wide
    NAME                       READY   STATUS      RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
    cronjob-1594910220-ddfvc   0/1     Completed   0          16s   10.244.1.23   node1   <none>           <none>
    
    
    
    两分钟后
    
    
    
    [root@master caoyi]# kubectl get pod -o wide
    NAME                       READY   STATUS      RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
    cronjob-1594910280-2fqdr   0/1     Completed   0          2m44s   10.244.1.25   node1   <none>           <none>
    cronjob-1594910340-msnxz   0/1     Completed   0          104s    10.244.1.27   node1   <none>           <none>

     

  • 相关阅读:
    ajax
    cookie
    JavaScript基本语法
    HTML css 格式布局
    HTML 表单
    html 一般标签 常用标签 表格
    WinForm——操作word文档
    WinForm进程 线程
    音乐
    注册 传值
  • 原文地址:https://www.cnblogs.com/cy888888/p/13326318.html
Copyright © 2020-2023  润新知