Kubernetes(k8s)核心资源解析:Pod详解

Kubernetes核心资源解析:Pod详解

  • 1、什么是Pod?
  • 2、Pod 的组成
  • 3、Pod 如何管理多个容器
  • 4、Pod 的网络
  • 5、Pod 的存储方式
  • 6、Pod 的工作方式
    • 6.1 自主式 Pod
    • 6.2 监控和管理 Pod
    • 6.3 Pod 的创建流程


💖The Begin💖点点关注,收藏不迷路💖

1、什么是Pod?

Pod是Kubernetes中最小的调度单元,它可以包含一个或多个容器。Pod中的所有容器共享网络和存储卷,它们一起运行在同一个节点上。Pod提供了一种抽象层,使得容器可以作为一个逻辑单元来管理。

Pod中的容器共享IP地址、端口空间和存储,它们可以通过localhost / 127.0.0.1相互通信。

Pod的运行需要根据Kubernetes集群的工作节点来运行,具体调度哪个节点,根据调度器(Scheduler)实现。

2、Pod 的组成

1、容器:Pod中可以包含一个或多个容器,这些容器共享网络和存储卷。
2、共享网络命名空间:Pod中的所有容器共享同一个网络命名空间,它们可以相互通信。
3、存储卷:Pod中的容器可以共享存储卷,这些存储卷可以用于数据持久化或共享。

在这里插入图片描述

3、Pod 如何管理多个容器

在 Kubernetes 中,Pod 是最小的可部署单元,可以包含一个或多个容器。Pod 内的所有容器共享相同的网络命名空间、IP 地址和存储卷,并在同一主机上调度。

例如:

可以将一个主要容器与一个或多个 Sidecar 容器组合在同一个 Pod 中。主要容器负责应用程序的主要逻辑,而 Sidecar 容器可以处理辅助任务,例如日志收集、监控等。

要管理多个容器的 Pod,需要仔细设计容器之间的交互和共享资源,并利用 Kubernetes 提供的各种功能来简化管理和操作。

比如:Kubernetes 提供了各种资源来管理多容器的 Pod,如 Deployment、StatefulSet、DaemonSet 等。这些资源可以自动管理 Pod 的部署、扩展和更新。

4、Pod 的网络

在容器化应用中,Pod 中的容器需要相互通信,以及与外部系统进行通信。Pod 网络提供了一种机制来管理这种通信,并确保安全、高效地进行网络连接。

Pod 网络的特性:

1、容器间通信:Pod 网络允许 Pod 内的容器相互通信,这使得容器之间可以共享资源和信息。
2、跨节点通信:Pod 可以分布在 Kubernetes 集群的不同节点上,Pod 网络负责确保跨节点的通信。
3、服务发现:Pod 网络通常与 Kubernetes 中的服务发现机制结合使用,使得应用程序能够轻松地发现和连接到其他服务。
4、网络策略:Pod 网络可以实施网络策略,限制 Pod 之间的通信,提高安全性。

Pod 网络实现方式:

1、Overlay 网络:使用 Overlay 网络技术(如 VXLAN、Flannel、Calico 等)创建一个虚拟网络层,使得 Pod 可以透明地跨节点通信。
2、Host 网络:容器直接使用节点的网络命名空间,与节点共享网络配置。这种方式效率高,但缺乏网络隔离性。
3、混合网络:结合 Overlay 网络和 Host 网络的优势,提供更灵活的网络管理方式。

5、Pod 的存储方式

容器是短暂的,它们可以随时启动、停止或重新调度。因此,任何存储在容器中的数据都会随着容器的生命周期而消失。为了持久化存储应用程序的数据,需要一种机制来确保数据的持久性和可靠性。

Pod 存储的特性:

1、持久性:Pod 存储提供持久化的存储机制,确保数据在容器重新启动或迁移时不会丢失。
2、可靠性:Pod 存储通常提供数据的备份、复制和恢复机制,以确保数据的可靠性和安全性。
3、性能:Pod 存储应该具有良好的性能,能够满足应用程序对存储的高吞吐量和低延迟的需求。
4、扩展性:Pod 存储应该能够方便地扩展以应对不断增长的数据量和请求量。

Pod 存储的实现方式:

1、空白存储:它不会持久化保存任何数据,只是一种临时存储卷类型,在容器退出后会被删除,用于临时操作。
2、持久卷:通过 Kubernetes 的持久卷机制,可以将外部存储卷挂载到 Pod 中,以实现数据的持久化存储。
3、配置存储:用于存储敏感信息的一种资源,比如密码、API 密钥等。通常用于 Pod 的环境变量或者文件中,跨pod共享数据使用,与容器内部数据无关。

6、Pod 的工作方式

6.1 自主式 Pod

