K8s之Pod最小调度单元详解

news2024/11/14 15:21:09

文章目录

    • 一、Pod概念
      • 1、Pod是什么?
      • 2、Pod网络共享实现方式
      • 3、Pod存储共享方式
      • 4、创建Pod整体流程
    • 二、使用YAML文件定义Pod资源
      • 1、Pod资源清单YAML文件书写技巧
        • 1. YAML语法格式:
        • 2. 配置Linux tab缩进两个空格
        • 3. 使用kubectl explain帮助命令
      • 2、创建Pod及Pod常用命令
        • 1.创建Pod资源
        • 2.Pod常用命令

一、Pod概念

K8s中文官网文档:

K8S Pod官网文档:

1、Pod是什么?

Pod是k8s中最小的调度单元,Pod里面可以定义一个或多个容器,如果在一个Pod中存在多个容器,以便它们可以共享网络和存储资源,并且可以协同工作来完成一个任务。可以抽象的吧Pod理解成豌豆荚,里面的豌豆理解成容器,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KG2khBh8-1683446641109)(D:\MD归档文档\IMG\image-20230505105607164.png)]

Pod相当于一个逻辑主机,比方说我们部署一个Nginx服务,如果使用传统部署方式,我们可能会部署到,物理服务器、云服务器上,那么K8s出现后,我们可以定义一个Pod资源,在这个Pod资源中定义Nginx容器,所以Pod重当逻辑主机的角色。

2、Pod网络共享实现方式

K8s集群中Pod网络指在集群中,Pod之间和Pod与外部网络之间进行通信的网络,每一个Pod都有唯一的IP地址,Pod中的容器共享该IP地址。

查看Pod的IP地址:

kubectl get pod -n kube-system -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pVxnMAfq-1683446641110)(D:\MD归档文档\IMG\image-20230507095918770.png)]

Pod网络实现方式有很多种,包括如下:

  • 容器网络接口(CNI):CNI是Kubernetes中最常用的Pod网络实现方式之一。它允许不同的网络插件来管理Pod网络,如Flannel、Calico、Weave Net等。
  • Kubernetes Service:Kubernetes Service是一种抽象的概念,它允许Pod之间通过Service名称进行通信,而不需要知道具体的Pod IP地址。Service可以通过ClusterIP、NodePort、LoadBalancer等方式进行暴露。
  • Ingress:Ingress是Kubernetes中的一种资源对象,它允许将外部流量路由到集群内的Service。Ingress可以通过多种方式进行配置,如Nginx Ingress Controller、Traefik等。

总之,Kubernetes中的Pod网络是一个非常重要的概念,它为Kubernetes集群中的应用程序提供了高效、可靠的通信方式。

Pod中容器共享网络方式:

在K8s中,启动Pod时,首先会先启动一个pause的容器,然后将后续的所有容器都link到这个pause容器,以实现网络共享,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BnN8nOMA-1683446641111)(D:\MD归档文档\IMG\image-20230505112546484.png)]

Pod与Pod共享网络方式:

  • 在同节点不同Pod之间通信:通过linux虚拟以太网设备或者是用两个虚拟接口组成的以太网接口对不同的网络命名空间连接起来通信。

  • 不同节点的不同 pod 主机间通信:当跨 pod 通信时,本节点内无法找到目的 pod 的 mac 地址,则会查找三层路由表转发,这需要依靠不同节点间的网路配置来实现。

  • 外部网络和 pod 之间通信:pod 之间通过他们自己的 ip 地址进行通信.(但是 pod 的 ip 地址不是持久的,当集群中 pod 的规模缩减或者 pod 故障或者 node 故障重启后,新的 pod 的 ip 就可能与之前的不一样的,service 的虚拟 IP 可以解决这个问题,因为虚拟 ip 是固定的。)

3、Pod存储共享方式

在创建Pod时可以指定挂载存储卷,Pod中所有容器共享访问此存储卷,允许这个容器共享数据,Pod挂载存储卷后,Pod重启之后数据不会丢失,数据依旧存在。如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MLmXj1i4-1683446641111)(D:\MD归档文档\IMG\image-20230505113202916.png)]

