k8s几种pod的控制器

replicationcontroller

选择器

模版

副本数

如果更改选择器,则会创建新的pod

如果更改pod的标签,那么也会创建新的pod进行替换,但是老的pod不会被删除

如果更改模版,比如给加入新标签,那么将在下次替换时用到新模版,这个可以用于升级pod使用

kubectl edit rc kubia 这将在你的默认编辑器中打开Replicationcontroller 的YAML配置。

使用export KUBE_EDITOR="/usr/bin/nano"设置默认编辑器

kubectl delete rc kubia 这是删除replicationcontroller命令,删除rc的同时,pod也会被删除。我们知道rc只是pod的管理器,rc创建的pod不是rc的组成部分,所以我们也可以只删除rc而不删除pod,使用--cascade=false 参数、

kubectl delete rc kubia --cascade=false

最初replicationcontroller 是用于复制和在异常时重新调度节点的唯一kubernetes组建,后来被replicaSet代替了。现在基本上见不到replicationcontroller,但是有的环境还是有可能会有,所以我们还是知道的好。

replicaset我们通常也不会直接创建,而是在创建最高层级的deployment资源时自动创建。

replicaset 与replicationcontroller的区别

replicaset 标签选择器的能力更强。

replicationcontroller只能指定标签名:标签值

replicaset 可以指定env=pro,env=devel ,也可以指定只要包含env标签就行,理解为env=*

虽说不用直接创建,为了学习我们手动创建。

定义replicaset

apiVersion: apps/v1beta2
kind: ReplicaSet
metadata:
  name: kubia
spec:
  replicas: 3
  selector:
    matchLables:
      app: kubia
template:
  metadata:
      lables:
        app:kubia
  spec:
      containers:
      - name:kubia
         image: luska/kubia

template部分和replicationController 一样

selector处不一样。replicationController 用selector ,replicaSet用 selector.matchLables选择器 更简单,更具有表达力

replicaSet 的简写 rs

kubectl get rs

kubectl describe rs

rs 的matchlables 是精确匹配,说rs支持更强表达能力的选择器,是因为rs还有matchExpressions选择器

selector:
    matchExpressions:
        - key: app
           operator: In
           values:
               - kubia

operator(运算符)有四个

In

NotIn

Exists: 必须包含某个key,值不重要,values不应指定

DoesNotExists: 必须不包含某个key, values不应指定

当你的replicaSet 的选择器同时定义了matchLables和 matchExpressions ,必须两个同时满足才能是pod和选择器匹配

kubectl delete rs kubia 删除rs的同时pod也被删除,删除前建议列出pod进行确认

rc,rs 都用于在kubernetes集群上运行指定数量的pod,但他们不关心在哪个节点上运行。有种情况是让每个节点都运行某一个pod比如日志收集,和监控应用。这时候要用到另外一个控制器了DaemonSet.

DaemonSet也使用Pod模版,默认是将模版中的pod,在每个节点中创建pod,但也有特殊情况,只在某特定节点上创建pod,比如不同的硬盘类型。这可以用pod模版的nodeSelector属性指定

apiVersion: apps/v1beta2
kind: DaemonSet
metadata:
    name: ssd-monitor
spec:
    selector:
        matchLables:
            app: ssd-monitor
    template:
        metadata:
            lables:
                app: ssd-monitor
        spec:
             nodeSelector:
                  disk: ssd
             containers:
                  - name: main
                     image: luksa/ssd-monitor

DaemonSet 的简写ds

kubectl get ds

同样删除ds,同时也会删除pod

rc,rs,ds都是持续运行pod也就是pod执行结束或者手动删除pod,这些控制器都会重启pod,有些时候需要让pod运行完成退出后不在重启,并且保证pod如果在运行时异常退出了可以重启的情况。这就需要用到job了。

job管理的pod,正常完成退出后不重启,当节点故障时,会按照replicaSet的pod方式,重新安排到一个新节点。也可以配置job,如果进程异常退出返回错误码时,重启容器。

apiVersion: batch/v1
kind: Job
metadata:
   name: batch-job
spec:
   template:
       metadata:
            lables:
                app: batch-job
       spec:
            restartPolicy: onFailure    Job不能使用Always为默认的重启策略
            containers:
                - name: main
                   image: luksa/batch-job

这里么有定义标签选择器,它将根据pod模版中的标签自动创建标签选择器

onFailure 当容器出错时重启容器,如果时Never将永远不重启

kubectl get jobs

kubectl get po -a 查看被删除的pod

可以配置job 按顺序运行几次

apiVersion: batch/v1
kind: Job
metadata:
   name: batch-job
spec:
   completions: 5
   template:
      ... ...

也可以声明可以并行的数量

apiVersion: batch/v1
kind: Job
metadata:
   name: batch-job
spec:
   completions: 5 共计运行5次
   parallelism: 2  可以并行2个
   template:
      ... ...

parallelism也可以像replicaSet一样扩缩容

kubectl scale job batch-job --replicas 3

job是一次性任务,万一运行卡住了,你永远不知道它的状态,所以你可以限制它运行的时长。超过时长标记为失败,这就需要用到pod中activeDeadlineSeconds 属性来定义运行时长。

同时可以定义job 中spec.backoffLimit配置job被标记为失败之前可以重试的次数。默认为6.

job创建后,立即会运行,但有些时候我们希望定时运行job,这就需要用到kubernetes的CronJob资源

apiVersion: batch/v1beta1
kind: CronJob
metadata:
    name: batch-job-every-fifteen-minutes
