k8s的pod

一、Pod的分类

自主式Pod :

控制器管理的Pod:Kubernetes使用更高级的称为Controller的抽象层,来管理Pod实例。每个Pod都有一个特殊的被称为“根容器”的Pause容器。

Pod与controllers的关系

• controllers:在集群上管理和运行容器的对象

• 通过label-selector相关联

• Pod通过控制器实现应用的运维,如伸缩,升级等

二、Pod容器分类

• Infrastructure Container:基础容器 • 维护整个Pod网络空间

• InitContainers:初始化容器 • 先于业务容器开始执行

• Containers:业务容器 • 并行启动

三、Pod存活性探测(健康检查)

Probe有以下两种类型:

livenessProbe:指示容器是否正在运行。如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其 重启策略 的影响。如果容器不提供存活探针,则默认状态为 Success。

readinessProbe:指示容器是否准备好服务请求。如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址。初始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状态为 Success。

Probe支持以下三种检查方法:

httpGet 发送HTTP请求,返回200-400范围状态码为成功。

exec 执行Shell命令返回状态码是0为成功。

tcpSocket

发起TCP Socket建立成功。

四、Pod的资源限制

Pod和Container的资源请求和限制:

• spec.containers[].resources.limits.cpu

• spec.containers[].resources.limits.memory

• spec.containers[].resources.requests.cpu

• spec.containers[].resources.requests.memory

五、Pod资源调度

在调度的过程当中有3个阶段:节点预选、节点优选、节点选定,从而筛选出最佳的节点。

节点预选:基于一系列的预选规则对每个节点进行检查,将那些不符合条件的节点过滤,从而完成节点的预选

节点优选:对预选出的节点进行优先级排序,以便选出最合适运行Pod对象的节点

节点选定:从优先级排序结果中挑选出优先级最高的节点运行Pod,当这类节点多于1个时,则进行随机选择

当我们有需求要将某些Pod资源运行在特定的节点上时,我们可以通过组合节点标签,以及Pod标签或标签选择器来匹配特定的预选策略并完成调度,如MatchInterPodAfinity、MatchNodeSelector、PodToleratesNodeTaints等预选策略,这些策略常用于为用户提供自定义Pod亲和性或反亲和性、节点亲和性以及基于污点及容忍度的调度机制。

六、Pod的控制器Controllers

• Deployment : 无状态应用部署

• StatefulSet : 有状态应用部署

• DaemonSet : 确保所有Node运行同一个Pod

2.Deployment:工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还提供声明式配置。

Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新。

只需要在 Deployment 中描述想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。也可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。

3.DaemonSet:用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如ELK服务

特性:服务是无状态的

服务必须是守护进程

DaemonSet确保全部(或者一些)Node上运行一个Pod的副本。当有 Node 加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

Deployment

• 部署无状态应用

• 管理Pod和ReplicaSet

• 具有上线部署、副本设定、滚动升级、回滚等功能 • 提供声明式更新,例如只更新一个新的Image

应用场景:Web服务

SatefulSet

• 部署有状态应用

• 解决Pod独立生命周期,保持Pod启动顺序和唯一性

1. 稳定,唯一的网络标识符,持久存储

2. 有序,优雅的部署和扩展、删除和终止

3. 有序,滚动更新

应用场景:数据库

SatefulSet

StatefulSet与Deployment区别:有身份的! 身份三要素:

• 域名

• 主机名

• 存储(PVC)

Headless Service(无头服务)用于为Pod资源标识符生成可解析的DNS记录。

volumeClaimTemplates (存储卷申请模板)基于静态或动态PV供给方式为Pod资源提供专有的固定存储。

StatefulSet,用于管控Pod资源。

有状态集群服务的两个需求,一个是存储需求。另一个是集群需求 。

对存储需求,Kubernetes的解决方案是Volume、Persistent Volume 。对PV,除了手动创建PV池外,还可以通过Storage Class来让存储系统自动创建。

对集群需求,Kubernetes的解决方案是Pet Set。Pet Set 又通过Init Container来做集群初始化,通过Headless Service来为集群成员提供稳定 的网络身份。

原文地址:https://www.cnblogs.com/muzinan110/p/11105828.html

时间: 2024-11-09 19:48:50

k8s的pod的相关文章

K8s的POD连接数据库时报错

[[email protected] xxxx]# ./showlog.sh dr iff-dr-1128668949-lb90g 2017-09-29 03:21:57,575 INFO [org.wildfly.swarm] (main) WFSWARM0013: Installed fraction: Logging - STABLE org.wildfly.swarm:logging:2017.8.1 2017-09-29 03:21:57,612 INFO [org.wildfly.s