4、创建Pod整体流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XLg99uSr-1683446641111)(D:\MD归档文档\IMG\image-20230507105531268.png)]

  • 第一步:通过kubectl命令向apiserver提交创建pod请求,apiservice接收到创建pod请求后,会将pod的属性信息(metadata)写入到etcd数据库中。
  • 第二步:apiserver触发watch机制准备创建pod资源,信息转发给scheduler调度器,scheduler调度器负责该pod调度到合适的节点,并将调度信息给apiserver,apiserver在写入到etcd数据库中。
  • 第三步:apiserver又通过watch机制,调用kubelet,指定pod信息,调用容器运行时创建并启动pod内容器。
  • 第四步:创建完成后反馈给kubelet,kubelet又将pod状态信息给apiserver,apiserver又将pod的状态信息写入到etcd数据库中。

总结,scheduler负责将pod调度到合适的节点,kubelet会使用容器运行时来创建容器,最后将pod状态写入etcd中。

二、使用YAML文件定义Pod资源

1、Pod资源清单YAML文件书写技巧

1. YAML语法格式:

  • 大小写敏感;
  • 使用缩进表示层级关系;
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格;
  • 字符后缩进一个空格,如冒号,逗号,短横杆(-) 等
  • "—"表示一个文件的开始 “…” 表示一个文件的结束
  • "#"表示注释

2. 配置Linux tab缩进两个空格

YAML缩进通常为两个空格,我们可以设置一下在linux中tab为两个空格,这样方便我们后续编写YAML清单

cat >> ~/.vimrc << EOF
set tabstop=2
set shiftwidth=2
set expandtab
EOF

其中,tabstop表示tab键的宽度,shiftwidth表示自动缩进的宽度,expandtab表示将tab键自动转换为空格。

3. 使用kubectl explain帮助命令

在编写pod资源清单时,忘记pod中存在那些字段参数或不明白参数含义等,可以使用一下帮助命令进行查看参数详细解释。

kubectl explain pod
kubectl explain pod.spec
kubectl explain pod.spec.containers

2、创建Pod及Pod常用命令

1.创建Pod资源

cat pod.yaml 
---
apiVersion: v1       # api版本
kind: Pod            # 定义类型
metadata:            # 元数据
  labels:           
    app: nginx       # 标签
  name: web-nginx    # Pod名称
  namespace: default # Pod名称空间
spec:           
  containers:        
  - name: web-nginx  # 容器名称
    image: nginx     # 容器使用镜像
    imagePullPolicy: IfNotPresent  # 镜像下载策略
    ports:                   
    - containerPort: 80            # 容器内暴露端口

定义完成pod清单后 使用以下命令进行创建

kubectl apply -f pod.yaml 

也可以使用命令行进行创建Pod,不常用,一般测试时使用

kubectl run nginx-1 --image=nginx --port=80

2.Pod常用命令

1、查看Pod调度节点及IP地址

kubectl get pod -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LBnyfaPO-1683446641112)(D:\MD归档文档\IMG\image-20230507153053895.png)]

2、进入Pod容器内:

kubectl exec -it web-nginx -- /bin/bash

如果Pod中存在多个容器 可以使用 -c 来指定进入的容器

kubectl exec -it web-nginx -c web-nginx -- /bin/bash

3、查看pod日志:

kubectl logs web-nginx

当然可以添加 -f 参数来实时查看日志

kubectl logs -f web-nginx

4、通过Pod标签来查看Pod:

kubectl get pod -l app

5、查看Pod具有哪些标签

kubectl get pod --show-labels

6、查看Pod详细信息

kubectl describe pod web-nginx

7、删除Pod

kubectl delete pod web-nginx

当然也可以指定yaml文件来删除文件中定义的资源

kubectl delete -f pod.yaml

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

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

相关文章

ChatGPT客服系统产品-利用chatgpt训练企业知识开发个性化客服系统

