【Pod 详解】Pod 的概念、使用方法、容器类型

Pod 详解》系列,共包含以下几篇文章:

  • Pod 的概念、使用方法、容器类型
  • Pod 的生命周期(一):Pod 阶段与状况、容器的状态与重启策略
  • Pod 的生命周期(二):Pod 的健康检查之容器探针
  • Pod 状态速查表
  • Pod 的调度策略
  • Pod 资源调度之亲和性调度
  • Pod 驱逐

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

Pod 的概念、使用方法、容器类型

  • 1.什么是 Pod
  • 2.Pod 的基本使用方法
  • 3.Pod 中的容器
    • 3.1 基础容器
    • 3.2 初始化容器
    • 3.3 临时容器
    • 3.4 业务容器

Kubernetes 通过一个抽象的逻辑单元 Pod 将应用的容器组合在一起,从而使得应用更容易被发现和管理。Pod 是 Kubernetes 的核心。
在这里插入图片描述

1.什么是 Pod

Pod 是 Kubernetes 中的一个 逻辑单位,它代表集群中正在运行的一个进程,是 Kubernetes 集群中的一个应用实例,由一个或者多个容器组成。在 Pod 中还可以包含数据的持久化存储、网络配置等资源。Pod 支持多种容器的执行环境,而 Docker 则是 Pod 最常见的 执行环境。Pod 也支持用其他容器引擎作为执行环境。

🚀 Pod 是 Kubernetes 项目的原子调度单位,关于 Pod 最重要的一个事实是:它只是一个逻辑概念。也就是说,Kubernetes 真正处理的,还是宿主机操作系统上 Linux 容器的 NamespaceCgroups,而并不存在一个所谓的 Pod 的边界或者隔离环境。

在 Kubernetes 中,主要有两种使用 Pod 的方式。

  • 单容器的 Pod:最常见的使用 Pod 的方式,即在 Pod 中只运行一个容器,Kubernetes 通过 Pod 来管理这个容器。
  • 多容器的 Pod:当应用需要多个容器一起协同工作时,Pod 中可以运行多个容器,从而满足应用的要求。Kubernetes 的调度器会保证这些容器都运行在同一台物理主机或虚拟主机上,从而达到容器之间的资源共享。

🚀 由于这些容器运作在同一个宿主机上,因此它们可以通过 localhost 互相访问。不过,除非是具有强耦合关系的容器,否则不推荐使用这种方式。

Kubernetes 使用 Pod 来管理容器具有以下优点:

  • Pod 作为最小的 逻辑部署单元,简化了应用部署的难度,同时也极大地方便了应用的管理。
  • Pod 作为独立运行的 服务单元,可以方便地进行 部署水平扩展 / 收缩调度管理资源分配
  • Pod 中的容器共享命名空间和网络地址,方便进行统一的资源管理与资源分配。

2.Pod 的基本使用方法

通过使用 YAML 文件可以描述一个 Pod。

Pod 的配置信息包含以下几部分。其中最重要的部分是 metadataspec

  • apiVersion:创建该对象所使用的 Kubernetes APl 的版本。
  • kind:指定对象的类型,即 Pod。
  • metadata:设置 Pod 的元信息,包括对象的名称、ID 及命名空间等。
  • spec:设置 Pod 的规约信息。
  • status:设置 Pod 运行时的状态。

下面是 Pod 的一个示例文件 firstpod.yaml

apiVersion: v1
kind: Pod
metadata:name: first-podlabels:app: demotype: bash
spec:replicas: 2containers:- name: busybox-containerimage: busyboxcommand: ['sh', '-c', 'echo Hello Kubernetes Pod! && sleep 1000']
  • 使用 firstpod.yaml 方式创建 Pod
kubectl create -f firstpod.yaml
  • 查看正在运行的 Pod 信息
kubectl get pod first-pod -o yaml
  • 查看 Pod 的标准输出日志
kubectl logs first-pod

输出日志如下:

Hello Kubernetes Pod!

如果在 Pod 中有多个容器,则在查看某个容器的日志时需要指定容器的名称,例如:kubectl logs pod-name -c container-name

  • 显示 Pod 的标签
