kubernetes最小调度单元Pod概述

Pod概述

  • 一.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官方文档:https://kubernetes.io/
K8s中文官方文档: https://kubernetes.io/zh/
K8s Github地址:https://github.com/kubernetes/kubernetes

1.Pod是什么

官方文档:https://kubernetes.io/docs/concepts/workloads/pods/

Pod是Kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定一个镜像,这样就可以用来运行具体的服务。一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。也就是说,应该把整个pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程。
在这里插入图片描述
Pod是需要调度到k8s集群的工作节点来运行的,具体调度到哪个节点,是根据scheduler调度器实现的。

可以把pod看成是一个**“豌豆荚”,里面有很多“豆子”**(容器)。一个豌豆荚里可以有很多豆子(容器)
在这里插入图片描述
pod相当于一个逻辑主机–比方说我们想要部署一个tomcat应用,如果不用容器,我们可能会部署到物理机、虚拟机或者云主机上,那么出现k8s之后,我们就可以定义一个pod资源,在pod里定义一个把tomcat容器,所以pod充当的是一个逻辑主机的角色。

2.Pod网络共享实现方式

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

查看Pod得到IP地址

kubectl get pod -n kube-system -o wide

在这里插入图片描述
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等。

Pod中容器共享网络方式:

在K8S中,启动Pod是,首先会启动一个pause的容器,然后将后续的所有容器都link到这个pause容器,以实现网络共享。如下图所示:
在这里插入图片描述
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重启之后数据不会丢失,数据依旧存在。如下图所示:
在这里插入图片描述

4.创建Pod的流程

在这里插入图片描述

  • 第一步:通过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

3.使用kubectl explain帮助命令

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

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

2.创建Pod及Pod常用命令

1.创建Pod资源

vim 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

在这里插入图片描述
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.mzph.cn/news/769904.shtml

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

相关文章

js中多重引号会导致函数的参数失效报错-Invalid or unexpected token

在js使用中我们经常会使动态添加html信息到元素对象中&#xff0c;且还加入了函数及其&#xff0c;函数对应参数&#xff0c;这个时候就会使用多重引号去拼接&#xff0c;如果拼接中没有做引号的转义&#xff0c;就会出现Invalid or unexpected token。 例如以下代码&#xff0…

利器 | 测试必会之 Linux 三剑客 ( grep / awk / sed )

Linux 给人的印象是黑乎乎的神秘窗口&#xff0c;文本操作和数据处理似乎没有 Windows 窗口界面直观方便。其实Linux 有自己的独特的法宝&#xff0c;称之为三剑客&#xff1a;grep&#xff0c;awk 和 sed。你可以用这三件法宝很方便的处理数据 &#xff1a;查找&#xff0c;分…

【中间件】docker数据卷

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;中间件 ⛺️稳中求进&#xff0c;晒太阳 1.数据卷&#xff08;容器数据管理&#xff09; 修改nginx的html页面时&#xff0c;需要进入nginx内部。并且因为内部没有编辑器&#xff0c;修改…

Redis - 高并发场景下的Redis最佳实践_翻过6座大山

文章目录 概述6座大山之_缓存雪崩 &#xff08;缓存全部失效&#xff09;缓存雪崩的两种常见场景如何应对缓存雪崩&#xff1f; 6座大山之_缓存穿透&#xff08;查询不存在的 key&#xff09;缓存穿透的原因解决方案1. 数据校验2. 缓存空值3. 频控4. 使用布隆过滤器 6座大山之_…

Java项目:73 ssm档案管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 角色&#xff1a;管理员、用户 用户点击进入到系统操作界面&#xff0c;可以对个人中心、警察信息管理、事故信息管理、申诉信息管理等功能模…

基于java+springboot+vue实现的医院门诊信息管理系统(文末源码+Lw+ppt)23-325

摘 要 系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对医院门诊信息的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而…

微服务高级篇(四):多级缓存:Nginx本地缓存 --- Redis缓存 --- 进程缓存

文章目录 一、多级缓存概念二、准备工作【导入案例&#xff0c;并搭建Nginx反向代理】2.1 导入商品案例2.1.1 安装MySQL2.1.2 导入SQL2.1.3 导入Demo工程2.1.4 启动2.1.5 导入商品查询页面 三、JVM进程缓存【第三级缓存】3.1 本地进程缓存与分布式缓存的区别3.2 本地进程缓存&a…

DC-4靶机

一.环境搭建 1.下载地址 靶场下载地址:https://download.vulnhub.com/dc/DC-4.zip 下载不下来用迅雷下载 2.虚拟机配置 切换为nat模式 开启靶机&#xff0c;遇到所有的错误直接点重试或者是&#xff0c;开启后呈现为下图即可 二.开始渗透 1.信息收集 老规矩&#xff0c;…

【排序算法】插入排序与选择排序详解

