【kubernetes】k8s对象☞pod

文章目录

  • 1、什么是pod
  • 2、pod的使用
    • 2.1 用于管理pod的工作负载资源
    • 2.2 pod怎样管理多个容器
    • 2.3 pod 操作系统
    • 2.4 pod和控制器
    • 2.5 pod模板
  • 3、pod的更新与替换
    • 3.1 资源共享和通信
    • 3.2 pod中的存储
    • 3.3 pod联网
  • 4、容器的特权模式
    • 4.1 linux 特权容器
    • 4.2 windows特权容器
  • 5、静态pod
  • 6、容器探针

1、什么是pod

pod 是在kubernetes 中创建和管理的最小的可部署的计算单元

pod 是一组容器,这些容器 共享 存储、网络以及怎样运行这些容器的申明

pod中的内容总是 并置的(colocated) 并且 一同调度,在共享的上下文中运行。

pod所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器,这些容器相对紧密的耦合在一起,在非云环境中,在相同的物理机或者虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。
除了应用容器,pod还可以包含 在pod启动期间运行的init容器

pod的共享上下文包括一组linux的 命名空间、控制组和一些其他的隔离容器的技术。在pod的上下文中,每个独立的应用可能会进一步实施隔离

pod类似于共享命名空间并共享文件系统卷的一组容器

2、pod的使用

下面是一个使用pod的示例,它由一个运行径向nginx:1.14.2的容器组成

apiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80

要创建上面显示的pod,可以通过执行下面的这条命令实现:

kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml

注意:pod通常不是直接创建的,而是使用工作负载资源创建的

2.1 用于管理pod的工作负载资源

通常情况下我们不需要直接创建pod,甚至是单实例pod。
相反,我们会使用诸如 Deployment 或 job 这类工作负载资源来创建pod
如果 pod 需要跟踪状态,可以考虑 StatefulSet资源

kubernetes集群中的pod主要有两种用法:

  • 运行单个容器的pod
    每个 Pod 一个容器” 模型是最常见的 Kubernetes 用例; 在这种情况下,可以将 Pod 看作单个容器的包装器,并且 Kubernetes 直接管理 Pod,而不是容器
  • 运行多个协同工作的容器的pod
    pod可能封装 由多个紧密耦合需要共享资源的共处容器组成的应用程序。
    这些位于同一位置的容器可能形成单个内聚的服务单元
    一个容器将文件从共享卷提供给公众,而另一个单独的 “边车”(sidecar)容器则刷新或更新这些文件
    pod将这些容器和存储资源打包为一个可管理的实体

每个pod都旨在运行给定应用程序的单个实例,如果希望 横向扩展应用程序(如:运行多个实例以提供更多的资源),则应该使用多个pod, 每个实例使用一个pod。
kubernetes中,这种通常被称为副本(Replication),通常使用一种工作负载资源及其控制器来创建和管理一组pod副本

2.2 pod怎样管理多个容器

pod被设计成支持形成内聚服务单元多个协作过程(形式为容器)
pod中的容器被自动安排到集群中的同一物理机或虚拟机上, 并可以一起进行调度。容器之间可以共享资源和依赖、彼此通信、协调何时以及何种方式终止自身。

例如:你可能有一个容器,为共享卷中的文件提供 Web 服务器支持,以及一个单独的 “边车 (sidercar)” 容器负责从远端更新这些文件,如下图所示:
在这里插入图片描述
有些pod 具有应用容器和init容器,init容器会在启动应用容器之前运行并完成
特性状态:
启用SideCarContainers特性门控,允许为容器指定restartPolicy:Always
设置重启策略为always会确保 init容器在pod的整个生命周期内保持运行

pod天生的为其他成员容器提供了两种共享资源:网络存储

我们很少在kubernetes中直接创建一个个的pod,甚至是单实例(Singleton)的pod。这是因为pod被设计成了相对临时性的、用后即抛的一次性实体

当pod由控制器创建时,他被调度在集群的节点上运行。pod会保持在该节点上运行,直到pod结束执行、pod对象被删除、pod因资源不足被驱逐或者节点失效为止。

2.3 pod 操作系统

通过将 .spec.os.name 设置为 windowslinux以表示希望pod运行在哪个操作系统之上。这两个选项是木棉kubernetes支持的操作系统列表

