K8S之Pod的介绍和使用

news2024/11/15 17:25:46

Pod的理论和实操

  • pod理论说明
    • Pod介绍
    • Pod运行与管理
      • Pod管理多个容器
      • Pod网络
      • Pod存储
    • Pod工作方式
      • 自主式Pod
      • 控制器管理的Pod(常用)
    • 创建pod的流程
  • pod实操
    • 通过资源清单文件创建自主式pod
    • 通过kubectl run创建Pod(不常用)

pod理论说明

Pod介绍

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

Pod运行与管理

Pod是需要调度到k8s集群的工作节点来运行的,具体调度到哪个节点,是根据scheduler调度器实现的。
在这里插入图片描述

Pod管理多个容器

Pod中可以同时运行多个容器。同一个Pod中的容器会自动的分配到同一个 node 上。同一个Pod中的容器共享资源、网络环境,它们总是被同时调度,在一个Pod中同时运行多个容器是一种比较高级的用法,只有当容器之间需要紧密配合协作的时候才考虑用这种模式。

一些Pod有init容器和应用容器。 在应用程序容器启动之前,运行初始化容器。
在这里插入图片描述
目前最流行的容器有Docker、Containerd、Podman,Pod可以作为1或者多个容器的载体。

Pod网络

Pod是有IP地址的,由网络插件(calico、flannel、weave)划分的IP,每个pod都被分配唯一的IP地址
在k8s中,启动Pod时,会先启动⼀个pause 的容器,然后将后续的所有容器都 link 到这个pause 的容器,以实现网络共享。
在这里插入图片描述

Pod存储

创建Pod的时候可以指定挂载的存储卷。 Pod中的所有容器都可以访问共享卷,允许这些容器共享数据。 Pod只要挂载持久化数据卷,Pod重启之后数据还是会存在的。
在这里插入图片描述

Pod工作方式

在K8s中,所有的资源都可以使用yaml文件来创建,因此创建Pod也可以使用yaml配置文件(常用方式)。也有使用kubectl run在命令行创建Pod (不常用)

自主式Pod

所谓的自主式Pod,就是直接定义一个Pod资源
如果Pod被删除,就彻底被删除了,不会再创建一个新的Pod,这在生产环境还是具有非常大风险的。
例如:
创建一个pod资源文件

vim pod-tomcat.yaml
apiVersion: v1
kind: Pod # 直接定义为Pod资源
metadata:
  name: tomcat-test
  namespace: default
  labels:
    app: tomcat
    use: test
spec:
  containers:
  - name:  tomcat-java
    ports:
    - containerPort: 8080
    image: tomcat-8.5-jre8:v1
    imagePullPolicy: IfNotPresent

创建资源

kubectl apply -f pod-tomcat.yaml

查看pod是否创建成功
(ps. -o wide 表示看完整信息,-l app=tomcat 表示查询有app:tomcat 标签的pod)

kubectl get pods -o wide -l app=tomcat

在这里插入图片描述
删除pod

kubectl delete pods tomcat-test

在这里插入图片描述
结果是空,说明pod已经被删除了

控制器管理的Pod(常用)

常见的管理Pod的控制器:Replicaset、Deployment、Job、CronJob、Daemonset、Statefulset。
控制器管理的Pod可以确保Pod始终维持在指定的副本数运行。

例如:通过Deployment管理Pod
创建一个Deployment资源文件

vim nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  labels:
    app: nginx-deploy
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

创建资源

kubectl apply -f nginx-deploy.yaml

查看Deployment

kubectl get deploy -l app=nginx-deploy

READY为2/2 表示有2个pod已创建并运行
在这里插入图片描述
查看pod

kubectl get pods -o wide -l app=nginx

在这里插入图片描述
删除上面图中 nginx-test-5b76549fbd-g5779 这个pod

kubectl delete pods nginx-test-5b76549fbd-g5779 

再看pod的情况

kubectl get pods -o wide -l app=nginx

发现重新创建一个新的pod是:nginx-test-5b76549fbd-xzv6p
在这里插入图片描述
通过上面可以发现通过deployment管理的pod,可以确保pod始终维持在指定副本数量

创建pod的流程

在这里插入图片描述
第一步:
通过 kubectl 命令向 apiServer 提交创建pod的请求,apiServer 接收到pod创建请求后,会将pod的属性信息(metadata)写入etcd(数据库)。

第二步:
apiServer 触发watch机制准备创建pod,信息转发给调度器scheduler,调度器使用调度算法选择node,调度器将node信息给apiServer ,apiServer 将绑定的node信息写入etcd