打造最前沿的AI智能客服系统&#xff0c;基于自有数据语料&#xff0c;充分运用ChatGPT的大模型自然语言生成能力&#xff0c;定制化客服系统为企业提供自主性的客服服务能力。 ChatGPT如何革新智能客服&#xff1f; 根据当前ChatGPT的使用情况&#xff0c;我们发现未来中短期内…

基于 DDR3 的串口传图帧缓存系统设计实现(fifo2mig_axi )

文章目录 前言一、接口转换模块设计二、fifo2mig_axi 模块二、接口转换模块仿真四、fifo2mig_axi_tb五、仿真展示 前言 结合串口接收模块和 tft 显示屏控制模块&#xff0c;设计一个基于 DDR3 的串口传图帧缓存系统。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面…

次世代烘焙 法线贴图 相关知识

一般将低模 高模的法线贴图实现大量细节模型画面的游戏称为次时代游戏。 次世代常用软件 低模&#xff1a;Maya、3Dmax、Topogun 。 中模&#xff1a;Maya、3Dmax 。 高模&#xff1a;Maya、3Dmax、Zbrush。 UV&#xff1a;Maya、Zbrush、Unfold3D、Uvlayout 。 烘焙&#x…

【观察】华为重构分销伙伴体系,坚持“长期主义”做大分销市场

毫无疑问&#xff0c;随着数字化转型的加速&#xff0c;当前不同类型、不同规模的企业&#xff0c;在面临数字化转型时呈现出了不同的困境和特征&#xff0c;同时对合作伙伴也提出了更高的要求&#xff0c;因此唯有通过“精耕细作”的方式才能更好地加速企业数字化转型的步伐。…

AdaSparse: 自适应稀疏网络的多场景CTR预估建模

▐ 摘要 CTR(Click-through rate)预估一直是推荐/广告领域重要技术之一。近年来&#xff0c;通过统一模型来服务多个场景的预估建模已被证明是一种有效的手段。当前多场景预估技术面临的挑战主要来自两方面&#xff1a;1&#xff09;跨场景泛化能力&#xff1a;尤其对稀疏场景&…

【分布式锁】Redisson分布式锁的使用(推荐使用)

文章目录 前言一、常见分布式锁方案对比二、分布式锁需满足四个条件三、什么是Redisson?官网和官方文档Redisson使用 四、Redisson 分布式重入锁用法Redisson 支持单点模式、主从模式、哨兵模式、集群模式自己先思考下,如果要手写一个分布式锁组件&#xff0c;怎么做&#xff…

深入理解Java虚拟机:JVM高级特性与最佳实践-总结-1

深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践-总结-1 Java内存区域与内存溢出异常运行时数据区域程序计数器Java虚拟机栈本地方法栈Java堆方法区 OutOfMemoryError异常Java堆溢出 垃圾收集器与内存分配策略对象是否可以被回收引用计数算法可达性分析算法 Java内存区域…

力库华为机试题练习

1、两数之和 arg [2, 3, 6, 5] target 4 for i in range(len(arg)): other target - arg[i] if other in arg[i1:]: print(i, arg[i1:].index(other)i1) else: print(“输入目标数在该列表中不存在”) 2、回文数 方法一&#xff1a; class Solution: def isPalindrome(sel…

抖音小程序怎么压缩图片?教你使用抖音图片压缩助手

图片压缩是将原始图像的数据量进行减少&#xff0c;从而使其文件大小更小&#xff0c;但尽量保持原有图像质量的一种技术。通过对图片进行压缩&#xff0c;可以降低图片在传输过程中所需的带宽和存储空间&#xff0c;提高网站或应用程序的加载速度和响应速度。 此外&#xff0…

亚马逊云科技将帮助GoPlus Security,助力行业健康发展

Gartner 2022年7月发布的技术成熟度曲线分析报告显示&#xff0c;目前Web3技术已经历了第一波创新高峰期&#xff0c;正在从“创新启动阶段”向“创新泡沫阶段”过渡&#xff0c;技术体系逐步成型&#xff0c;市场热度较高&#xff0c;创业投资活跃。高速增长的背后&#xff0c…