kubernetes v1.28版本中,为此字段设置的值对pod的调度没有影响。
设置.spec.os.name有助于确定性的标识pod的操作系统并用于验证。
如果指定的 Pod 操作系统与运行 kubelet 所在节点的操作系统不同, 那么 kubelet 将会拒绝运行该 Pod。 Pod 安全标准也使用这个字段来避免强制执行与该操作系统无关的策略

2.4 pod和控制器

可以通过 工作负载资源来创建和管理多个pod。
资源的控制器能够处理副本的管理、上线。并在pod失效时提供自愈能力。

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

2.5 pod模板

工作负载资源的控制器通常使用 pod模板(pod template)来替我们创建pod并管理他们

pod模板是包含在工作负载对象中的规范,用来创建pod。这类负载资源包括DeploymentJobDaemonSet

工作负载控制器会使用负载对象中的PodTemplate来生成实际的pod。PodTemplate是用来运行应用时指定的负载资源的目标状态的一部分。

下面的示例是一个job清单,其中的template指示启动一个容器。该pod中的容器会打印一条消息之后暂停。

apiVersion: batch/v1
kind: Job
metadata:name: hello
spec:template:# 这里是 Pod 模板spec:containers:- name: helloimage: busybox:1.28command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']restartPolicy: OnFailure# 以上为 Pod 模板

修改pod模板 或者 切换到新的pod模板 都不会对已经存在的pod直接起作用。如果改变工作负载资源的 Pod 模板,工作负载资源需要使用更新后的模板来创建 Pod, 并使用新创建的 Pod 替换旧的 Pod。

例如,StatefulSet 控制器 针对 每个 StatefulSet 对象 确保运行中的 Pod 与当前的 Pod 模板匹配。如果编辑 StatefulSet 以更改其 Pod 模板, StatefulSet 将开始基于更新后的模板创建新的 Pod。

在节点上,kubelet 并不直接监测或管理与 Pod 模板相关的细节或模板的更新,这些细节都被抽象出来。 这种抽象和关注点分离简化了整个系统的语义, 并且使得用户可以在不改变现有代码的前提下就能扩展集群的行为。

3、pod的更新与替换

正如前面所说,当某工作负载的pod模板被改变时,控制器会基于更新的模板创建新的pod对象,而不是对现有的pod对象执行更新或者修补操作。

kubernetes并不会禁止我们直接去修改pod。对运行中的pod的某些字段执行就地更新操作还是可能的。不过,类似于patchreplace这类更新操作有一些限制。

  • Pod的绝大多数元数据都是不可改变的
    例如:我们不能改变其namespacenameuid或者creationTimestamp字段;generation字段是比较特别的,如果更新该字段,只能增加取值而不能减少
  • 如果metadata.deletionTimestamp已经被设置,则不可以向metadata.finalizers列表中添加新的条目
  • pod更新不可以改变除spec.containers[*].imagespec.initContainers[*].imagespec.activeDeadlineSecondsspec.tolerations之外的字段。对于spec.tolerations,只被允许添加新的条目到其中
  • 在更新spec.activeDeadlineSeconds字段时,以下两种更新操作是被允许的:
      如果该字段尚未设置,可以将其设置为一个正数
      如果该字段已经设置为一个正数,可以将其设置为一个更小的非负的整数

3.1 资源共享和通信

pod使他的成员容器间能够进行数据共享和通信

3.2 pod中的存储

一个pod可以设置一组共享的存储卷。
pod中所有的容器都可以访问该共享卷,从而允许这些容器共享数据。
卷还允许pod中的持久数据保留下来,即使其中的ring器需要重新启动。

3.3 pod联网

每个pod都在每个地址族中获得一个唯一的IP地址。pod中的每个容器共享网络名字空间,包括IP地址和网络端口。
pod内的容器可以使用localhost互相通信。当pod中的容器与pod外的实体通信时,他们必须协调如何使用共享的网络资源(如端口)

在同一个 Pod 内,所有容器共享一个 IP 地址和端口空间,并且可以通过 localhost 发现对方。
他们也能通过如 SystemV 信号量或 POSIX 共享内存这类标准的进程间通信方式互相通信。
不同 Pod 中的容器的 IP 地址互不相同,如果没有特殊配置,就无法通过 OS 级 IPC 进行通信。
如果某容器希望与运行于其他 Pod 中的容器通信,可以通过 IP 联网的方式实现

