Kubernetes学习(二):工作负载

本节概述一些常用工作负载,并介绍一些关键配置

工作负载是在 Kubernetes 上运行的应用程序,它们由各自的yaml文件来配置其运行规则,并使用 kubectl create 来创建

目录

Pod

生命周期

Pod阶段

容器状态

ReplicaSet

Deployment

StatefulSet

DaemonSet 

Job

CronJob


Pod

Pod 是 Kubernetes 集群中的最小计算单元。代表集群中一组运行的容器,这些容器共享存储,网络。通常不会被直接创建(指 yaml 文件里写 kind:Pod 的方式),而是通过诸如 Deployment,DeamonSet 等控制器来创建。

  • 通过其 yaml 中的 metadata.labels 来表明自己的标签(这相当重要,因为其他控制器以此作为判断标准该控制哪些 Pod )
  • 通过其 yaml 中的 spec.containers 来表明内部的容器

生命周期

Pod 启示于 Pending 阶段,至少有一个主要容器正常启动,则进入 Running 阶段,然后根据Pod中的容器是正常结束还是失败终止而进入 Succeeded 或 Failed 阶段。

在 Pod 的生命周期里只会被调度一次。一旦 Pod 被调度到某一节点,会一直在该节点运行直到被删除。

Pod 不具备自愈性,节点失效,调度操作失败,节点资源耗尽都会导致 Pod 被删除。被“重新调度”的Pod是一个全新的 Pod。

Pod阶段

阶段描述
Pending(悬决)Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。
Running(运行中)Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。
Succeeded(成功)Pod 中的所有容器都已成功终止,并且不会再重启。
Failed(失败)Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。
Unknown(未知)因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。

如果某节点死掉或者与集群中其他节点失联,Kubernetes 会实施一种策略,将失去的节点上运行的所有 Pod 的 phase 设置为 Failed。

容器状态

状态描述
Waiting(等待)容器仍在进行启动所需操作,kubectl descibe pod <podname>可查看等待原因。
Running(运行中)容器正常运行中,kubectl descibe pod <podname>可查看运行信息。
Terminated(已终止)容器正常结束或者因某些原因失败,kubectl descibe pod <podname>可查看原因,退出代码,起止时间。

ReplicaSet

ReplicaSet 是负责控制集群中Pod副本的稳定,如针对某类 Pod 指定副本数为3,即集群中同一时刻最多有三个这类 Pod。通常不会被直接创建,而是通过一个更高级的概念 Deployment 来管理

  • 通过其 yaml 文件中 spec.replicas 的值来指定 Pod 副本数
  • 通过其 yaml 文件中 spec.selector.matchLabels 的值来指定需要负责的 Pod

Deployment

Deployment 可为 ReplicaSet 和 Pod 提供声明式更新的能力。且用于无状态应用的管理(无状态指认为所有 Pod 平等,无需关心在哪个节点运行,随意扩容缩容等)

  • 通过其 yaml 文件中 spec.template 来定义一个 Pod(真正创建 Pod 的描述)
  • 与 ReplicaSet 一样关于副本的控制配置
  • 通过其 yaml 文件中 spec.strategy 来指定 Pod 更新策略,有重新创建(先删除所有 Pod )和滚动更新(一批一批的更新)两种模式

StatefulSet

与 Deployment 类似,管理一组 Pod,不同的是 StatefulSet 是用于管理有状态 Pod 的(比如 zk 集群是一主多从,各个节点会有自己的数据),这种情况需要 Pod 重启后不管被分配到哪个 Node ,也要找到自己之前挂载的卷。

  • StatefulSet 会为N个 Pod 副本分配唯一的序号,从0...N。这样做如果序号为3的 Pod 被删除,那重新创建的也是为序号3的 Pod。且 Pod 的主机名也根据此序号派生,保证网络稳定。
  • 通过其 yaml 文件中 spec.serviceName 的值指定无头服务,可为Pod指定唯一服务名称
  • 通过其 yaml 文件中 spec.volumeClaimTemplates 的值指定持久储存,可为Pod分别挂载一个存储(如果是 Deployment 中的 volumn,则是所有副本共享这个储存)

DaemonSet 

DaemonSet 会保证一部分或所有节点上运行一个 Pod 副本,新节点加入,会为其添加 Pod,节点删除,Pod 回收。

  • 可通过 Node 污点和 Pod 容忍度来控制 Pod 被调度到哪些节点上

Job

Job 会创建一个或多个 Pod 执行任务,并记录完成个数,当完成个数达到规定,即 Job 完成。

  • 通过其 yaml 文件中 spec.completions 的值来指定期望完成个数

CronJob

CronJob 创建基于时间调度的 Jobs。通过 Cron 表达式来配置调度规则

  • 通过其 yaml 文件中 spec.schedule 的值来编写 Cron 表达式
  • 通过其 yaml 文件中 spec.jobTemplate 的来定义一个 Job
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值