自主式 Pod(也称为静态)Pod 是 Kubernetes 中的一种特殊类型的 Pod,它们不受控制器的管理,而是由用户直接创建和管理。这意味着它们不受 ReplicaSet、Deployment 或其他控制器的管理。

自主式 Pod 通常用于特殊用例(测试、开发环境)。

自主式 Pod 如果被删除、即会从集群中彻底删除,不会自动创建。

创建自主式 Pod 的一般步骤:

例子(创建自主式 Nginx Pod):

1、编写 Nginx Pod 的 YAML 配置文件:

vim nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30007
    

注意:nginx-service 将会匹配所有带有 app: nginx 标签的 Pods,并通过 NodePort 30007 将流量转发到这些 Pods 的 80 端口。

在这里插入图片描述

2、 将 YAML 文件应用到 Kubernetes 集群:

kubectl apply -f nginx-pod.yaml

在这里插入图片描述

3. 验证 Pod 是否成功创建:

kubectl get pods

kubectl get pods -o wide -l app=nginx


#查看Pod 的详细信息
kubectl describe pod nginx

在这里插入图片描述

4. 访问 Nginx Pod:

既然 Service 类型是 NodePort,可以通过任意 Kubernetes 集群节点的 IP 地址加上端口号 30007 来访问 Nginx 服务,如 http://:30007。

在这里插入图片描述

在这里插入图片描述
5. 验证自主式Pod删除:

##删除前面创建的自主式 Nginx Pod

[root@k8s-master test]# kubectl delete pod nginx-pod
pod "nginx-pod" deleted
[root@k8s-master test]#
[root@k8s-master test]# kubectl get pods -o wide -l app=nginx
No resources found in default namespace.
[root@k8s-master test]#

在这里插入图片描述

**结论**: 一旦删除自主式 Pod,其状态将无法恢复。在 Kubernetes 中,自主式 Pod 不会被控制器(如 Deployment 或 StatefulSet)所管理,因此删除后无法自动重建。



6.2 监控和管理 Pod

通常在生产环境中,Pod 都会由控制器对象(如 Deployment、StatefulSet、DaemonSet 等)进行管理,以确保高可用性、自动伸缩和故障恢复等功能。 这样做的好处包括能够更灵活地管理 Pod、自动重启失败的 Pod、根据需求扩展或缩减 Pod 数量等。

Kubernetes 会持续监控 Pod 的状态,并确保其处于期望的状态。如果 Pod 发生故障或终止,Kubernetes 将尝试重新启动 Pod,直到它达到期望的状态为止。

1、编写 Nginx Pod 的 YAML 配置文件:

前面的YAML 文件中包含了一个 Pod 和一个 Service 的定义,但没有使用控制器(如 Deployment 或 StatefulSet、Daemonset等)来管理 Pod。

例如:使用Deployment控制器来管理 Pod,修改 前面YAML 文件以包含 Deployment 部分。

vim nginx-deployment-service.yaml
apiVersion: apps/v1
kind: Deployment # 指定资源的类型,这里是一个 Deployment 资源。
metadata:
  name: nginx-deployment # 设置 Deployment 的名称为 nginx-deployment
spec: # 规格部分,包含了 Deployment 的规格信息
  replicas: 2  # 副本数为 2,表示将会创建 2 个 Pod,可以根据需要进行修改
  selector:
    matchLabels:
      app: nginx # 选择具有 app: nginx 标签的 Pod
  template:
    metadata:
      labels:
        app: nginx  # 为 Pod 设置标签为 app: nginx
    spec:
      containers:
      - name: nginx  # 容器的名称为 nginx
        image: nginx:latest  # 使用最新版本的 nginx 镜像
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service # 设置 Service 的名称为 nginx-service
spec:
  type: NodePort # 设置 Service 的类型为 NodePort,可以通过节点 IP 和节点端口来访问 Service
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80  # Service 监听的端口号为 80
    targetPort: 80  # 将流量转发到 Pod 中的端口号为 80 的容器
    nodePort: 30007  # NodePort 类型的 Service 将会暴露在节点的 30007 端口上,可以通过节点 IP 和该端口来访问 Service

在这里插入图片描述

2、 将 YAML 文件应用到 Kubernetes 集群:

kubectl apply -f nginx-deployment-service.yaml

在这里插入图片描述

3. 验证 Pod 是否成功创建:

kubectl get pods

kubectl get pods -o wide -l app=nginx


#查看Pod 的详细信息
kubectl describe pod nginx

在这里插入图片描述

5. 验证控制器管理的Pod删除:

测试:当删除一个由控制器(如 Deployment)管理的 Pod 时,控制器将负责维护所需的副本数2。如果删除了一个 Pod,控制器将会检测到并尝试按照定义的副本数重新创建 Pod,以确保所需的 Pod 数量处于正常状态。