K8s之Pod进阶

注意此篇文章接上篇:K8s之Pod资源管理及创建Harbor私有镜像仓库https://blog.51cto.com/14464303/2471369 一.资源限制: pod和container的资源请求和限制: spec.containers[].resources.limits.cpu #cpu上限 spec.containers[].resources.limits.memory #内存上限 spec.containers[].resources.requests.cpu #创建时分配的基

k8s更新Pod镜像

实际使用k8s中,如果使用RC启动pod可以直接使用滚动更新进行pod版本的升级,但是我们使用的情况是在pod里面启动有状态的mysql服务,没有和RC进行关联,这样更新的时候只能通过 更新pod的配置直接替换的形式进行更新了,以下脚本是我们进行更新的简单脚本: #!/bin/bash #命名空间 ns=$1 #pod名称 podname=$2 #获取pod yaml配置 /root/k8s.sh th --namespace=$ns get pods $podname -o yaml > &quo

k8s 之 pod 启动时使用本地镜像仓库时,仓库的认证方法

docker 的本地仓库认证和 Kubernetes 对本地仓库的认证是分开的~~~k8s 拉镜像用的是自己和仓库之间的认证:这个挺坑.的 docker配置本地仓库的认证 Docker version 1.13.1这个老版本的docker要认证本地仓库需要先加配置文件 vim /etc/sysconfig/docker OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecur

k8s之Pod健康检测

对于Pod的健康状态检测,kubernetes提供了两类探针(Probes)来执行对Pod的健康状态检测:LivenessProbe和ReadinessProb. LivenessProbe:用于判断容器是否存活,即running状态,如果LivenessProbe探针探测到容器不健康,则kubelet将kill掉容器,并根据容器的重启策略是否重启,如果一个容器不包含LivenessProbe探针,则Kubelet认为容器的LivenessProbe探针的返回值永远成功.ReadinessPro

解决k8s出现pod服务一直处于ContainerCreating状态的问题的过程

参考于: https://blog.csdn.net/learner198461/article/details/78036854 https://liyang.pro/solve-k8s-pod-containercreating/ https://blog.csdn.net/golduty2/article/details/80625485 根据实际情况稍微做了修改和说明. 在创建Dashborad时,查看状态总是ContainerCreating [[email protected] k8

k8s的Pod状态和生命周期管理

Pod状态和生命周期管理 一.什么是Pod? 二.Pod中如何管理多个容器? 三.使用Pod 四.Pod的持久性和终止 五.Pause容器 六.init容器 七.Pod的生命周期 (1)Pod phase(Pod的相位) (2)Pod的创建过程 (3)Pod的状态 (4)Pod存活性探测 (5)livenessProbe和readinessProbe使用场景 (6)Pod的重启策略 (7)Pod的生命 (8)livenessProbe解析 一.什么是Pod? Pod是kubernetes中你可以

k8s之pod控制器

Pod控制器类型: ReplicationController  à Replicaset Replicaset:维持用户期望的pod副本数  标签选择器:以便选定由自己选定管理的pod副本  pod资源模板:完成pod资源的新建 特点:管理无状态的pod资源,精确反映用户所定义的目标数量 K8s不建议直接使用Replicaset,而是使用Deployment Deployment:工作在replicaset上,通过控制replicaset来控制pod Deployment具备replicase

k8s 中Pod,Deployment,ReplicaSet,Service关联、关系分析

# 分析 pod首先,我们先从最小的调度单位pod开始.我的k8s集群中目前有一个pod,它的name为admin-mysql-1d29997-5db458497c-h6rrs [[email protected] ~]# kubectl get pod admin-mysql-1d29997-5db458497c-h6rrs NAME READY STATUS RESTARTS AGE admin-mysql-1d29997-5db458497c-h6rrs 1/1 Running 0 5d2

k8s之pod调度详解

通常情况下,使用的都是k8s默认的调度调度方式,但是在有些情况下,我们需要将pod运行在具有特点的标签的node上才能都运行,这个时候,pod的调度策略就不能使用k8s默认的调度策略了,这个时候,就需要指定调度策略,告诉k8s需要将pod调度到那些node(节点)上. nodeSelector常规情况下,会直接使用nodeSelector这种调度策略.labels(标签) 是k8s里面用来编标记资源的一种常用的方式,我们可以给node标记特殊的标签,然后nodeSelector会将pod调度到带