首页 > 其他 > 详细

k8s pod 控制器(二)

时间:2021-04-20 13:33:03      阅读:58      评论:0      收藏:0      [点我收藏+]
pod控制器进阶

DaemonSet

  • DaemonSet能够让所有(或者特定)的节点运行同一个pod。
  • 当节点加入到K8S集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从K8S集群中被移除,被DaemonSet调度的pod会被移除
  • 如果删除DaemonSet,所有跟这个DaemonSet相关的pods都会被删除。
  • 如果一个DaemonSet的Pod被杀死、停止、或者崩溃,那么DaemonSet将会重新创建一个新的副本在这台计算节点上。
  • DaemonSet一般应用于日志收集、监控采集、分布式存储守护进程等。

1, 编写YAML文件

vim daemonset-nginx.yml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-nginx         
spec:
  selector:
    matchLabels:
      name: nginx-ds
  template:
    metadata:
      labels:
        name: nginx-ds
    spec:
      tolerations:                      # tolerations代表容忍
      - key: node-role.kubernetes.io/master  # 能容忍的污点key
        effect: NoSchedule   # kubectl explain pod.spec.tolerations查看(能容忍的污点effect)
      containers:
      - name: c1
        image: nginx:1.15-alpine
        imagePullPolicy: IfNotPresent
        resources:    # resources资源限制是为了防止master节点的资源被占太多(根据实际情况配置)
          limits:
            memory: 100Mi
          requests:
            memory: 100Mi

2, apply应用YAML文件

kubectl apply -f daemonset-nginx.yml

3, 验证

kubectl get daemonset # daemonset可简写为ds

技术分享图片

kubectl get pods -o wide
k8s集群中每个节点都会运行一个pod

补充:

daemonset不能像replicaset那样扩容,裁剪,但可以像deployment那样升级,操作如下:

kubectl set image daemonset daemonset-nginx c1=nginx:1.17-alpine --record

kubectl describe pod daemonset-nginx-dhhg6 |grep -i image

技术分享图片

会一个一个的升级,升级完后,用下面命令验证,确实升级到了1.17版本

Job

  • 对于ReplicaSet而言,它希望pod保持预期数目、持久运行下去,除非用户明确删除,否则这些对象一直存在,它们针对的是耐久性任务,如web服务等。
  • 对于非耐久性任务,比如压缩文件,任务完成后,pod需要结束运行,不需要pod继续保持在系统中,这个时候就要用到Job。
  • Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。

案例1: 计算圆周率2000位

1, 编写YAML文件

vim job.yml

apiVersion: batch/v1
kind: Job
metadata:
  name: pi          # job名
spec:
  template:
    metadata:
      name: pi      # pod名
    spec:
      containers:
      - name: pi       # 容器名
        image: perl    # 此镜像有800多M,可提前导入到所有节点,也可能指定导入到某一节点然后指定调度到此节点
        imagePullPolicy: IfNotPresent
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never   # 执行完后不再重启

2, 应用YAML文件创建job

kubectl apply -f job.yml

3, 验证

kubectl get jobs

技术分享图片

kubectl get pods

技术分享图片

Completed状态,也不再是ready状态

kubectl logs pi-v79kf

技术分享图片

案例2: 创建固定次数job

1, 编写YAML文件

vim job2.yml

apiVersion: batch/v1
kind: Job
metadata:
  name: busybox-job
spec:
  completions: 10                                               # 执行job的次数
  parallelism: 1                                                # 执行job的并发数
  template:
    metadata:
      name: busybox-job-pod
    spec:
      containers:
      - name: busybox
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["echo", "hello"]
      restartPolicy: Never

2, 应用YAML文件创建job

kubectl apply -f job2.yml

3, 验证

kubectl get job

技术分享图片

36秒左右结束

kubectl get pods

技术分享图片

CronJob

类似于Linux系统的crontab,在指定的时间周期运行相关的任务

1, 编写YAML文件

vim cronjob.yml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob1
spec:
  schedule: "* * * * *"                 # 分时日月周
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo hello kubernetes
            imagePullPolicy: IfNotPresent
          restartPolicy: OnFailure

2, 应用YAML文件创建cronjob

kubectl apply -f cronjob.yml

3, 查看验证

kubectl get cronjob

技术分享图片

kubectl get pods

技术分享图片

技术分享图片

看AGE时间,每分钟整点执行一次

k8s pod 控制器(二)

原文:https://blog.51cto.com/u_13760351/2718540

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!