spec:
    schedule: "0,15,30,45 * * * *" 每15分钟执行一次并且在0,15,30,45
    JobTemplate:
        spec:
            template:
                matedata:
                     lables:
                         app: periodic-batch-job
                spec:
                     restartPolicy: OnFailure
                     containers:
                        - name: main
                           image: luksa/batch-job

假如我们的任务运行时间要求非常准确,不希望原本定在10:30:00运行的任务拖到10:30:16运行,可能超过15秒运行结果就有偏差了。这时可以设置startingDeadlineSeconds。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
    name: batch-job-every-fifteen-minutes
spec:
    schedule: "0,15,30,45 * * * *" 每15分钟执行一次并且在0,15,30,45
    startingDeadlineSeconds: 15
    JobTemplate:

replicationController,replicaSet,DaemonSet, Job, CronJob 这几种管理pod的控制器的基本内容就这些了。高级用法碰到在了解。

原文地址:https://www.cnblogs.com/zhming26/p/11719406.html

时间: 2024-10-08 19:30:34

k8s几种pod的控制器的相关文章

k8s实践16:使用job控制器备份Mysql容器pod数据库

job配置和简易测试 官方文档 1.job简单介绍 job也是种控制器,k8s有两种类型的控制器,一种是服务类控制器,比如deployment,deamonset,replicaset等等.一种是工作任务类控制器,job和cronjon就是工作任务类控制器. job的简易参数介绍 spec.template格式同Pod RestartPolicy仅支持Never或OnFailure 单个Pod时,默认Pod成功运行后Job即结束. spec.completions标志Job结束需要成功运行的Po

k8s学习 - 概念 - Pod

k8s学习 - 概念 - Pod 这篇继续看概念,主要是 Pod 这个概念,这个概念非常重要,是 k8s 集群的最小单位. 怎么才算是理解好 pod 了呢,基本上把 pod 的所有 describe 和配置文件的配置项都能看懂就算是对 pod 比较了解了. Pod 我们通过调用一个kubectl describe pod xxx 可以查看某个 pod 的具体信息. describe 的信息我们用注释的形式来解读. Name: task-pv-pod Namespace: default // 没

k8s自主式pod之应用策略规则

自主式pod应用 我们接触的pod大多数是控制器控制的pod,那么今天讲的是自主式pod(也就是由yaml文件来创建的pod),也就是pod自己去控制自己,防止pod被控制器杀死. 1,首先我们来创建一个nginx的pod资源对象: 在创建pod之前,我们来查看一下镜像的下载策略: [[email protected] yaml]# kubectl explain pod.spec.containers 查看imagePullpolicy的策略字段: imagePullPolicy <strin

K8S实践Ⅲ(Pod控制器)

一.Deployment Deployment的主要功能就是自动部署一个容器应用的多份副本,以及持续监控副本的数量,在集群内始终维持用户指定的副本数量 1.配置参数 Selector(选择器): .spec.selector是可选字段,用来指定 label selector ,圈定Deployment管理的pod范围.如果被指定, .spec.selector 必须匹配 .spec.template.metadata.labels,否则它将被API拒绝.如果 .spec.selector 没有被

k8s中的pod控制器之Deployment、DaemonSet、StatefulSet

pod控制器分类:1.ReplicationController2.ReplicaSet3.Deployment4.StatefulSet5.DaemonSet6.Job,Cronjob7.HPApod控制器:一般包括3部分1.标签选择器2.期望的副本数(DaemonSet控制器不需要)3.pod模板deploy控制器构建于rs控制器之上,新特性包括:1.事件和状态查看2.回滚3.版本记录4.暂停和启动5.支持两种自动更新方案Recreate删除重建RollingUpdate回滚升级(默认方式)

k8s如何管理Pod(rc、rs、deployment)

是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod).在k8s中我们不会直接操作容器,而是把容器包装成Pod再进行管理(关于Pod,大家可以参考第十期的分享"谈谈Pod在微服务中的运用").Pod是运行服务的基础,那我们如何来管理Pod呢,下面我们就来聊一聊.分为这三个部分: 使用Replication Controller 来部署.升级Pod Replica Set – 下一代Replication Controller Deployment

K8S调度之pod亲和性

[toc] Pod Affinity 通过<K8S调度之节点亲和性>,我们知道怎么在调度的时候让pod灵活的选择node,但有些时候我们希望调度能够考虑pod之间的关系,而不只是pod与node的关系.于是在kubernetes 1.4的时候引入了pod affinity. 为什么有这样的需求呢?举个例子,我们系统服务 A 和服务 B 尽量部署在同个主机.机房.城市,因为它们网络沟通比较多:再比如,我们系统数据服务 C 和数据服务 D 尽量分开,因为如果它们分配到一起,然后主机或者机房出了问题

asp.net.mvc 中form表单提交控制器的2种方法和控制器接收页面提交数据的4种方法

MVC中表单form是怎样提交? 控制器Controller是怎样接收的? 1..cshtml 页面form提交 (1)普通方式的的提交 (2)特殊方式提交 2.控制器处理表单数据的四种方法 方法1:使用传统的Request请求数据 方法2:Action参数名与表单元素name值一一对应 方法3:从MVC封装的FormCollection容器中读取 方法4:使用实体作为Action参数传入,前提是提交的表单元素名称与实体属性名称一一对应 控制器源码 using MvcStudy.Models;u

完美解决K8s中的Pod无法解析外网域名问题

系统:Ubuntu 18.04.02K8s版本:1.13.4 故障现象:安装KubeDNS后,Pod内无法ping通外网域名,访问外网IP.K8s内部域名或者IP均正常.??原因分析,查看Pod中的resolv.conf: kubectl exec busybox -- cat /etc/resolv.conf nameserver 10.96.0.10 search default.svc.cluster.local svc.cluster.local cluster.local option