kubernetes资源对象--pod和job

pod

Pod是K8S的最小操作单元,一个Pod可以由一个或多个容器组成;

整个K8S系统都是围绕着Pod展开的,比如如何部署运行Pod、如何保证Pod的数量、如何访问Pod等。

特点

Pod是能够被创建、调度和管理的最小单元;

每个Pod都有一个独立的IP;

一个Pod由一个或多个容器构成,并共享命名空间和共享存储等;Pod所有容器在同一个Node上;

容器生命周期管理;

对资源使用进行限制,resources(requests、limits);

对容器进行探测:livenessProbe;

集群内的Pod之间都可以任意访问,这一般是通过一个二层网络来实现的。

Pod与容器

在Docker中,容器是最小的处理单元,增删改查的对象是容器,容器是一种虚拟化技术,容器之间是隔离的,隔离是基于Linux Namespace实现的。

而在K8S中,Pod包含一个或者多个相关的容器,Pod可以认为是容器的一种延伸扩展,一个Pod也是一个隔离体,而Pod内部包含的一组容器又是共享的(包括PID、Network、IPC、UTS)。除此之外,Pod中的容器可以访问共同的数据卷来实现文件系统的共享。

资源请求与限制

创建Pod时,可以指定计算资源(目前支持的资源类型有CPU和内存),即指定每个容器的资源请求(Request)和资源限制(Limit),资源请求是容器所需的最小资源需求,资源限制则是容器不能超过的资源上限。关系是: 0<=request<=limit<=infinity

Pod的资源请求就是Pod中所有容器资源请求之和。K8S在调度Pod时,会根据Node中的资源总量(通过cAdvisor接口获得),以及该Node上已使用的计算资源,来判断该Node是否满足需求。

资源请求能够保证Pod有足够的资源来运行,而资源限制则是防止某个Pod无限制地使用资源,导致其他Pod崩溃。特别是在公有云场景,往往会有恶意软件通过抢占内存来攻击平台。

具体配置请见http://blog.csdn.net/liyingke112/article/details/77452630

一pod多容器

Pod主要是在容器化环境中建立一个面向应用的“逻辑主机”模型,它可以包含一个或多个相互间紧密联系的容器。当其中任一容器异常时,该Pod也随之异常。

一pod多容器,让多个同应用的单一容器整合到一个类虚拟机中,使其所有容器共用一个vm的资源,提高耦合度,从而方便副本的复制,提高整体的可用性。

一pod多容器的优势:

同个Pod下的容器之间能更方便的共享数据和通信,使用相同的网络命名空间、IP地址和端口区间,相互之间能通过localhost来发现和通信。

在同个Pod内运行的容器共享存储空间(如果设置),存储卷内的数据不会在容器重启后丢失,同时能被同Pod下别的容器读取。

相比原生的容器接口,Pod通过提供更高层次的抽象,简化了应用的部署和管理,不同容器提供不同服务。Pod就像一个管理横向部署的单元,主机托管、资源共享、协调复制和依赖管理都可以自动处理。

yaml文件格式请见http://blog.csdn.net/liyingke112/article/details/76155428

Job

概念

在有些场景下,是想要运行一些容器执行某种特定的任务,任务一旦执行完成,容器也就没有存在的必要了。在这种场景下,创建pod就显得不那么合适。于是就是了Job,Job指的就是那些一次性任务。通过Job运行一个容器,当其任务执行完以后,就自动退出,集群也不再重新将其唤醒。

从程序的运行形态上来区分,可以将Pod分为两类:长时运行服务(jboss、mysql等)和一次性任务(数据计算、测试)。RC创建的Pod都是长时运行的服务,Job多用于执行一次性任务、批处理工作等,执行完成后便会停止(status.phase变为Succeeded)。

yaml配置参数说明

重启策略

支持两种重启策略:

OnFailure:在出现故障时其内部重启容器,而不是创建。

Never:会在出现故障时创建新的,且故障job不会消失。

设置超时

job执行超时时间可以通过spec.activeDeadlineSeconds来设置,超过指定时间未完成的job会以DeadlineExceeded原因停止

并行

.spec.completions:这个job运行pod的总次数

.spec.parallelism:并发数,每次同时运行多少个pod

当completions少于parallelism,parallelism的值为completions

可以使用kubectl scale命令来增加或者减少completions的值

pod selector

job同样可以指定selector来关联pod。需要注意的是job目前可以使用两个API组来操作,batch/v1和extensions/v1beta1。当用户需要自定义selector时,使用两种API组时定义的参数有所差异。

使用batch/v1时,用户需要将jod的spec.manualSelector设置为true,才可以定制selector。默认为false。

使用extensions/v1beta1时,用户不需要额外的操作。因为extensions/v1beta1的spec.autoSelector默认为false,该项与batch/v1的spec.manualSelector含义正好相反。换句话说,使用extensions/v1beta1时,用户不想定制selector时,需要手动将spec.autoSelector设置为true。

例子

kubectl delete -f kube-lykops-job.yaml
cat << EOF > kube-lykops-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
 labels:
   app: job
   project: lykops
   version: v1
 name: lykops-job
 namespace: default
