同事提出个我从未想过的问题,为什么Kubernetes要"多此一举"推出静态Pod概念?

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 我们知道k8s中Pod可以说是一个合格的容器小管家,Pod 被设计成支持多个容器可以一起进行调度,容器之间可以**共享资源和依赖、彼此通信、协调何时以及何种方式运行或终止自身**。

同事提出个我从未想过的问题,为什么Kubernetes要"多此一举"推出静态Pod概念?

我们知道k8s中Pod可以说是一个合格的容器小管家,Pod 被设计成支持多个容器可以一起进行调度,容器之间可以共享资源和依赖、彼此通信、协调何时以及何种方式运行或终止自身

不知道小伙伴有没有注意到我们小管家的孪生兄弟静态Pod?

为什么k8s会推出静态Pod概念?

啦啦啦

囧么肥事胡说八道开课啦

101

102

静态 Pod 有什么特殊的地方呢?

正常情况下Pod是在Master上统一管理,指定,分配。所谓静态Pod就是不接受Master的管理,在指定的node上当 kubelet 启动时,会自动启动所有定义的静态Pod。

静态 Pod 直接由特定节点上的 kubelet 进程来管理,不通过 master 节点上的 apiserver 。⽆法与我们常⽤的控制器 Deployment 或者 DaemonSet 进⾏关联,kubelet 直接监控每个Pod,并在故障失效时进行重启自愈

静态 Pod 始终绑定在某⼀个 kubelet ,并且始终运⾏在同⼀个节点上。

既然发现API不能管理,为什么能“看见”运行的静态Pod?

kubelet会为每个它管理的静态Pod,调用api-serverKubernetesapiserver 上创建⼀个镜像 Pod(Mirror Pod)。因此我们可以在 apiserver 中查询到该 Pod,也能通过kubectl等方式进行访问,但是不能通过 apiserver 进⾏控制(例如不能删除)。

普通Pod失败自愈和静态Pod有什么区别?

常规Pod用工作负载资源来创建和管理多个 Pod。 资源的控制器能够处理副本的管理、上线,并在 Pod 失效时提供自愈能力

本身节点可以尝试重启或者完全替换操作,kubernetes默认的自愈机制是当Pod退出时对Pod进行重启

如果重启失败,可以重新拉取Pod,实现替身替换:

例如,如果一个节点失败,控制器注意到该节点上的 Pod 已经停止工作, 就可以创建替换性的 替身Pod。调度器会将替身 Pod 调度到一个健康的节点执行。

下面是一些管理一个或者多个 Pod 的工作负载资源的示例:

  • Deployment
  • StatefulSet
  • DaemonSet

静态Pod是指定在特定的节点上运行的Pod,完全交给kubelet进行监督自愈,重启也会在同一个指定的节点上进行重启。静态 Pod 始终绑定在某⼀个 kubelet ,并且始终运⾏在同⼀个节点上。

如果kubectl停止或者删除静态Pod会怎样?

如果尝试删除或者停止,静态Pod会进入Pending状态,并且很快会被kubelet重启。

那如果我非要删除它呢?

kubelet 启动时,由 –Pod-manifest-path= or –manifest-url= 参数指定的⽬录下定义的所有 Pod 都会自动创建。

删除只需要在配置目录下删除对应的 yaml 配置文件。

运行中的 kubelet 会定期扫描配置的目录,并且根据文件中出现或者消失的 Pod配置文件来创建或者删除 Pod。

静态Pod有什么作用?有哪些内置静态Pod?

静态 Pod 通常绑定到某个节点上的 kubelet。 其主要用途是运行自托管的控制面

因为使用静态Pod可以有效预防通过kubectl、或管理工具操作的误删除,可以利用它来部署一些核心组件应用,保障应用服务总是运行稳定数量和提供稳定服务

在自托管场景中,使用 kubelet 来管理各个独立的控制面组件。例如:

  • 调度组件kube-scheduler
  • 秘书组件kube-apiserver
  • 核心大脑组件 kube-controller-manager
  • 数据仓组件 etcd

喵喵喵


Kubernetes 推荐学习书

Kubernetes权威指南PDF
链接: https://pan.baidu.com/s/11huLHJkCeIPZqSyLEoUEmQ 提取码:sa88

k8s系列所有问题更新记录:GitHub

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Kubernetes API 调度
k8s中节点无法启动Pod
【10月更文挑战第3天】
74 6
|
1天前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
|
4天前
|
Kubernetes Nacos 微服务
探讨了在Kubernetes中使用Nacos v2.2.3时,强制删除Pod后Pod仍存在的常见问题
本文深入探讨了在Kubernetes中使用Nacos v2.2.3时,强制删除Pod后Pod仍存在的常见问题。通过检查Pod状态、事件、配置,调整Nacos和Kubernetes设置,以及手动干预等步骤,帮助开发者快速定位并解决问题,确保服务稳定运行。
16 2
|
8天前
|
存储 Kubernetes 调度
K8S中的核心概念
【10月更文挑战第26天】云原生环境下的安全问题易被忽视,导致潜在风险。应用层渗透测试和漏洞扫描是检测安全的关键,尤其是对于CVE漏洞的修复。然而,常见误解认为安全由外部防护处理且不易引入问题。
|
1月前
|
存储 Kubernetes Perl
K8S中Pod启动异常
【10月更文挑战第3天】
65 2
|
1月前
|
应用服务中间件 调度 nginx
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
|
1月前
|
Kubernetes API 调度
k8s学习--pod的所有状态详解(图例展示)
k8s学习--pod的所有状态详解(图例展示)
123 1
|
1月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
|
1月前
|
JSON Kubernetes API
在K8S中,什么是静态Pod?
在K8S中,什么是静态Pod?
|
1月前
|
Kubernetes 应用服务中间件 调度
k8s的Pod常见的几种调度形式
k8s的Pod常见的几种调度形式
24 0
下一篇
无影云桌面