![](https://img-blog.csdnimg.cn/20210412222917606.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Kubernetes Pod
文章平均质量分 80
k8sssssssssssss
富士康质检员张全蛋
人生实难,唯有自渡。只有接受了真实现的现状和真实的自己,调整好心态,才能脚踏实地的活着,然后去发现角落处的那些惊喜和美好,去相信一切苦难困境都会过去!“即使身处阴沟,也要记得仰望星空”。
展开
-
Kubernnetes pod健康检查:存活性探测&就绪性探测
(你创建了一个Pod,发现pod是running状态,而且处于ready状态,但是pod里面部署的容器想要访问的时候就还是访问不了,这是因为你的pod没有做健康检查,ReadinessProbe主要来确定容器是否已经就绪: 只有当Pod里的容器部署的应用都处于就绪状态,如果没有探针,k8s无法知道应用是否还活着,只要pod还在运行,k8s则认为容器是健康的。看Pod里容器部署的应用是否就绪,是否可以对外提供服务。,如果连接建立则探测成功,否则探测失败容器重启。探测Pod里的容器是否启动成功,原创 2021-07-19 10:05:59 · 140 阅读 · 0 评论 -
Kubernetes 为pod指定DNS
所以说当创建pod的时候,并没有指定使用的是哪个DNS服务器,pod里面指定的是clusterfirst,优先使用集群里面的dns,kubelet知道既然使用集群里面的dns,那么集群里面的dns就是clusterdns 10.96.0.10。这里有dnsPolicy,设置为ClusterFirst ,表示优先使用集群里面的DNS服务器,那么集群里面的DNS服务器是谁呢?那么创建pod的时候可不可以去修改它所使用的dns呢?这样创建的pod不再使用集群里面的dns了,而是使用指定的dns,原创 2024-07-09 20:10:51 · 948 阅读 · 0 评论 -
Kubernetes 服务部署最佳实践(一)
request 的值并不是指给容器实际分配的资源大小,它仅仅是给调度器看的,调度器会 "观察" 每个节点可以用于分配的资源有多少,也知道每个节点已经被分配了多少资源。被分配资源的大小就是节点上所有 Pod 中定义的容器 request 之和,它可以计算出节点剩余多少资源可以被分配(可分配资源减去已分配的 request 之和)。如果发现节点剩余可分配资源大小比当前要被调度的 Pod 的 reuqest 还小,那么就不会考虑调度到这个节点,反之,才可能调度。所以,如果不配置 request,那么调度器就不能知原创 2024-06-15 10:38:16 · 2185 阅读 · 0 评论 -
kubectl top用法
kubectl top命令是Kubernetes的一个子命令,用于查看集群中各个资源对象的CPU和内存使用情况。通过kubectl top命令,我们可以实时监控集群中各个Pod、Node资源对象的资源消耗情况,从而进行性能调优和资源管理。原创 2024-04-30 15:28:30 · 968 阅读 · 0 评论 -
Kubernetes 灰度/滚动发布 滚动更新速率控制解读 maxUnavailable,maxSurge
利用kubernetes的滚动更新时,可能经常遇到发布“太快不稳定”或“太慢体验差”的情况。本文将介绍kubernetes滚动更新控制速率的特性。含义服务在滚动更新时,deployment控制器的目的是:给旧版本(old_rs)副本数减少至0、给新版本(new_rs)副本数量增至期望值(replicas)。大家在使用时,通常容易忽视控制速率的特性,以下是kubernetes提供的两个参数:maxUnavailable:和期望ready的副本数比,不可用副本数最大比例(或最大值),这个....原创 2020-11-10 17:34:14 · 14959 阅读 · 4 评论 -
Kuibernetes 如何根据不同业务场景调节 HPA 扩缩容灵敏度
比如数据处理管道的场景,扩容指标是队列中的事件数量, 当队列中堆积了大量事件时,我们希望可以快速扩容,但又不希望太灵敏,因为可能只是短时间内的事件堆积,即使不扩容也可以很快处理掉。如果流量高峰过了,并发量骤降,如果用默认的缩容策略,等几分钟后 Pod 数量也会随之骤降,如果 Pod 缩容后突然又来一个流量高峰,虽然可以快速扩容,但扩容的过程毕竟还是需要一定时间的,如果流量高峰足够高,默认的扩容算法会在较短的时间内扩容,针对这种场景我们可以给扩容增加一个时间窗口以避免毛刺导致扩容带来的资源浪费,原创 2023-08-06 20:06:19 · 398 阅读 · 0 评论 -
Kubernetes 为什么我们需要Pod?
在前面的文章中,我详细介绍了在 Kubernetes 里部署一个应用的过程。在这些讲解中,我提到了这样一个知识点:Pod,是 Kubernetes 项目中最小的 API 对象。如果换一个更专业的说法,我们可以这样描述:Pod,是 Kubernetes 项目的原子调度单位。不过,我相信你在学习和使用 Kubernetes 项目的过程中,已经不止一次地想要问这样一个问题:为什么我们会需要 Pod?是啊,我们在前面已经花了很多精力去解读 Linux 容器的原理、分析了 Docker 容器的本质,终于,“N转载 2022-01-16 14:34:59 · 603 阅读 · 0 评论 -
Kubernetes Static Pod (静态Pod)
堆叠etcd集群:一个集群里面有3个master,每个master里面都有etcd这个pod,这个pod通常通过kubelet自管理。kubelet会去读取一个config,这个config定义了static pod path,kubelet它本身的作用是维护pod的生命周期,他有几种方式来加载pod的清单,一种方式是监听api server,还有一种方式是它会去扫描本地的static pod path,扫描这个目录,它要去看这个目录里面有没有pod清单,如果有的话就直接加载。这种模式就是etcd会在每个m原创 2022-07-07 21:35:54 · 1265 阅读 · 0 评论 -
Kubernetes 深入解析Pod对象(一):基本概念
现在,你已经非常清楚:Pod,而不是容器,才是 Kubernetes 项目中的最小编排单位。将这个设计落实到 API 对象上,容器(Container)就成了 Pod 属性里的一个普通的字段。那么,一个很自然的问题就是:到底哪些属性属于 Pod 对象,而又有哪些属性属于 Container 呢?要彻底理解这个问题,你就一定要牢记我在上一篇文章中提到的一个结论:Pod 扮演的是传统部署环境里“虚拟机”的角色。这样的设计,是为了使用户从传统环境(虚拟机环境)向 Kubernetes(容器环境)的迁移,更加平转载 2022-02-22 18:45:33 · 736 阅读 · 0 评论 -
Kubernetes 深入理解 Pod
为什么需要 Pod; Pod 的实现机制; 详解容器设计模式。一、为什么需要 Pod容器的基本概念现在来看第一个问题:为什么需要 Pod?我们知道 Pod 是 Kubernetes 项目里面一个非常重要的概念,也是非常重要的一个原子调度单位,但是为什么我们会需要这样一个概念呢?我们在使用容器 Docker 的时候,也没有这个说法。其实如果要理解 Pod,我们首先要理解容器,所以首先来回顾一下容器的概念:容器的本质实际上是一个进程,是一个视图被隔离,资源受限的进程。容器里面 PID.转载 2020-11-10 21:19:31 · 573 阅读 · 0 评论 -
Kubernetes pod的生命周期
Pod对象自从其创建开始至其终止退出的时间范围称为其生命周期。在这段时间中,Pod会处于多种不同的状态,并执行一些操作。其中,创建主容器(main container)为必需的操作,其他可选的操作还包括运行初始化容器(init container)、容器启动后钩子(post start hook)、容器的存活性探测(liveness probe)、就绪性探测(readiness probe)以及容器终止前钩子(pre stop hook)等,这些操作是否执行则取决于Pod的定义。如下图所示: Pod的s原创 2022-06-20 19:55:17 · 453 阅读 · 0 评论 -
Kubernetes best practices: terminating with grace
https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-terminating-with-grace Kubernetes 所做的不仅仅是监控应用程序的崩溃。它可以创建应用程序的更多副本以在多台机器上运行、更新应用程序,甚至可以同时运行应用程序的多个版本这意味着 Kubernetes 可能会终止一个完全健康的容器的原因有很多。如果您使用滚动更新来更新您的部署,Kubernetes 会在启动新转载 2022-07-13 11:06:11 · 266 阅读 · 0 评论 -
Kubernetes Pod生命周期 钩子 pod hook
Pod HookKubernetes 为我们的容器提供了生命周期钩子,就是我们说的Pod Hook,Pod Hook 是由 kubelet 发起的,当容器中的进程启动前或者容器中的进程终止之前运行,这是包含在容器的生命周期之中。我们可以同时为 Pod 中的所有容器都配置 hook。Kubernetes 为我们提供了两种钩子函数:PostStart:这个钩子在容器创建后立即执行。但是,并不能保证钩子将在容器ENTRYPOINT之前运行,因为没有参数传递给处理程序。主要用于资源部署、环境准备等。..原创 2020-09-26 17:29:53 · 2072 阅读 · 0 评论 -
Kubernetes Pod中的初始化容器和sidecar设计模式
详解容器设计模式现在我们知道了为什么需要 Pod,也了解了 Pod 这个东西到底是怎么实现的。最后,以此为基础,详细介绍一下 Kubernetes 非常提倡的一个概念,叫做容器设计模式。举例接下来将会用一个例子来给大家进行讲解。比如我现在有一个非常常见的一个诉求:我现在要发布一个应用,这个应用是 JAVA 写的,有一个 WAR 包需要把它放到 Tomcat 的 web APP 目录下面,这样就可以把它启动起来了。可是像这样一个 WAR 包或 Tomcat 这样一个容器的话,怎么去做,怎么去发转载 2020-12-23 20:35:15 · 4771 阅读 · 3 评论 -
Kubernetes 初始化容器InitContainer
Init ContainerPod中会有这几种类型的容器: • Infrastructure Container:基础容器 ,维护整个Pod网络空间 • InitContainers:初始化容器,先于业务容器开始执行 • Containers:业务容器 Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。你可以在 Pod 的规约中与用来描述应用容器的containers数组平行的位置指定 Init 容..原创 2020-11-30 17:27:42 · 3992 阅读 · 0 评论 -
Kubernetes 健康检查之 livenessProbe/readinessProbe
Kubernetes三种探针k8s支持存活livenessProbe和就绪readinessProbe两种探针,两种探针都支持以下三种方式一、exec通过执行shell命令的方式,判断退出状态码是否是0,示例: exec: command: - cat - /tmp/healthy二、tcp通过TCP请求的方式,是否能建立tcp连接,示例: tcpSocket: port: 808.....原创 2020-09-24 17:03:35 · 15768 阅读 · 0 评论 -
Kubernetes Pod 镜像拉取策略 imagePullPolicy
ImagePullPolicy 字段。它定义了镜像拉取的策略。而它之所以是一个 Container 级别的属性,是因为容器镜像本来就是 Container 定义中的一部分。ImagePullPolicy 的值默认是 Always,即每次创建 Pod 都重新拉取一次镜像。另外,当容器的镜像是类似于 nginx 或者 nginx:latest 这样的名字时,ImagePullPolicy 也会被认为 Always。而如果它的值被定义为 Never 或者 IfNotPresent,则意味着 Pod 永远不原创 2022-02-22 18:46:13 · 5743 阅读 · 0 评论 -
Kubernetes 系统强化 Pod安全上下文
安全上下文(Security Context):K8s对Pod和容器提供的安全机制,可以设置Pod特权和访问控制。背景:容器中的应用程序默认以root账号运行的,这个root与宿主机root账号是相同的, 拥有大部分对Linux内核的系统调用权限,这样是不安全的,所以我们应该将容器以普 通用户运行,减少应用程序对权限的使用。(容器是宿主机上面的进程,该进程有r非常大的权限,容器只是在宿主机上面封装了状态,也是一个实际进程)可以通过两种方法设置普通用户: • Dockerfi原创 2021-07-06 22:52:26 · 646 阅读 · 0 评论 -
Kubernetes Pod Resource和Qos
Resource 容器资源配合管理下面介绍一下 Resource,即:容器的一个资源配置管理。目前内部支持类型有三种:CPU、内存,以及临时存储。当用户觉得这三种不够,有自己的一些资源,比如说 GPU,或者其他资源,也可以自己来定义,但配置时,指定的数量必须为整数。目前资源配置主要分成 request 和 limit 两种类型,一个是需要的数量,一个是资源的界限。CPU、内存以及临时存储都是在 container 下的 Resource 字段里进行一个声明。举个例子,wordpress 容器转载 2021-04-13 18:26:21 · 418 阅读 · 0 评论 -
Kubernetes Pod 的服务质量(QoS)
1. 前言本页介绍怎样配置 Pod 让其获得特定的服务质量(QoS)类。Kubernetes 使用 QoS 类来决定 Pod 的调度和驱逐策略。2. QoS 类Kubernetes 创建 Pod 时就给它指定了下列一种 QoS 类:Guaranteed Burstable BestEffort创建命名空间kubectl create namespace qos-example3. 创建一个 QoS 类为 Guaranteed 的 Pod对于 QoS 类为 Gu..原创 2021-04-13 19:19:23 · 621 阅读 · 0 评论 -
Kubernetes capacity planning: How to rightsize the requests of your cluster
https://sysdig.com/blog/kubernetes-capacity-planning/Kubernetes capacity planning is one of the main challenges that infrastructure engineers have to face, asunderstanding Kubernetes limits and requestsis not an easy thing.You might be reserving way ..原创 2021-09-03 10:16:37 · 227 阅读 · 0 评论 -
Kubernetes 理解kubectl/调试
kubectl允许我们以命令行的方式来和kuberneted做交互,这个命令行可以给它一些参数和输入文件,这些文件是一个个准备好的kubernetes对象,这些文件它读取之后,本质上相当于是一个转换器,他会将对象转换为rest调用。(kubernetes apiserver是一个server),kubelctl就是接受这些指令,并且将指令转化为rest调用传给apiserver。-v 9 代表这条命令的log级别为9。可以看到去默认加载了kubecobnfig这个kubeconfig本身就是一个配置文原创 2022-06-25 10:47:09 · 3093 阅读 · 0 评论 -
Kubernetes Pod 排错指南
Pod 各种异常现象,可能的原因以及解决方法。 失败(Failed):Pod中的所有容器都已终止了,并且至少有一个容器是因为失败终止。即容器以非0状态退出或者被系统禁止。 (容器进程主动退出)程序配置有误 通常是节点失联,没有上报状态给 apiserver,到达阀值后 controller-manager 认为节点失联并将其状态置为 Unknown 。 通常处于 Error 状态说明 Pod 启动过程中发生了错误。常见的原因包括:.........原创 2022-06-28 14:12:39 · 1914 阅读 · 0 评论 -
Kubernets Pod 存在 Finalizers 一直处于 Terminating 状态
定义了对象的原数据,namespace是用来放置对象的,对象可以通过namespace做隔离。任何的kubernetes的对象会分为两类,一类像节点这种对象,一个计算节点是属于整个集群的,这类对象是nonnamespace,它的namespace值永远都是空的。还有一种是pod,service,都是归属于某个租户/用户的,这些对象属于namespace。一个对象namespace+name就代表了在整个集群当中唯一值。 typemeta定义了我是啥,metadata定义了我是谁。Finalizer如果只接触原创 2022-07-04 11:46:11 · 903 阅读 · 2 评论 -
根因解析 | Kubernetes Pod状态异常九大场景盘点
Kubernetes Pod 作为 Kubernetes 核心资源对象,不仅 Service、Controller、Workload 都是围绕它展开工作。作为最小调度单元的它,还担任着传统 IT 环境主机的职责,包含了调度,网络,存储,安全等能力。正是因为 Pod 具有复杂的生命周期和依赖,绝大多数 Kubernetes 问题最终都会在 Pod 上表现出来。因此,我们介绍在实际工作实践中会遇到的 9 种典型场景,以及如何使用 Kubernetes 监控来处理这些场景,快速定位发现问题。容器是用户进程,Pod原创 2022-06-20 20:10:37 · 463 阅读 · 0 评论