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

服务类容器:持续提供服务

工作类容器:一次性任务,处理完后容器就退出

Deployment,replicaset和daemonset都用于管理服务类容器,

对于工作类的容器,我们用job

编辑一个简单的job类型的yml文件

1.apiversion:当前job的apiversion是batch/v1

2.kind:当前的资源类型是job

3.restartpolicy指定什么情况下需要重启容器。对于job只能设置为never或者onfailure

对于其他的controller(比如deployment,replicaset等)可以设置为always

创建job应用

通过kubectl get job进行查看

显示destire为1,成功1

说明是按照预期启动了一个pod,并且成功执行

查看pod的状态

由于myjob的pod处于completed的状态,所以需要加--show-all参数才能显示出来

通过kubectl logs 查看pod标准输出

如果job没有执行成功,怎么办?

修改job.yml文件,故意引起一个错误,然后重新启动myjob

先将原来的job删除

然后重新启动一个新的job

重新启动一个job,我们发现有一个未成功的job,查看pod的时候竟然有两个job相关的pod,目标job只有1个啊,为什么??

我们再次查看一下

目前达到了6个

原因是:当地一个pod启动时,容器失败退出,根据restartPolicy:Never,此失败容器不会被重启,但是job destired的pod是1,目前successful为1。由于我们的命令是错误的,successful永远不能到1,

job contorller会一直创建新的pod达到job得期望状态,最多重新创建6次,因为K8S为job提供了spec.bakcofflimits来限制重试次数,默认为6.

如果将restartpolicy设置为OnFailure会怎么样?我们来实验一下

修改job.yml文件

将restartpolicy修改为OnFailure

重新启动job.yml

pod数量只有1,job为失败得状态

但是pod得restart得次数在变化,说明onfailure生效,容器失败后会自动重启

并行执行job

之前我们得实验都是一次运行一个job里只有一个pod,当我们同时运行多个pod得时候,怎么进行设置呢?

可以通过:parallelism设置

修改job.yml文件

此次我们执行一个job同时运行3个pod

kubectl apply -f job.yml

job一共启动了3个pod,而且AGE相同,说明是并行运行得。

还可以通过completions设置job成功完成pod的总数;

配置含义:每次运行3个pod,知道运行了6个结束

重新执行一下

kubectl apply -f job.yml

也不是很准,但是确实不是同时并行启动的

定时执行job

kubernetes提供了类似crontab定时执行任务的功能

首先修改apiserver使api支持cronjob

vim /etc/kubernetes/manifests/kube-apiserver.yaml

- --runtime-config=batch/v1beta1=true    加入这一行

保存退出

kubectl apiversions   查看api版本(如果这里没有生效的话,需要重启kubelet这个服务)

systemctl restart kubelet.service

修改yml文件如下:

apiVersion: batch/v1beta1         batch/v1beta1当前cronjob的apiserver
kind: CronJob     当前资源类型为cronjob
metadata:
  name: cronjob
spec:
  schedule: "*/1 * * * *"      指定什么时候运行job,格式与linux中的计划任务一致
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["echo","hello k8s job!"]
          restartPolicy: OnFailure
~

运行这个job

kubectl apply -f job.yml

如果出现一下错误请一定要检查yml文件的内容,进行修改

正常运行如下:

查看cronjob

kubectl get cronjob

查看job,通过时间间隔可以看到,每1分种创建一个pod

kubectl get job

查看pod日志

删除cronjob

kubectl delete cronjob cronjob