1、删除 Pod:首先,我们将删除由控制器管理的 Pod nginx-deployment-544dc8b7c4-5s9mk。

kubectl delete pods nginx-deployment-544dc8b7c4-5s9mk

2、验证 Pod 删除:使用以下命令确认 Pod 是否已被删除:

kubectl get pods

在这里插入图片描述

3、等待 Pod 恢复:等待一段时间,让控制器检测到 Pod 的删除并采取行动。根据配置,可能需要几秒钟或几分钟来重新创建 Pod。

4、确认 Pod 是否已恢复:再次运行以下命令来检查 Pod 是否已被重新创建:

在这里插入图片描述

能够看到新的 Pod 正在运行,并且它们的名称与之前的 Pod 不同,因为控制器会为它们生成新的唯一标识符。这表明控制器成功地将被删除的 Pod 替换为新的 Pod。

6.3 Pod 的创建流程

在这里插入图片描述

Pod 创建流程

Pod 创建的流程通常包括以下几个步骤:

1、定义 Pod 的 YAML 文件:首先,您需要创建一个 Pod 的描述文件,通常是一个 YAML 文件,其中包含了 Pod 的各种配置信息,比如容器镜像、资源需求、环境变量等。

2、API Server 接收请求:将 Pod 的 YAML 文件提交给 Kubernetes 集群的 API Server。

3、验证和准备:API Server 首先会对 Pod 的描述进行验证,包括格式检查、权限检查等。一旦验证通过,Kubernetes 就会为 Pod 分配一个唯一的标识符。

4、调度器选择节点:接下来,调度器(Scheduler)会根据 Pod 的调度需求(比如资源需求、亲和性和反亲和性规则等)选择一个合适的节点(Node)来运行 Pod。

5、节点拉取镜像:一旦调度器确定了节点,该节点上的容器运行时(比如 Docker 或者 Containerd)将会拉取 Pod 中定义的容器镜像。

6、创建 Pod:容器运行时根据 Pod 的描述信息在节点上创建容器,并且应用相关的配置,比如挂载卷、设置网络等。

7、运行容器:一旦容器创建完成,容器运行时就会启动容器,并且监控容器的运行状态。

8、Pod 状态更新:一旦 Pod 中的容器全部启动成功,Kubernetes 就会更新该 Pod 的状态为“运行中”。

9、监控和自愈:Kubernetes 会持续监控 Pod 的运行状态,如果发现 Pod 出现异常(比如容器崩溃、节点故障等),Kubernetes 会尝试自动修复或者重新创建 Pod。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的测时仪系统设计

**单片机设计介绍,基于单片机的测时仪系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的测时仪系统设计是一个结合了单片机技术与测时技术的综合性项目。该设计的目标是创建一款精度高、稳定性强且…

前端学习<四>JavaScript基础——03-常量和变量

常量(字面量):数字和字符串 常量也称之为“字面量”,是固定值,不可改变。看见什么,它就是什么。 常量有下面这几种: 数字常量(数值常量) 字符串常量 布尔常量 自定义…

重磅!openGauss6.0创新版本,带着新特性正式发布了!

📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACD…

编程生活day6--回文子串、蛇形填充数组、笨小猴、单词排序

回文子串 题目描述 给定一个字符串,输出所有长度至少为2的回文子串。 回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。 输入 一个字符串,由字母或数字组成。长度5…