第三步:
apiServer 又通过watch机制,调用kubelet,指定pod信息,kubelet调用容器运行时创建并启动pod内的容器。

第四步:
pod创建完成之后反馈给kubelet, kubelet又将pod的状态信息给apiServer ,apiServer 再将pod的状态信息写入etcd。

pod实操

通过资源清单文件创建自主式pod

开始编写yaml时,可查看帮助命令:

kubectl explain pod

执行帮助命令后,会返回yaml里需要编写的字段名,格式和含义
在这里插入图片描述

# apiVersion、kind填帮助命令里返回的value

apiVersion: v1 #api版本
kind: Pod  #创建的资源
metadata:
  name: tomcat-test  #Pod的名字
  namespace: default  #Pod所在的名称空间
  labels:
    app:  tomcat  #Pod具有的标签,key为app,value为tomcat  
spec:
  containers:
  - name:  tomcat-java  #Pod里容器的名字
image: xianchao/tomcat-8.5-jre8:v1  #容器使用的镜像
  imagePullPolicy: IfNotPresent   #镜像拉取策略
    ports:
    - containerPort: 8080  #容器暴露的端口

其中,imagePullPolicy是镜像拉取策略,可以根据这个字段设置镜像拉取策略,支持如下三种:

  • Always:不管本地是否存在镜像,都要重新拉取镜像
  • Never: 从不拉取镜像
  • IfNotPresent:如果本地存在,使用本地的镜像,本地不存在,从官方拉取镜像

查看命名空间

kubectl get ns

在这里插入图片描述

更新资源清单文件

kubectl apply -f pod-tomcat.yaml

查看pod是否创建成功
(ps. -l app=tomcat 表示查询标签)

kubectl get pods -l app=tomcat

在这里插入图片描述

查看指定命名空间下的pods

kubectl get pods -n default

查看pod的IP和调度节点

kubectl get pods -owide

在这里插入图片描述
查看pod日志

kubectl logs tomcat-test

在这里插入图片描述
进入到刚才创建的pod,刚才创建的pod名字是tomcat-test

kubectl exec -it tomcat-test  -- /bin/bash

在这里插入图片描述
假如pod里有多个容器,进入到pod里的指定容器,加 -c 容器的名字

kubectl exec -it tomcat-test -c tomcat-java -- /bin/bash

查看pod详细信息

kubectl describe pods tomcat-test

在这里插入图片描述
查看pod具有哪些标签

kubectl get pods --show-labels

在这里插入图片描述
删除pod

kubectl delete pods tomcat-test

或者

kubectl delete -f pod-tomcat.yaml

通过kubectl run创建Pod(不常用)

kubectl run tomcat --image=tomcat-8.5-jre8:v1 --image-pull-policy='IfNotPresent'  --port=8080

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

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

相关文章

springboot整合mqtt实现消息订阅和推送

前言 mica-mqtt-client-spring-boot-starter是一个基于Spring Boot的MQTT客户端启动器,它集成了mica-mqtt客户端,提供了在Spring Boot应用程序中使用MQTT协议进行消息通信的能力。以下是关于mica-mqtt-client-spring-boot-starter的简介: 特…

Spring-boot项目+Rancher6.3部署+Nacos配置中心+Rureka注册中心+Harbor镜像仓库+NFS存储

目录 一、项目概述二、环境三、部署流程3.1 Harbor部署3.1.1 docker安装3.1.2 docker-compose安装3.1.3 安装证书3.1.4 Harbor下载配置安装 3.2 NFS存储搭建3.3 Rancher平台配置3.3.1 NFS存储相关配置3.3.2 Harbor相关配置3.3.3 Nacos部署及相关配置3.3.4 工作负载deployment配…

在 Android 中使用 C/C++:初学者综合指南

在 Android 中使用 C/C:初学者综合指南 一、为什么有人在他们的 Android 项目中需要 C/C 支持?二、了解 C 如何集成到 Android 应用程序中三、C和Java程序的编译3.1 Java3.2 Android ART 和 DEX 字节码 四、使用 JNI 包装 C 源代码五、CMake和Android ND…

326. Power of Three(3 的幂)

题目描述 给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false。 整数 n 是 3 的幂次方需满足:存在整数 x 使得 n 3 x n 3^x n3x 问题分析 要证明一个整数是三的幂次方&#…

【计算机网络】【练习题及解答】【新加坡南洋理工大学】【Computer Control Network】

说明: 仅供学习使用。 一、题目描述 题目共4问,描述网络通信中的 帧传输时延(Frame Delay)、传播时延(Propagation Delay),以及 链接利用率(Link Utilization) 的相关…

《游戏-03_2D-开发》