centos7下kubernetes(11。kubernetes-运行一次性任务)的更多相关文章

  1. Centos7下yum安装kubernetes

    一.前言    Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动态扩缩容等功能套件,目前centos yum源上 ...

  2. centos7下搭建JAVA项目运行环境。 JAVA+MYSQL+TOMCAT+NGINX

    环境: centos 7 64位 一.配置mysql 5.71.下载mysql源安装包wget http://dev.mysql.com/get/mysql57-community-release-e ...

  3. [Kubernetes]关于 Kubernetes ,你想要的,都在这儿了

    陆陆续续,关于 Kubernetes 写了有 20+ 篇文章了. 今天这篇文章来一个整合,从实践到理论,可以按需查看(我是按照博客发表时间来排序的,如果后续有想要更新的内容,也会及时更新到这篇文章中) ...

  4. centos7下kubernetes(3。部署kubernetes)

    环境:三个centos7 K8s2是Master;K8s1是node1:K8s3是node2 官方文档:https://kubernetes.io/docs/setup/independent/ins ...

  5. [Kubernetes]CentOS7下Etcd集群搭建

    Etcd简要介绍 Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息 Etcd构建自身高可用集群主要有三种形式: ①静态发现: 预先已知 Etcd 集 ...

  6. centos7.5下kubeadm安装kubernetes集群安装

    文章是按https://blog.csdn.net/Excairun/article/details/88962769,来进行操作并记录相关结果 版本:k8s V14.0,docker-ce 18.0 ...

  7. [Kubernetes]CentOS7下搭建Harbor仓库

    环境依赖: Harbor仓库需要环境:Python 2.7或以上版本,Docker 1.10或以上,Docker Compose 1.6.0或以上. CentOS7自带Python,所以不需要安装. ...

  8. Centos7 使用 kubeadm 安装Kubernetes 1.13.3

    目录 目录 什么是Kubeadm? 什么是容器存储接口(CSI)? 什么是CoreDNS? 1.环境准备 1.1.网络配置 1.2.更改 hostname 1.3.配置 SSH 免密码登录登录 1.4 ...

  9. centos7使用kubeadm搭建kubernetes集群

    一.本地实验环境准备 服务器虚拟机准备 IP CPU 内存 hostname 192.168.222.129 >=2c >=2G master 192.168.222.130 >=2 ...

  10. 从centos7镜像到搭建kubernetes集群(kubeadm方式安装)

    在网上看了不少关于Kubernetes的视频,虽然现在还未用上,但是也是时候总结记录一下,父亲常教我的一句话:学到手的东西总有一天会有用!我也相信在将来的某一天会用到现在所学的技术.废话不多扯了... ...

随机推荐

  1. 利用好浏览器的空闲时间 --- requestIdleCallback

    页面流畅与 FPS 页面是一帧一帧绘制出来的,当每秒绘制的帧数(FPS)达到 60 时,页面是流畅的,小于这个值时,用户会感觉到卡顿. 1s 60帧,所以每一帧分到的时间是 1000/60 ≈ 16 ...

  2. 前端笔记之JavaScript(六)让人头疼的正则表达式

    一.正则表达式 1.1正则概述和体验 正则表达式是被用来匹配字符串中的字符组合的模式,常用来做表单验证.在JavaScript中,正则表达式也是对象,是一种引用类型. 案例:正确输入一个电话号码,01 ...

  3. 五一之起一台服务器玩玩-centosl系统搭建lamp

    昨天看到有的扫描软件会扫描公网主机开放的端口,我现在就用了ssh远程登录21和22端口那不是很容易被猜想到.so,我决定要改这个端口,同时这个改端口给我打开了防火墙和ip协议和网络安全的大门. 我之前 ...

  4. JDK源码分析(10)之 Hashtable 相关

    本文的目的并不是让你对Hashtable更加了解,然后灵活运用:因为Hashtable的一个历史遗留的类,目前并不建议使用,所以本文主要和HashMap对比,感受同样功能的不同实现,知道什么是好的代码 ...

  5. Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据

    一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 问题二 ...

  6. SpringCloud系列——Feign 服务调用

    前言 前面我们已经实现了服务的注册与发现(请戳:SpringCloud系列——Eureka 服务注册与发现),并且在注册中心注册了一个服务myspringboot,本文记录多个服务之间使用Feign调 ...

  7. mac终端调用编辑器打开文件

    1.调用atom编辑器,前提是编辑器打开, cd+filename 2 .VScode里面: 调用终端:ctrl + `(esc健下面那个) 安装:shift + command+ p 安装如下插件 ...

  8. Java_Object_Date_System等常用类

    01.第一章:Object类_概述 1).什么是"Java类库":指Java语言的官方为我们程序员提供的一些已经写好的,面向某些应用的“类”,这些类会随着JDK一起 发布,我们就业 ...

  9. 设计模式之代理模式(Proxy)(2)

    代理模式是为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,其特征是代理类与委托类有同样的接口. ...

  10. es6 常用方法

    来自 https://www.cnblogs.com/lhl66/p/9555903.html 侵删 来自 https://www.cnblogs.com/lhl66/p/8862106.html 侵 ...