文章目录 &#x1f4dd;选择排序是什么&#xff1f;&#x1f320;选择排序思路&#x1f309; 直接选择排序&#x1f320;选择排序优化&#x1f320;优化方法&#x1f309;排序优化后问题 &#x1f320;选择排序效率特性 &#x1f309;插入排序&#x1f320;插入排序实现 &#…

简单了解单例模式

什么是单例模式 对于一个类&#xff0c;只有一个实例化的对象&#xff0c;我们构建单例模式一般有两种&#xff1a;饿汉式和懒汉式 饿汉式 优点是无线程安全问题&#xff0c;类加载就创建对象缺点是占内存 class Singleton01{private static Singleton01 instance new Sing…

【JavaScript】JavaScript 程序流程控制 ⑥ ( while 循环概念 | while 循环语法结构 )

文章目录 一、while 循环1、while 循环概念2、while 循环语法结构 二、while 循环 - 代码示例1、打印数字2、计算 1 - 10 之和 一、while 循环 1、while 循环概念 在 JavaScript 中 , while 循环 是一种 " 循环控制语句 " , 使用该语句就可以 重复执行一段代码块 , …

瑞_Redis_商户查询缓存_什么是缓存

文章目录 项目介绍1 短信登录2 商户查询缓存2.1 什么是缓存2.1.1 缓存的应用场景2.1.2 为什么要使用缓存2.1.3 Web应用中缓存的作用2.1.4 Web应用中缓存的成本 附&#xff1a;缓存封装工具类 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《Redis》的实战篇的商户查询缓…

C语言---------strlen的使用和模拟实现

字符串是以‘\0’作为结束标志&#xff0c;strlen函数的返回值是‘\0’前面的字符串的个数&#xff08;不包括‘\0’&#xff09; 注意 1&#xff0c;参数指向的字符串必须以‘\0’结束 2&#xff0c;函数的返回值必须以size_t,是无符号的 使用代码 ​ #include<stdio.…

学习刷题-13

3.23 hw机试【二叉树】 剑指offer32 剑指 offer32&#xff08;一、二、三&#xff09;_剑指offer 32-CSDN博客 从上到下打印二叉树I 一棵圣诞树记作根节点为 root 的二叉树&#xff0c;节点值为该位置装饰彩灯的颜色编号。请按照从 左 到 右 的顺序返回每一层彩灯编号。 输…

学习vue3第十一节(依赖注入:provide/inject)

本机介绍&#xff1a;provide/inject 注意&#xff1a;大家在看此小节时候&#xff0c;默认大家已经了解一些组件的使用方法 1、依赖注入的用途&#xff1a; 当嵌套层级多的时候&#xff0c;某个子组件需要较远层级的父组件数据时候&#xff0c;如果我们依然使用props 传递数…

关系型数据库mysql(6)备份与恢复

一.数据备份的重要性 &#xff08;1&#xff09;在生产环境中&#xff0c;数据的安全性至关重要 &#xff08;2&#xff09;任何数据的丢失都可能产生严重的后果 &#xff08;3&#xff09;造成数据丢失的原因 程序错误人为操作失误运算错误磁盘故障灾难&#xff08;如火灾…

背景减除(1)--bgslibrary Windows编译和使用

入侵监控领域中&#xff0c;在固定场景下&#xff0c;需要检测和监控的入侵物体种类繁多&#xff0c;无法具体穷尽。传统的CV算法提取的特征应用场景有限&#xff0c;无法完成大量物体的监控&#xff1b;深度学习目标检测方法没法收集到无穷无尽的物体种类&#xff0c;因此监督…

C语言----strcpy和strcat的使用和模拟实现

一&#xff0c;strcpy()函数 strcpy() 函数是 C语言中一个非常重要的字符串处理函数&#xff0c;其功能是将一个字符串复制到另一个字符串中。该函数原型如下&#xff1a; char*strcpy(char*dest,const char*src) 其中&#xff0c;dest 表示目标字符串&#xff0c;即将被复制到…

【HDFS】DatanodeAdminBackoffMonitor退役节点极慢的问题定位

一、现象: 下节点特别慢。10台节点,每台大约需要退役60w个块。但是3个小时才退役了3000多个块。 NN侧如下日志,可以看到30秒只退役了512-494 = 20个块,这要是退役600w个块,得猴年马月? 2024-03-19 14:44:42,952 INFO org.apache.hadoop.hdfs.server.blockmanagement.D…

浅析扩散模型与图像生成【应用篇】(十一)——DDIBs

11. Dual Diffusion Implicit Bridges for Image-to-Image Translation 该文提出一种双扩散隐式桥&#xff08;Dual Diffusion Implicit Bridges&#xff0c; DDIBs&#xff09;方法用于图像转换&#xff0c;其最大的特点在于处理源域图像的模型和处理目标域图像的模型是彼此分…