基于《游戏-02_2D-开发》, 继续制作游戏: 首先要做的时切割人物Idle空闲状态下的动画, 在切割之前我们需要创建一个文件夹,用来存放动画控制器AnimatorContoller, 再创建一个人物控制器文件夹用来存放人物控制器&…

当前的人工智能忽略了人类最具有灵性的心理部分

在人工智能的发展中,目前人工智能的侧重点主要是在物理机理与数理符号计算方面。 物理机理是指人工智能系统对现实世界的感知和交互能力。例如,通过传感器和摄像头等设备获取环境信息,以及利用机器学习和深度学习等技术进行数据分析和模式识别…

pve宿主机更改网络导致没网,pve更改ip

一、问题描述 快过年了,我把那台一直在用的小型服务器,带回去了,导致网络发生了变更,需要对网络进行调整,否则连不上网,我这里改的是宿主机,不是pve虚拟机中的系统。 二、解决方法 pve用的是…

AutoDL----VScode远程ssh连接

1、首先安装ssh插件 首先安装插件,在商店里抖索remote-ssh 2、建立连接 安装完成后在插件栏就会看到远程连接这一栏 点击添加后会让你输入ssh的地址,直接复制AutoDL的,按下Enter,选择第一个配置文件 选择Linux平台 继续后…

8-Docker网络模式之none

1.介绍 Docker none网络模式下,虽然Docker容器拥有自己的Network Namespace,但是Docker容器不会进行任何网络配置,即:Docker容器没有网卡,IP地址等信息,只有lo回环网络。由于这种类型的网络没有办法联网,所以封闭的网络能很好的保证Docker容器的安全性。 2.原理 Dock…

Oracle 面试题 | 02.精选Oracle高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Keepalived + DR 集群

目录 1、Keepalive VRRP 说明 故障切换 工作原理 核心组件 2、Keepalived DR 集群 拓扑规划 前期准备 配置 Httpd 服务 配置 Nginx 服务 配置 LVS 主 node_01 配置 LVS 从 node_02 测试 LVS 集群 测试主备切换 3、Keepalived 脑裂现象 4、Keepalived 心态检测 …

每日一练:LeeCode-404、左叶子之和【二叉树】

本文是力扣LeeCode-404、左叶子之和 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。 404、 左叶子之和 给定二叉树的根节点 root ,返回所有左叶子之和。 示例 1: 输入: root [3,9,20,null,null,…

Coremail启动鸿蒙原生应用开发,打造全场景邮件办公新体验

1月18日,华为在深圳举行鸿蒙生态千帆启航仪式,Coremail出席仪式并与华为签署鸿蒙合作协议,宣布正式启动鸿蒙原生应用开发。作为首批拥抱鸿蒙的邮件领域伙伴,Coremail的加入标志着鸿蒙生态版图进一步完善。 Coremail是国内自建邮件…

Spring | Spring的“数据库开发“ (Srping JDBC)

目录: Spring JDBC1.Spring JDBC的核心类 ( JdbcTemplate类 )2.Srping JDBC 的配置3.JdbcTemplate类的“常用方法”execute( ):直接执行“sql语句”,没有返回值update( ) :“增删改”,返回 “影响的行数”query( ) : “…

LabVIEW电液伺服控制系统

介绍了如何利用ARM微处理器和LabVIEW软件开发一个高效、精准的电液伺服控制系统。通过结合这两种技术,我们能够提高系统的数字化程度、集成化水平,以及控制精度,从而应对传统电液伺服控制器面临的问题。 该电液伺服控制系统由多个关键部分组…

IDEA:git 回滚本地提交-git 选择 Reset Current Branch to

前言 回滚提交到本地但是还没有 Push 上去的提交 选择我们要回滚的节点,然后点击 git 选择 Reset Current Branch to… 再选择 Hard 。当我们点击 Reset 的时候,代码就会回滚到单前选中的这个版本

Docker 安装篇(CentOS)

Docker社区版 Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。 1、Docker 要求 C…

《CSS3》田字网格背景(外实线内虚线)的实现

一、前言 记录一些有趣的CSS实现方式,总所周知,当一段效果可以通过CSS实现的时候,绝不使用Javascript来实现,因此记录一些有意思的CSS效果,一来是方便自己学习,另一来是方便以后在需要使用到的时候能快速找…

聊一聊GPT、文心、通义、混元

我使用同一个Prompt提示词“请以记叙文的文体来写”,分别发送给GPT-3.5(调用API)、文心、通义、混元,下面是它们各自生成的文本内容,大家一看便知了。 GPT-3.5: 在我个人使用GPT模型的过程中,我…