浅谈Hutool工具类

一、Hutool简介 Hutool是一个Java工具类库&#xff0c;它封装了很多常用的Java工具类&#xff0c;如加密解密、文件操作、日期时间处理、Http客户端等。它的目标是让Java开发变得更加简单、高效。 二、Hutool的特点 高效&#xff1a;提供了很多高效的工具类和方法。 简单&…

最全的国内chatGPT大模型企业及产品整理

作者 | gongyouliu 编辑 | gongyouliu 自从去年11月30日openAI发布chatGPT以来&#xff0c;chatGPT引爆了新一轮科技革命。最近很多年都没有哪一项科技进步如chatGPT这般吸引全球的目光。除了媒体的大肆报道&#xff0c;国内外各个科技公司、科研机构、高等院校都在跟进&#x…

智能卡接口(ISO7816)

概述 智能卡接口&#xff08;7816&#xff09;是外部智能卡通过2 线交换8 位数据的串行同步通讯手段。芯片提供了2 个7816主机接口模块。 ⚫ 2路独立7816接口 ⚫ 具备卡时钟输出端口&#xff0c;输出频率在1MHz~5MHz之间可设 ⚫ 位传输方向可配置&#xff0c;支持MSB First或LS…

初识C++之C++中的IO流

目录 一、C语言中的输入与输入 二、流 三、C中的流 四、C中的文件IO流 1. 二进制文件 1.1 打开文件 1.2 向文件写入数据 1.3 从文件读取数据 1.4 关闭文件 1.5 综合使用 2. 文本读写 一、C语言中的输入与输入 在C语言中&#xff0c;我们最长使用的输入输出方式就是…

0基础小白简单入门使用emqx的webhook+规则实现Mysql数据持久化

EMQX (opens new window)是一款大规模可弹性伸缩的云原生分布式物联网 MQTT (opens new window)消息服务器。 作为全球最具扩展性的 MQTT 消息服务器&#xff0c;EMQX 提供了高效可靠海量物联网设备连接&#xff0c;能够高性能实时移动与处理消息和事件流数据&#xff0c;帮助…

EndNote X9 参考文献附录列表 格式调整

文章目录 1 参考文献附录列表 格式调整2 EndNote X9 插入参考文献常见问题总结3 EndNote X9 快速上手教程&#xff08;毕业论文参考文献管理器&#xff09; 1 参考文献附录列表 格式调整 注意&#xff1a;这里讲的是对齐格式&#xff0c; 文献规范格式参考EndNote X9 快速上手…

发布会彩排哪些内容?要注意哪些细节?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 相信发布会前小伙伴都会进行彩排&#xff0c;对发布会的细节&#xff0c;流程&#xff0c;各个工种如何配合进行提前的演练&#xff0c;那么发布会彩排哪些内容&#xff0c;要注意哪些细…

数据结构-图的创建与深度优先遍历DFS(邻接矩阵-动态类型)

图的创建&#xff1a; 我们先构建一个无向图&#xff1a;如图所示 根据规定&#xff0c;如果两个顶点相连&#xff0c;则两顶点的边改为1&#xff0c;否则为0&#xff0c;我们用数组指针arcs来指向标记是否有边的数组。 1.先创建结构体&#xff0c;因为都为动态所以我们都先定…

RabbitMQ详解(四):SpringBoot整合MQ

SpringBoot整合MQ 需要创建两个springboot项目&#xff0c;一个springboot_rabbitmq_producer生产者&#xff0c;一个springboot_rabbitmq_consumer消费者 fanout模式&#xff08;配置文件方式&#xff09; 定义生产者 创建生产者工程 springboot_rabbitmq_producer pom.x…

DragonflyDB 安装使用

前言 全世界最快的内存数据库 Dragonfly是一种针对现代应用程序负荷需求而构建的内存数据库&#xff0c;完全兼容Redis和Memcached的 API&#xff0c;迁移时无需修改任何代码。相比于这些传统的内存数据库&#xff0c;Dragonfly提供了其25倍的吞吐量&#xff0c;高缓存命中率和…