求m和n的最大公约数(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int remainder 1;int m 0;int n 0;int middle 0;//提示用户&#xff1b;printf("请输入整数m和n的值&#xff…

处理SAP报错:消息GLT2076 没有项目种类分配到科目 1481010102/1000

财务新建了个科目入账时报错&#xff1a;没有项目种类分配到科目。 查了下原因。原来是我们公司实施时启用了凭证分割功能。其中有个配置是这样的&#xff1a;给总账科目分类&#xff1a;IMG-财务会计&#xff08;新&#xff09;-总账会计核算-业务交易-凭证分解-为文档拆分给总…

分布式架构中一些常用算法的理解

对分布式算法 - 一致性Hash算法的理解 一致性哈希算法是一种分布式算法&#xff0c;用于解决数据分布和负载均衡问题。它通过将数据和节点映射到一个哈希环上&#xff0c;实现了数据在节点之间的均匀分布和最小化数据迁移。 一致性哈希算法的核心思想是将数据和节点都映射到哈…

1.数据结构和算法

文章目录 数据结构逻辑结构集合结构线性结构树形结构图形结构 物理结构顺序存储结构链式存储结构 算法基本特性目标 总结数据结构总结算法总结 数据结构 「数据结构」指的是&#xff1a;数据的组织结构&#xff0c;用来组织、存储数据。 逻辑结构 逻辑结构&#xff08;Logic…

Dubbo入门项目搭建【Dubbo3.2.9、Nacos2.3.0、SpringBoot 2.7.17、Dubbo-Admin 0.6.0】

B站学习视频 基于Dubbo3.2.9、Nacos2.3.0、SpringBoot 2.7.17、Dubbo-Admin 0.6.0、Jdk1.8 搭建的Dubbo学习Demo 一、前置安装 1-1、Nacos 安装 我本地是通过docker-compose来安装nacos的&#xff0c;如果需要其它方式安装可以去百度找下教程&#xff0c;版本是2.3.0的 docker…

C语言要点细细梳理(下)

10. 运算符补充 10.1 位运算 位运算符&#xff1a;<< >> & | ~ ^ << >> &#xff1a;按位左移右移&#xff0c;移出去的数直接丢掉&#xff0c;符号不动 &&#xff1a;按位与 |&#xff1a; 按位或 ~&#xff1a;按位非 ^&#xff1a;按…

iOS使用CoreML运用小型深度神经网络架构对图像进行解析

查找一个图片选择器 我用的是ImagePicker 项目有点老了&#xff0c;需要做一些改造&#xff0c;下面是新的仓库 platform :ios, 16.0use_frameworks!target learnings dosource https://github.com/CocoaPods/Specs.gitpod ImagePicker, :git > https://github.com/KevinS…

基于VUE实现的餐厅经营游戏项目源码

WebMOOC 餐厅游戏 项目介绍 实现了一个类游戏的餐厅经营模拟&#xff0c;涉及的前端知识有移动端 HTML 页面布局及样式实现。实现了厨师、顾客等角色的关键操作&#xff0c;完成从顾客等位、点菜、烹饪、用餐、支付的一系列状态变更的数据、信息、交互、展现的变化及处理。 …

巨控560:走向国际,我们的设备如何拥抱远程控制技术?

走向国际&#xff0c;我们的设备如何拥抱远程控制技术&#xff1f; 描述&#xff1a;随着国内设备走向国际市场&#xff0c;客户需求的多样性和不确定性大大增加。本文将深入探讨在这一背景下&#xff0c;是否有必要为我们的设备加装远程PLC控制模块&#xff0c;以及如何应对频…

分布式系统架构中的相关概念

1.1、衡量网站的性能指标 响应时间&#xff1a;指执行一个请求从开始到最后收到响应数据所花费的总体时间。并发数&#xff1a;指系统同时能处理的请求数量。 并发连接数&#xff1a;指的是客户端向服务器发起请求&#xff0c;并建立了TCP连接。每秒钟服务器连接的总TCP数量请…

基于SSM+Jsp+Mysql的图书仓储管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

ospf的路由计算

LSA是链路状态信息&#xff08;描述接口信息&#xff09;&#xff0c;路由器将接口信息发给其他路由器&#xff0c;LSA有6个分类&#xff0c;1&#xff0c;2类描述区域内信息&#xff0c;3类是区域间的&#xff0c;5类是外部路由&#xff0c;4类是对5类的补充&#xff0c;7类是…

企微知识库优缺点解析:如何让其效益最大化

企业搭建企微知识库&#xff0c;作为企业内部知识的集中存储和共享平台&#xff0c;为企业带来了很多便利。但是&#xff0c;任何事物都有其两面性&#xff0c;企微知识库也不例外。今天我们就来详细探讨搭建企微知识库的优点和缺点&#xff0c;如何在使用企微知识库时使其发挥…

【群晖】NASTOOL-自动化处理影音视频工具

【群晖】NASTOOL-自动化处理影音视频 本文主要从获取、部署、使用、配置等方面进行手把手教学如何使用nastool工具进行影音视频自动化处理。从此靠别繁琐的网上各个网址找资源-下载-复制-改名-刮削等操作。 准备 DSM 7.1 &#xff08;我使用的是群晖 7.1 系统&#xff0c;不管…

【一站式学会Kotlin】第一节 kotlin 介绍

作者介绍&#xff1a; 百度资深Android工程师T6&#xff0c;在百度任职7年半。 目前&#xff1a;成立赵小灰代码工作室&#xff0c;欢迎大家找我开发Android、微信小程序、鸿蒙项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默。给大家…

并发编程之线程池的应用以及一些小细节的详细解析

线程池在实际中的使用 实际开发中&#xff0c;最常用主要还是利用ThreadPoolExecutor自定义线程池&#xff0c;可以给出一些关键的参数来自定义。 在下面的代码中可以看到&#xff0c;该线程池的最大并行线程数是5&#xff0c;线程等候区&#xff08;阻塞队列)是3&#xff0c;即…