【kubernetes】k8s对象☞pod

news2024/11/8 13:59:50

文章目录

  • 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: nginx
    image: nginx:1.14.2
    ports:
    - 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: hello
        image: busybox:1.28
        command: ['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.coloradmin.cn/o/1164691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp之actionsheet 自定义组件

uniapp本身自带的actionsheet太丑&#xff0c;不够美观。闲着也是闲着&#xff0c;自己实现了一个类似的选择器。 支持功能&#xff1a; 1、左对齐 2、右对齐 3、居中 4、可加图标 下面贴出使用教程&#xff1a; <template><view><action-sheet alignment&…

在Google Kubernetes集群创建分布式Jenkins(一)

因为项目需要&#xff0c;在GKE的集群上需要创建一个CICD的环境&#xff0c;记录一下安装部署一个分布式Jenkins集群的过程。 分布式Jenkins由一个主服务器和多个Agent组成&#xff0c;Agent可以执行主服务器分派的任务。如下图所示&#xff1a; 如上图&#xff0c;Jenkins Ag…

大数据毕业设计选题推荐-系统运行情况监控系统-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制

文章目录 openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制 openGauss学习笔记-112 openGauss 数据库管理-管理用户及权限-行级访问控制 行级访问控制特性将数据库访问控制精确到数据表行级别&#xff0c;使数据库达到行级访问控制的能力。不同用户执…

Github 自动化部署到腾讯云服务器

1.准备工作 新建仓库 新建项目 推送到远程仓库 2.配置仓库密钥 点击 Settings -> Sectets and variables -> Actions -> New repository sectet 依次添加以下变量 Name&#xff1a;SERVER_HOST / Secret&#xff1a;服务器公网IP Name&#xff1a;SERVER_USERNAME /…

软件测试/测试开发丨Python:易学、强大、多用途的编程语言

点此获取更多相关资料 Python 发展历史 Python 是一门高级编程语言&#xff0c;由 Guido van Rossum&#xff08;龟叔&#xff09; 在 1989 年发明&#xff0c;设计 Python 语言的初衷是为了创造一种介于 C 和 shell 之间&#xff0c;简洁方便&#xff0c;易学易用&#xff0…

第十三章,枚举与泛型例题

例题1 package 例题;interface SeasonInterface{//四季接口int SPRING 1, SUMMER 2, AUTUMN 3, WINTER 4; }enum SeasonEnum{//四季枚举SPRING,SUMMER,AUTUMN,WINTER }public class 例题1 {//定义方法public static void printSeason1(int season){switch (season) {case …

MAA连不上MUMU模拟器

之前一直能正常用&#xff0c;最近突然连接不上&#xff0c;最终发现是adb版本不同造成的&#xff0c;我系统变量的adb版本如下&#xff1a; MUMU自带adb版本如下&#xff1a; 解决办法&#xff1a; 把mumu的adb复制到系统变量路径下&#xff0c;或者把adb的系统变量删除

基于OpenHarmony的启航开发板的基础操作

文章目录 前言一、前提准备二、基础操作1.hb set命令的使用2.hb build -f 命令的使用3.Hello World 案例 前言 在物联网&#xff08;IoT&#xff09;领域&#xff0c;开发板扮演着至关重要的角色&#xff0c;为开发人员提供了实验和原型设计的平台。而OpenHarmony作为一个开源…

NOR Flash基本原理

目录 1. Flash Memory中存储的信息 2. Flash操作 2.1 Read操作 2.2 Program操作 2.3 Erase操作 3 电压阈值分布 4 Block Erase 4.1 Pre-Program Phase 4.2 Erase Phase 4.3 Recovery Phase 5 Erase 中断 6 注意要点 这是之前搞Flash IP时的一个学习笔记&#xff0c…

力扣 搜索旋转排序数组 二分

&#x1f468;‍&#x1f3eb; 33. 搜索旋转排序数组 class Solution {public int search(int[] nums, int target){int l 0;int r nums.length - 1;while (l < r){int m l r >> 1;//else大法&#xff0c;把无序段抛给else&#xff0c;if只处理有序段 // 需要特…

Flutter屏幕适配

文章目录 一、Flutter单位二、设备信息三、常见适配方案四、flutter_screenutil 一、Flutter单位 Flutter使用的是类似IOS中的点pt&#xff08;point&#xff09;。 iPhone6的尺寸是375x667&#xff0c;分辨率为750x1334。 iPhone6的dpr( devicePixelRatio ) 是2.0。 DPR 物…

论文 辅助笔记:t2vec train.py

1 train 1.1 加载training和validation数据 def train(args):logging.basicConfig(filenameos.path.join(args.data, "training.log"), levellogging.INFO)设置了日志的基本配置。将日志信息保存到名为 "training.log" 的文件中日志的级别被设置为 INFO&…

Vue动态树、配置请求路径、表格数据显示、实现分页、创建书本管理组件、点击菜单实现路由跳转以及系统首页配置。

目录 1. 准备工作 2. 动态树 2.1 在配置请求路径 2.2 使用动态数据构建导航菜单 2.2.1 通过接口获取数据 2.2.3 通过后台获取的数据构建菜单导航 2.2.3.1 先构建一级导航菜单 2.3 点击菜单实现路由跳转 2.3.1 创建书本管理组件 3. 系统首页配置 4. 表格数据显示 4.…

探密工业互联网网络体系:构建端到端的稳定传输

什么是工业互联网网络&#xff1f; 工业互联网网络是一种将工业设备、传感器和计算机系统连接到一起&#xff0c;以便它们可以共同工作、共享数据和实现更高效的生产和控制。这个网络体系的目标是提高工业过程的效率、可靠性和安全性。 在数字时代的今天&#xff0c;工业互联网…

无广告弹出的便签工具选择哪一款?

广告弹窗&#xff0c;是许多人在日常办公中比较反感的问题&#xff0c;打开一个软件正准备使用时&#xff0c;突然冒出一个广告弹窗&#xff0c;这会给人一种特别反感的情绪&#xff0c;尤其是在专注记录工作任务备忘的时候&#xff0c;意外冒出的广告窗口可真让人心烦。那么&a…

Apple 苹果发布 M3、M3 Pro 和 M3 Max 芯片

本心、输入输出、结果 文章目录 Apple 苹果发布 M3、M3 Pro 和 M3 Max 芯片前言M3、M3 Pro 和 M3 Max 芯片的性能相关资料图M3 Pro规格M3 Max规格弘扬爱国精神 Apple 苹果发布 M3、M3 Pro 和 M3 Max 芯片 编辑&#xff1a;简简单单 Online zuozuo 地址&#xff1a;https://blog…

若依框架中SpringSecurity的实现流程

文章目录 Spring Security概述核心原理 若依Sprint Security分析配置类分析流程分析图过滤器分析 若依登录/退出流程流程图登录退出 写在开头: 本篇博客与核桃共同完成 Spring Security 概述 Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架&#xff0c…

go微信开发sdk-简单使用_已设置图床

go微信开发sdk-简单使用 GitHub - silenceper/wechat: WeChat SDK for Go &#xff08;微信SDK&#xff1a;简单、易用&#xff09; 使用的sdk为上述的&#xff0c;这边给出快速的项目实例 git clone https://github.com/gowechat/example.git简单的项目结构 这边简单用dock…

多线程锁的升级原理是什么

在 Java 中&#xff0c;锁共有 4 种状态&#xff0c;级别从低到高依次为&#xff1a;无状态锁&#xff0c;偏向锁&#xff0c;轻量级锁和重量级锁状态&#xff0c;这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级。 多线程锁锁升级过程 如下图所示 多线程锁的升级过程…