kubectl get pods --show-labels

标签 Label 是 Kubernetes 管理 Pod 的重要属性,我们可以在 YAML 文件的 metadata 配置参数中指定,也可以通过命令行指定。

  • 根据标签查询 Pod
kubectl get pods -l app=demo --show-labels
  • 通过命令给 Pod 增加标签
kubectl label pod first-pod side=frontend
  • 通过命令行修改 Pod 的标签
kubectl label pod first-pod side=unknown --overwrite
  • 也可以将标签显示为列
kubectl get pods -L app,type,side

3.Pod 中的容器

Pod 由一个或多个容器组成。这里的容器通常指运行应用的业务容器。在 Pod 中,除业务容器外,还有 基础容器初始化容器临时容器

3.1 基础容器

基础容器(Infrastructure Container)负责维护整个 Pod 的 网络空间。这种类型的容器对用户是 透明的,用户不能操作这种容器。

在 node 节点上,通过 docker ps 命令可以查看基础容器。

基础容器将使用 pause 镜像来创建和维护 Pod 的网络环境。

3.2 初始化容器

初始化容器 晚于基础容器运行,但先于业务容器运行。如果 Pod 的初始化容器运行失败,则默认情况下 Kubernetes 会不断尝试重启 Pod,直到初始化容器运行成功。如果将 Pod 的配置参数 restartPolicy 设置为 Never,则 Kubernetes 不会执行重启动作。

如果要将 Pod 中的容器指定为初始化容器,则需要在 spec 中添加 initContainers 字段。一个 Pod 可以指定多个初始化容器,它们会按顺序逐个运行:一个初始化容器运行成功,下一个才能够运行。当所有的初始化容器运行完成后,Kubernetes 才会执行业务容器从而运行应用。

下面是一个初始化容器的示例。

  • 创建 initcontainer.yaml 文件,并在其中输入以下内容。
apiVersion: v1
kind: Pod
metadata:name: myapp-podlabels:app: myapp
spec:containers:- name: myapp-containerimage: busybox:1.28command: ['sh', '-c', 'echo The app running! && sleep 5']initContainers:- name: init-myserviceimage: busybox:1.28command: ['sh', '-c', 'echo The init-myservice running! && sleep 5']- name: init-mydbimage: busybox:1.28command: ['sh', '-c', 'echo The init-mydb running! && sleep 5']
  • 执行以下语句创建 Pod
kubectl apply -f initcontainer.yaml
  • 在 Pod 创建成功后,使用 describe 命令查看输出信息
kubectl describe -f initcontainer.yaml

Kubernetes 会先启动了两个初始化容器(init-myserviceinit-mydb),之后启动了业务容器(myapp-container)。

初始化容器与业务容器是分离的,具有以下优势:

  • 🚀 在初始化容器中可以提前安装在业务容器中要使用的工具,或者运行一些初始化的脚本。
  • 🚀 将应用依赖的工具和脚本分离到初始化容器中,可以避免这些工具降低应用镜像的安全性。
  • 🚀 开发人员可以进行组件镜像的独立创建和部署,而不需要将所有的组件构建成一个大的应用镜像。
  • 🚀 初始化容器可以独立访问 Kubernetes 中的一些敏感信息,如 Secret。
  • 🚀 由于初始化容器必须在业务容器之前执行完成,因此,可以利用初始化容器来阻塞或延迟业务容器的启动,从而进行先决条件的检查。

3.3 临时容器

临时容器 是一种特殊的容器。它在现有的 Pod 中临时运行,以完成用户发起的操作(例如 故障排查性能诊断 等)。由于临时容器没有端口要配置,且资源分配是不可变的,所以它不适合用来构建应用。

临时容器的最大用途是 调试其他的容器。因为,当 Pod 中的容器异常退出,或者容器镜像不包含调试工具时(例如没有 shell),会导致 kubectl exec 命令无法使用。这时临时容器对于交式故障排查就很有用了。

下面是 Kubernetes 官方提供的一个临时容器的示例。

  • 使用 k8s.gcr.io/pause:3.1 镜像创建一个 Pod。