spec:
 completions: 50
 parallelism: 5
 template:
   metadata:
     labels:
       app: job
       job-name: lykops-job
       project: lykops
       version: v1
     name: lykops-job
   spec:
     containers:
     - command: ['sleep','60']
       image: web:apache
       name: lykops-job
     restartPolicy: Never
EOF
kubectl create -f kube-lykops-job.yaml

细节

job执行完后,不会自动启动一个新的pod,pod也不会被自动删除。

使用kubectl get pod无法显示执行完的job的pod,需要添加参数—all-show或者-a,kubectl get pods -a。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kubernetes 是一个开源的容器编排工具,可以帮助用户自动化部署、扩展和管理容器化应用程序。在 Kubernetes 中,资源对象是指用于描述和管理集群中各种资源的抽象概念。 以下是 Kubernetes 中常见的资源对象类型: 1. Pod(容器组):PodKubernetes 中最小的可部署对象,通常包含一个或多个容器,共享同一个网络命名空间和存储卷。 2. ReplicaSet(副本集):ReplicaSet 用于管理一组相同的 Pod 副本,保证在集群中的任何时间都有指定数量的副本运行。 3. Deployment(部署):Deployment 是一种管理 Pod 和 ReplicaSet 的高级对象,用于实现容器化应用程序的滚动更新和回滚。 4. Service(服务):Service 提供了一种逻辑方式来访问一组 Pod,通常用于将网络流量路由到后端的 Pod。 5. ConfigMap(配置映射):ConfigMap 用于存储集群中的配置数据,例如应用程序的环境变量和配置文件。 6. Secret(密钥):Secret 用于存储敏感信息,例如密码和证书,以安全地在集群中传输和存储。 7. PersistentVolume(持久卷):PersistentVolume 用于将持久化存储抽象出来,使其在不同的存储系统之间具有可移植性。 8. StatefulSet(有状态集):StatefulSet 用于管理具有唯一标识和稳定网络标识符的 Pod,通常用于运行需要持久化存储和有状态服务的应用程序。 这些资源对象Kubernetes 集群中的基本构建块,使用它们可以轻松地管理和扩展容器化应用程序。 ### 回答2: Kubernetes中的资源对象是指在Kubernetes集群中由用户定义和管理的各种资源类型,用于表示和控制应用程序、服务和基础设施等方面的相关资源Kubernetes提供了多种资源对象,包括但不限于以下几种: 1. Pod(容器组):PodKubernetes中最小的可调度和部署单元,可以包含一个或多个容器。Pod通常将相关的容器组合在一起,共享网络和存储,并提供容器之间的通信和数据共享。 2. ReplicaSet(副本集):ReplicaSet用于定义和管理Pod的集合。它确保指定数量的Pod副本运行,并根据需要自动进行缩放,以实现应用程序的高可用性和负载均衡。 3. Deployment(部署):Deployment是ReplicaSet的高级抽象,用于实现无缝的应用程序部署和升级。它可以定义应用程序的副本数、升级策略和滚动升级等参数,并确保在应用程序版本变更时无需停机。 4. Service(服务):Service定义了一组Pod的访问方式和网络连接,提供了一个稳定的地址和端口,使得其他Pod或外部用户能够与应用程序进行通信。 除了上述常用资源对象,还有诸如ConfigMap(配置映射)、Secret(密钥)、Namespace(命名空间)等资源对象,它们用于管理和传递应用程序的配置信息、敏感数据和资源隔离等方面的需求。 通过使用这些资源对象,用户可以方便地定义和管理各种不同类型的应用程序和服务,并通过Kubernetes提供的强大的调度和管理功能,实现高可用性、弹性伸缩和自动化的应用程序部署和运维。 ### 回答3: Kubernetes 中的资源对象是指在集群中定义和管理的可部署的计算资源。它们用来描述和控制应用程序的部署、扩展和管理。Kubernetes 中有多种资源对象可供使用,如下所示: 1. Pod: PodKubernetes 中最小的可部署对象单元。它由一个或多个容器组成,并共享相同的网络和存储资源Pod 可以用来运行一个或多个容器应用程序。 2. Deployment: Deployment 是用来管理 Pod资源对象。它定义了一组 Pod 的副本,并负责监控和维护这些 Pod 的状态。通过 Deployment,可以方便地进行应用的部署、升级和回滚操作。 3. Service: Service 是用来暴露 Pod 的网络服务资源对象。它为一组 Pod 提供了一个统一的访问入口,并负责将请求按照相应的负载均衡算法分发给后端的 Pod。 4. Volume: Volume 是用来管理 Pod 中的存储资源资源对象。它可以将外部存储系统挂载到 Pod 中,以便应用程序可以进行持久化数据的存储。 此外,Kubernetes 还提供了许多其他类型的资源对象,如 StatefulSet、DaemonSet、Job、CronJob 等,用于满足不同应用程序的需求。这些资源对象可以通过 YAML 或 JSON 文件进行定义和配置,并通过 Kubernetes API 进行管理和操作。 通过使用 Kubernetes资源对象,我们可以更方便地管理和部署应用程序,实现高可用性和弹性的系统架构,提高应用程序的可靠性和可扩展性。它为开发人员和运维人员提供了一种简单而强大的方式来管理和扩展应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值