4、容器的特权模式

Pod 中的所有容器都可以在特权模式下运行,以使用原本无法访问的操作系统管理权能。 此模式同时适用于 Windows 和 Linux。

4.1 linux 特权容器

在linux中,pod中的所有容器都可以使用容器规约中的安全性上下文中的privileged(linux)参数启用特权模式。这对于想要使用操作系统管理权能的容器很有用。

4.2 windows特权容器

在windows中,可以使用pod规约中安全上下文的windowsOptions.hostProcess参数来创建Windows HostProcess Pod。这些pod中的所有容器都必须以 Windows HostProcess 容器方式运行。
Windows HostProcess Pod可以直接运行在主机上,它也能像 Linux 特权容器一样,用于执行管理任务

5、静态pod

静态 Pod(Static Pod) 直接由特定节点上的 kubelet 守护进程管理, 不需要 API 服务器看到它们。 尽管大多数 Pod 都是通过控制面(例如,Deployment) 来管理的,对于静态 Pod 而言,kubelet 直接监控每个 Pod,并在其失效时重启

静态 Pod 通常绑定到某个节点上的 kubelet。 其主要用途是运行自托管的控制面。 在自托管场景中,使用 kubelet 来管理各个独立的控制面组件。

kubelet 自动尝试为每个静态 Pod 在 Kubernetes API 服务器上创建一个镜像 Pod。 这意味着在节点上运行的 Pod 在 API 服务器上是可见的,但不可以通过 API 服务器来控制

静态 Pod 的 spec 不能引用其他的 API 对象(例如: ServiceAccount、 ConfigMap、 Secret 等)。

6、容器探针

Probe 是由 kubelet 对容器执行的定期诊断。要执行诊断,kubelet 可以执行三种动作:

ExecAction(借助容器运行时执行)
TCPSocketAction(由 kubelet 直接检测)
HTTPGetAction(由 kubelet 直接检测)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/178368.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES 8.x新特性一览(完整版)

一、看点 在 2022 年 2 月 11 日,Elasticsearch(ES)正式发布了 8.0 版本,而截止到 2023 年 10 月,历经一年半时间,ES官方已经连续发布了多个版本,最新版本为 8.10.4。这一系列的更新引入了众多引…

极智开发 | H100服务器的庐山真面目

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 H100服务器的庐山真面目。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq H100 是英伟达最强显卡,当然其实也…

【GitLab、GitLab Runner、Docker】GitLab CI/CD 应用

安装Gitlab开源版 官方文档-安装Gitlab 使用Docker安装 sudo docker run --detach \--hostname gitlab.example.com \--env GITLAB_OMNIBUS_CONFIG"external_url http://${ip}:9999/; gitlab_rails[gitlab_shell_ssh_port] 8822;" \--publish 443:443 --publish 99…

基于深度学习的人脸专注度检测计算系统 - opencv python cnn 计算机竞赛

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的人脸专注度…

自动驾驶算法(一):Dijkstra算法讲解与代码实现

目录 0 本节关键词:栅格地图、算法、路径规划 1 Dijkstra算法详解 2 Dijkstra代码详解 0 本节关键词:栅格地图、算法、路径规划 1 Dijkstra算法详解 用于图中寻找最短路径。节点是地点,边是权重。 从起点开始逐步扩展,每一步为一…

Python---字符串切片-----序列名称[开始位置下标 : 结束位置下标 : 步长]

字符串切片:是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。 本文以字符串为例。 基本语法: 顾头不顾尾: ----------类似range() 范围,顾头不顾尾 相关链接Python----ran…

k8s调度约束

List-Watch Kubernetes 是通过 List-Watch的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 List-Watch机制 工作机制:用户通过 kubectl请求给 APIServer 来建立一个 Pod。APIServer会将Pod相关元信息存入 etcd 中…

注册中心ZK、nameServer、eureka、Nacos介绍与对比

前言 注册中心的由来 微服务架构是存在着很多跨服务调用,每个服务都存在着多个节点,如果有多个提供者和消费者,当提供者增加/减少或者消费者增加/减少,双方都需要感知发现。所以诞生了注册中心这个中间件。 市面上有很多注册中心,如 Zookeeper、NameServer、Eureka、Na…

【Tomcat Servlet】如何在idea上部署一个maven项目?