kubectl run ephemeral-demo --image=k8s.gcr.io/pause:3.1 --restart=Never

🚀 这里使用 k8s.gcr.io/pause:3.1 镜像是因为它不包含任何调试程序。

  • 使用 kubectl exec 命令创建 shell 进入容器。
kubectl exec -it ephemeral-demo -- sh

由于该镜像不包含任何调试程序,因此会出现以下错误信息:

OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown
  • 使用 kubectl debug 命令为 ephemeral-demo 容器添加一个临时容器,以达到调试的目的。
kubectl debug -it ephemeral-demo --image=busybox --target=ephemeral-demo

这里使用 busybox 的镜像来创建临时容器,Kubernetes 将自动启动临时容器的控制台。在临时容器启动后,会输出如下信息:

Defaulting debug container name to debugger-8xzrl.
If you don't see a command prompt, try pressing enter.
/#

3.4 业务容器

业务容器(Containers)是实际运行应用的容器,如第 2 节中创建的 busybox-container 容器。

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

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

相关文章

C++入门基础:C++中的常用操作符练习

开头介绍下C语言先,C是一种广泛使用的计算机程序设计语言,起源于20世纪80年代,由比雅尼斯特劳斯特鲁普在贝尔实验室开发。它是C语言的扩展,增加了面向对象编程的特性。C的应用场景广泛,包括系统软件、游戏开发、嵌入式…

智慧医院临床检验管理系统源码(LIS),全套LIS系统源码交付,商业源码,自主版权,支持二次开发

实验室信息系统是集申请、采样、核收、计费、检验、审核、发布、质控、查询、耗材控制等检验科工作为一体的网络管理系统。它的开发和应用将加快检验科管理的统一化、网络化、标准化的进程。一体化设计,与其他系统无缝连接,全程化条码管理。支持危机值管…

DataX(二):DataX安装与入门

1. 官方地址 下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz 源码地址:GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。 2. 前置要求 Linux JDK(1.8 以上,推荐 1.8) Python(推荐 Pyt…

一文总结代理:代理模式、代理服务器

概述 代理在计算机编程领域,是一个很通用的概念,包括:代理设计模式,代理服务器等。 代理类持有具体实现类的实例,将在代理类上的操作转化为实例上方法的调用。为某个对象提供一个代理,以控制对这个对象的…

测试分类篇

按测试对象划分 这里可以分为界面测试, 可靠性测试, 容错率测试, 文档测试, 兼容性测试, 安装卸载测试, 安全测试, 性能测试, 内存泄露测试. 界面测试 界面测试(简称UI测试),指按照界面的需求(一般是UI设计稿)和界面的设计规则…

Vue3+element-plus 实现图片图片

在看下面内容之前,请一定要去看看 element-plus 中上传组件 el-upload组件 上传组件 重点关注下面几个属性 :auto-upload“false” , 关闭自动上传 :on-change“onUploadFile” 监听上传情况 简单示例: <el-form-item label"文章封面" prop"cover_img"&…

flume知识点

1. 简述什么是Flume &#xff1f; flume 作为 cloudera 开发的实时日志收集系统&#xff0c;受到了业界的认可与广泛应用。Flume 初始的发行版本目前被统称为 Flume OG&#xff08;original generation&#xff09;&#xff0c;属于 cloudera。 但随着 FLume 功能的扩展&#…

AI大模型学习必备十大网站

随着人工智能技术的快速发展&#xff0c;AI大模型&#xff08;如GPT-3、BERT等&#xff09;在自然语言处理、计算机视觉等领域取得了显著的成果。对于希望深入学习AI大模型的开发者和研究者来说&#xff0c;找到合适的学习资源至关重要。本文将为大家推荐十大必备网站&#xff…

[AI]在家中使用日常设备运行您自己的 AI 集群.适用于移动、桌面和服务器的分布式 LLM 推理。

创作不易 只因热爱!! 热衷分享&#xff0c;一起成长! “你的鼓励就是我努力付出的动力” AI发展不可谓不快, 从ollama个人电脑CPU运行到现在,日常设备AI集群. 下面对比一下,两款开源AI 大模型的分布式推理应用, exo 和cake. 1.AI 集群推理应用exo 和cake的简单对比 #mermaid-s…

DOS攻击实验

实验背景 Dos 攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段&#xff0c;残忍地耗尽被攻击对象的资源&#xff0c;目的是让目标计算机或网络无法提供正常的服务或资源访问&#xff0c;使目标系统服务系统停止响应甚至崩溃。 实验设备 一个网络 net:cloud0 一台模…

在Ubuntu 18.04上安装和使用PostgreSQL的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 关系数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种结构化的方式来存储、组织和访问信息。 PostgreSQL&#xf…

基于微信小程序+SpringBoot+Vue的儿童预防接种预约系统(带1w+文档)

基于微信小程序SpringBootVue的儿童预防接种预约系统(带1w文档) 基于微信小程序SpringBootVue的儿童预防接种预约系统(带1w文档) 开发合适的儿童预防接种预约微信小程序&#xff0c;可以方便管理人员对儿童预防接种预约微信小程序的管理&#xff0c;提高信息管理工作效率及查询…

24暑假算法刷题 | Day22 | LeetCode 77. 组合,216. 组合总和 III,17. 电话号码的字母组合

目录 77. 组合题目描述题解 216. 组合总和 III题目描述题解 17. 电话号码的字母组合题目描述题解 77. 组合 点此跳转题目链接 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输…

移动UI:排行榜单页面如何设计,从这五点入手,附示例。

移动UI的排行榜单页面设计需要考虑以下几个方面&#xff1a; 1. 页面布局&#xff1a; 排行榜单页面的布局应该清晰明了&#xff0c;可以采用列表的形式展示排行榜内容&#xff0c;同时考虑到移动设备的屏幕大小&#xff0c;应该设计合理的滚动和分页机制&#xff0c;确保用户…

贪心算法.

哈夫曼树 哈夫曼树&#xff08;Huffman Tree&#xff09;&#xff0c;又称为霍夫曼树或最优二叉树&#xff0c;是一种带权路径长度最短的二叉树&#xff0c;常用于数据压缩。 定义&#xff1a;给定N个权值作为N个叶子结点&#xff0c;构造一棵二叉树&#xff0c;若该树…

普乐蛙VR航天航空体验馆知识走廊VR体验带你登陆月球

VR航天航空设备是近年来随着虚拟现实&#xff08;VR&#xff09;技术的快速发展而兴起的一种新型设备&#xff0c;它结合了航天航空领域的专业知识与VR技术的沉浸式体验&#xff0c;为用户提供了前所未有的航天航空体验。以下是对VR航天航空设备的详细介绍&#xff1a; 一、设备…

feign整合oauth2 使用笔记

编写配置类 Slf4j public class OAuth2FeignConfiguration {Value("${auth.server.access-token-uri}")private String accessTokenUri;Value("${auth.server.client-id}")private String clientId;Value("${auth.server.client-secret}")privat…

UGUI优化篇--UGUI合批

UGUI合批 UGUI合批规则概述UGUI性能查看工具合批部分的特殊例子一个白色image、蓝色image覆盖了Text&#xff0c;白色image和Text哪个先渲染 Mask合批Mask为什么会产生两个drawcallMask为什么不能合批Mask注意要点 RectMask2D为什么RecMask2D比Mask性能更好主要代码RectMask2D注…

Golang | Leetcode Golang题解之第295题数据流的中位数

题目&#xff1a; 题解&#xff1a; type MedianFinder struct {nums *redblacktree.Treetotal intleft, right iterator }func Constructor() MedianFinder {return MedianFinder{nums: redblacktree.NewWithIntComparator()} }func (mf *MedianFinder) AddNum(…

基于STM32的多协议通信系统设计与实现

在现代电子系统中&#xff0c;多协议通信能力是一种宝贵的资产&#xff0c;它允许设备与使用不同通信协议的多种外围设备进行交互。STM32微控制器因其强大的处理能力和丰富的外设支持&#xff0c;非常适合构建多协议通信系统。本文将探讨如何设计和实现一个基于STM32的多协议通…