目录 1.创建项目 2.引入依赖 3.创建目录 4.编写代码 5.打包程序 6.部署项目 7.验证程序 什么是Tomcat和Servlet? 以idea2019为例: 1.创建项目 1.1 首先创建maven项目 1.2 项目名称 2.引入依赖 2.1 网址输入mvnrepository.com进入maven中央仓库->地址…

2.4G合封芯片 XL2422,集成M0核MCU,高性能 低功耗

XL2422芯片是一款高性能低功耗的SOC集成无线收发芯片,集成M0核MCU,工作在2.400~2.483GHz世界通用ISM频段。该芯片集成了射频接收器、射频发射器、频率综合器、GFSK调制器、GFSK解调器等功能模块,并且支持一对多线网和带ACK的通信模式。发射输…

【Windows-软件-OS】(01)Windows操作系统配置环境变量,快速上手

前言 "Windows"操作系统配置环境变量,快速上手; 实操 【实操一】 环境 Windows 11 专业版(22621.2428); 图片 (1) (2) (3) &#x…

HTTP和HTTPS本质区别——SSL证书

HTTP和HTTPS是两种广泛使用的协议,尽管它们看起来很相似,但是它们在网站数据传输的安全性上有着本质上的区别。 HTTP是明文传输协议,意味着通过HTTP发送的数据是未经加密的,容易受到拦截、窃听和篡改的风险。而HTTPS通过使用SSL或…

【vtk学习笔记4】基本数据类型

一、可视化数据的基本特点 可视化数据有以下特点: 离散型 计算机处理的数据是对无限、连续的空间进行采样,生成的有限采样点数据。在某些离散点上有精确的值,但点与点之间值不可知,只有通过插值方式获取数据具有规则或不规则的结…

由QTableView/QTableWidget显示进度条和按钮,理解qt代理delegate用法

背景: 我的最初应用场景,就是要在表格上用进度条显示数据,以及放一个按钮。 qt-creator中有自带的delegate示例可以参考,但终归自己动手还是需要理解细节,否则不能随心所欲。 自认没那个天赋,于是记录下…

基于springboot实现疫情防控期间外出务工人员信息管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot疫情防控期间外出务工人员信息管理系统 摘要 网络的广泛应用给生活带来了十分的便利。所以把疫情防控期间某村外出务工人员信息管理与现在网络相结合,利用java技术建设疫情防控期间某村外出务工人员信息管理系统,实现疫情防控期间某村外出…

Linux编译器vim的使用

文章目录 vim基本概念vim的常用三种模式vim三种模式的相互转换 vim命令模式下的命令集移动光标删除文字剪切/删除复制替换撤销和恢复跳转至指定行 vim底行模式下的命令集 vim基本概念 vim是Linux下的一个多模式的编译器 简单来说就是写代码的工具 不提供编译调试等功能 有语法…

0基础学习PyFlink——时间滚动窗口(Tumbling Time Windows)

大纲 mapreduce完整代码参考资料 在《0基础学习PyFlink——个数滚动窗口(Tumbling Count Windows)》一文中,我们发现如果窗口内元素个数没有达到窗口大小时,计算个数的函数是不会被调用的。如下图中红色部分 那么有没有办法让上图中(B,2&…

Prometheus接入AlterManager配置钉钉告警(基于K8S环境部署)

文章目录 一、钉钉群创建报警机器人二、安装Webhook-dingtalk插件三、配置Webhook-dingtalk插件对接钉钉群四、配置AlterManager告警发送至Webhook-dingtalk五、Prometheus接入AlterManager配置六、部署PrometheusAlterManager(放到一个Pod中)七、测试告警 注意:请基…

Redis安装-常用命令及操作

目录 一.Redis简介 二.redis安装 1.1安装Linux版本 1.2安装 windows版本 三.redis的常用命令 Redis哈希(Hash) 一.Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队…

SpringCloud(三) Ribbon负载均衡

SpringCloud(二) Eureka注册中心的使用-CSDN博客 在SpringCloud(二)中学习了如何通过Eureka实现服务的注册和发送,从而通过RestTemplate实现不同微服务之间的调用,加上LoadBalance注解之后实现负载均衡,那负载均衡的原理是什么呢? 目录 一, 负载均衡 1.1 负载均衡原理 1.2 源…