K8s: 关于Kubernetes中的Pod的创建,实现原理,Job调度pod以及pod网络

Pod 概述

  • Pod 是最小部署的单元,Pod里面是由一个或多个容器组成,也就是一组容器的集合
  • 一个pod中的容器是共享网络命名空间,每个Pod包含一个或多个紧密相关的用户业务容器
  • Pod 是 k8s 系统中可以创建和管理的最小单元
  • 是资源对象模型中由用户创建或部署的最小资源对象模型
  • 也是在 k8s 上运行容器化应用的资源对象,
  • 其他的资源对象都是用来支撑或者扩展 Pod 对象功能的, 比如控制器对象是用来管控 Pod 对象的
  • Service 或者 Ingress 资源对象是用来暴露 Pod 引用对象的
  • PersistentVolume 资源对象是用来为 Pod 提供存储等等

Pod的创建

  • 现在创建一个 nginx 的 pod, 创建一个文件: my-nginx.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-nginx
      labels:
        name: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx:latest
        resources:
            limits:
                memory: "128Mi"
                cpu: "500m"
        ports:
        - containerPort: 80
    
  • $ kubectl create -f my-nginx.yaml
    pod/my-nginx created
    
  • $ kubectl get po
    NAME       READY   STATUS              RESTARTS   AGE
    my-nginx   0/1     ContainerCreating   0          6s
    
  • $ kubectl describe pod my-nginx
    Name:         my-nginx
    Namespace:    default
    Priority:     0
    Node:         node1.k8s/10.211.55.11
    Start Time:   Thu, 18 Apr 2024 09:49:12 +0800
    Labels:       name=my-nginx
    Annotations:  <none>
    Status:       Running
    IP:           10.244.1.12
    IPs:
      IP:  10.244.1.12
    Containers:
      my-nginx:
        Container ID:   docker://2c73c0faa3aa91a72849fdaa1aa09cbca1ce3c6ef2092e2542fc7558d3b524a3
        Image:          nginx
        Image ID:       docker-pullable://nginx@sha256:d2cb0992f098fb075674730da5e1c6cccdd4890516e448a1db96e0245c1b7fca
        Port:           80/TCP
        Host Port:      0/TCP
        State:          Running
          Started:      Thu, 18 Apr 2024 09:49:23 +0800
        Ready:          True
        Restart Count:  0
        Limits:
          cpu:     500m
          memory:  128Mi
        Requests:
          cpu:        500m
          memory:     128Mi
        Environment:  <none>
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-kpmzn (ro)
    Conditions:
      Type              Status
      Initialized       True
      Ready             True
      ContainersReady   True
      PodScheduled      True
    Volumes:
      kube-api-access-kpmzn:
        Type:                    Projected (a volume that contains injected data from multiple sources)
        TokenExpirationSeconds:  3607
        ConfigMapName:           kube-root-ca.crt
        ConfigMapOptional:       <nil>
        DownwardAPI:             true
    QoS Class:                   Guaranteed
    Node-Selectors:              <none>
    Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
    Events:
      Type    Reason     Age   From               Message
      ----    ------     ----  ----               -------
      Normal  Scheduled  13s   default-scheduler  Successfully assigned default/my-nginx to node1.k8s
      Normal  Pulling    13s   kubelet            Pulling image "nginx"
      Normal  Pulled     2s    kubelet            Successfully pulled image "nginx" in 10.625690431s
      Normal  Created    2s    kubelet            Created container my-nginx
      Normal  Started    2s    kubelet            Started container my-nginx
    
    • 这里可以看到:
      • Successfully assigned default/my-nginx to node1.k8s
      • 这里将pod分配到 node1.k8s 节点上

Pod 的实现原理


1 ) Pod 在 K8s 中结构

  • k8s 不会直接处理容器,而是 Pod,Pod 是由一个或多个 container 组成
  • Pod 是 Kubernetes 的最重要概念,每一个 Pod 都有一个特殊的被称为”根容器“的 Pause容器
  • Pause 容器对应的镜像属于 Kubernetes 平台的一部分,除了 Pause 容器,每个Pod还包含一个或多个紧密相关的用户业务容器

2 )实现原理

  • Pod 的共享上下文包括一组 Linux 名字空间、控制组(cgroup)和可能一些其他的隔离方面
  • 即用来隔离 Docker 容器的技术。 在 Pod 的上下文中,每个独立的应用可能会进一步实施隔离
  • 就 Docker 概念的术语而言,Pod 类似于共享名字空间和文件系统卷的一组 Docker 容器
  • 说明: 除了 Docker 之外,Kubernetes 支持很多其他容器运行时
  • Docker 是最有名的运行时, 使用 Docker 的术语来描述 Pod 会很有帮助

3 )pod 的结构图例

  • 一个包含多个容器的 Pod 中包含一个用来拉取文件的程序和一个 Web 服务器
  • 均使用持久卷作为容器间共享的存储
  • 在这个小小的pod之内,网络(网卡)和磁盘都是独立的
  • 一个pod内的容器可以实现互相通信和资源共享,也就是可以访问同一个目录
  • 在 pod 停掉之前,会先关闭里面的容器

4 )pod 的使用

  • 通常你不需要直接创建 Pod,甚至单实例 Pod
  • 相反,你会使用诸如 Deployment 或 Job 这类工作负载资源 来创建 Pod
  • 如果 Pod 需要跟踪状态, 可以考虑 StatefulSet 资源

5 )Kubernetes 集群中的 Pod 主要有两种用法

  • a )运行单个容器的 Pod
    • "每个 Pod 一个容器"模型是最常见的 K8s 用例
    • 在这种情况下,可以将 Pod 看作单个容器的包装器
    • 并且 K8s 直接管理 Pod,而不是容器
  • b ) 运行多个协同工作的容器的 Pod
    • Pod 可能封装由多个紧密耦合且需要共享资源的共处容器组成的应用程序
    • 这些位于同一位置的容器可能形成单个内聚的服务单元:
      • 一个容器将文件从共享卷提供给公众
      • 而另一个单独的“边车”(sidecar)容器则刷新或更新这些文件
        • 比如:这个 sidecar 是一个日志的收集容器, 要时时的收集日志
        • 读取应用的日志并推送到 log-stash,elk 或 Prometheus 中去
      • Pod 将这些容器和存储资源打包为一个可管理的实体
      • 通过这种方式形成一个协同工作的单元

6 ) 使用job调度一系列的 pod

  • 目的:基于一个nginx容器完成shell命令,并且完成5次

  • 创建 hello-job.yaml

    apiVersion: batch/v1
    kind: Job
    metadata:
     name: hello-job
    spec:
     completions: 5 # 完成5次
     template:
        spec:
          containers:
          - name: hello-job
            image: nginx
            command: ['sh', '-c', 'echo "Hello, Kubernetes" && sleep 1']
          restartPolicy: OnFailure
    
  • $ kubectl create -f hello-job.yaml 创建 job

    job.batch/hello-job created
    
  • $ kubectl get job 获取 job

    NAME        COMPLETIONS   DURATION   AGE
    hello-job   0/5           39s        39s
    
  • $ kubectl get po -w 监控

    NAME                 READY   STATUS              RESTARTS   AGE
    hello-job--1-dfj2j   0/1     Completed           0          12s
    hello-job--1-k2d2w   0/1     Completed           0          32s
    hello-job--1-km7sn   0/1     Completed           0          21s
    hello-job--1-n78fk   0/1     Completed           0          45s
    hello-job--1-pgcvn   0/1     ContainerCreating   0          2s
    hello-job--1-pgcvn   1/1     Running             0          8s
    hello-job--1-pgcvn   0/1     Completed           0          9s
    
  • $ kubectl get job 再次获取 job

    NAME        COMPLETIONS   DURATION   AGE
    hello-job   5/5           39s        39s
    
  • $ kubectl get po 再次查看 pod

    hello-job--1-dfj2j   0/1     Completed   0          16m
    hello-job--1-k2d2w   0/1     Completed   0          16m
    hello-job--1-km7sn   0/1     Completed   0          16m
    hello-job--1-n78fk   0/1     Completed   0          17m
    hello-job--1-pgcvn   0/1     Completed   0          16m
    
  • $ kubectl logs hello-job--1-pgcvn 查看日志

    Hello, Kubernetes
    
  • $ kubectl delete job hello-job

    job.batch "hello-job" deleted
    
  • 基于以上,可以看到,基于 job 维护 pod 的运行状态的一个简单示例

7 ) pod 的 网络

  • 每个 Pod 都在每个地址族中获得一个唯一的 IP 地址
  • Pod 中的每个容器共享网络名字空间,包括 IP 地址和网络端口
  • Pod 内 的容器可以使用 localhost 互相通信
  • 当 Pod 中的容器与 Pod 之外的实体通信时,它们必须协调如何使用共享的网络资源 (例如端口)

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

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

相关文章

winform入门篇 第14章 列表控件

列表控件 列表控件 ListView相当于 ListBox的增强版&#xff0c;支持多列显示 最典型的例子:Windows的文件管理器的列表显示 列表控件的几种视图: Detail:详情模式 List: 列表模式 LargeIcon:大图标模式 Smallcon:小图标模式 列表控件的几个特点: 显示模式可以切换 可以…

java高校办公室行政事务管理系统设计与实现(springboot+mysql源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于mvc的高校办公室行政…

excel导出并合并

普通导出数据 需求 需要将相同列数据合并 效果图&#xff1a; 代码&#xff1a; package cn.silence.test;import lombok.AllArgsConstructor; import lombok.Data;/*** 班级信息*/ Data AllArgsConstructor public class ClassInfo {/*** 学院*/private String academy;/**…

OpenHarmony多媒体-ijkplayer

简介 ijkplayer是OpenHarmony环境下可用的一款基于FFmpeg的视频播放器。 演示 编译运行 1、通过IDE工具下载依赖SDK&#xff0c;Tools->SDK Manager->OpenHarmony SDK 把native选项勾上下载&#xff0c;API版本>9 2、开发板选择RK3568&#xff0c;ROM下载地址. 选择…

直流无刷散热风扇的知识原理与内部构成

①直流无刷风扇的结构&#xff1a;主要可分为转子、定子、外框、电机(马达)这四个主要部分以及一些其它的零碎的部件 第一&#xff0c;风扇转子部分: 包括风扇扇叶&#xff0c;是产生空气流动的核心、散热风扇的轴心&#xff0c;用来支撑平衡扇叶滚动、转子磁环&#xff0c;永…

Python路面车道线识别偏离预警

程序示例精选 Python路面车道线识别偏离预警 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python路面车道线识别偏离预警》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易…

Spring Boot + 事务钩子函数,打造高效支付系统!

今天&#xff0c;我继续安利一个独门绝技&#xff1a;Spring 事务的钩子函数。 单纯的讲技术可能比较枯燥乏味。 接下来&#xff0c;我将以一个实际的案例来描述Spring事务钩子函数的正确使用姿势。 一、案例背景 拿支付系统相关的业务来举例。在支付系统中&#xff0c;我们…

Nodejs 第六十四章(SSO单点登录)

单点登录 单点登录&#xff08;Single Sign-On&#xff0c;简称SSO&#xff09;是一种身份认证和访问控制的机制&#xff0c;允许用户使用一组凭据&#xff08;如用户名和密码&#xff09;登录到多个应用程序或系统&#xff0c;而无需为每个应用程序单独提供凭据 SSO的主要优…

openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置

文章目录 openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置266.1 查看当前数据盘的文件系统类型266.2 对于需要修改的磁盘&#xff0c;备份所需的数据至其他磁盘或其他服务器266.3 格式化磁盘为xfs文件系统266.4 执行**步骤一** openGauss学习笔记-…

【Keil MDK5新建工程】STM32F103C8T6

一、参数及片上外设 二、系统结构及引脚定义 三、工程架构及新建工程步骤 四、GPIO模式 一、参数及片上外设 二、系统结构及引脚定义 三、工程架构及新建工程步骤 建立工程文件夹&#xff0c;Keil中新建工程&#xff0c;选择型号 工程文件夹里建立Core、Library、User等文件夹…

2024年华中杯数学建模竞赛ABC题思路分析

简单分析一下各个题目可能需要用到的方法和模型&#xff0c;完整代码和成品论文见文末 A题 太阳能路灯光伏板的朝向设计问题: 1. 球面几何、天文学相关知识,如赤纬角、太阳高度角、时角等概念和公式 2. 太阳辐射模型,根据太阳能辐射强度、大气衰减系数等计算地表太阳辐射强度…

绝对隔离+底层限制,成就猎鹰蜜罐“牢不可破”的立体化安全

前言 自网络诞生以来&#xff0c;攻击威胁事件层出不穷&#xff0c;网络攻防对抗已成为信息时代背景下的无硝烟战争。然而&#xff0c;传统的网络防御技术如防火墙、入侵检测技术等都是一种敌暗我明的被动防御&#xff0c;难以有效应对攻击者随时随地发起的无处不在的攻击和威胁…

【学习笔记】Vue3源码解析:第五部分 - 实现渲染(1)

课程地址&#xff1a;【已完结】全网最详细Vue3源码解析&#xff01;&#xff08;一行行带你手写Vue3源码&#xff09; 第五部分-&#xff1a;&#xff08;对应课程的第29-32节&#xff09; 第29节&#xff1a;《实现渲染的createRender方法》 1、通过createApp()方法得到一个…

AI热潮下,公链基础设施赛道都有哪些变化?

最近在一级市场&#xff0c;最火热的赛道无疑是AI&#xff0c;其次是BTC&#xff0c;每天聊的项目80%都集中在这两个赛道&#xff0c;我个人最多的时候一天可以聊5&#xff0c;6个AI项目。 可以预见的是AI泡沫会在明后年达到顶峰&#xff0c;随着数以百计的AI新项目上线&#…

QT实现客户端断开连接

Widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), socket(new QTcpSocket(this)) {ui->setupUi(this);//初始化界面ui->msgEdit->setEnabled(false); //不可用ui-…

SQL Server Management Studio 显示行号

前言 在使用 SQL Server Management Studio (SSMS) 进行数据库管理和查询时&#xff0c;能够看到代码的行号是非常有用的。这可以帮助您更容易地定位代码错误、讨论特定的代码行&#xff0c;或者在执行长查询时快速找到特定行。在本文中&#xff0c;我将向您展示如何在 SSMS 中…

AIDE:自动驾驶目标检测的自动数据引擎

AIDE&#xff1a;自动驾驶目标检测的自动数据引擎 摘要IntroductionRelated WorksMethodData FeederModel Updater4 Experiments 摘要 自动驾驶车辆&#xff08;AV&#xff09;系统依赖于健壮的感知模型作为安全保证的基石。然而&#xff0c;道路上遇到的物体表现出长尾分布&a…

图像生成模型浅析(Stable Diffusion、DALL-E、Imagen)

目录 前言1. 速览图像生成模型1.1 VAE1.2 Flow-based Model1.3 Diffusion Model1.4 GAN1.5 对比速览 2. Diffusion Model3. Stable Diffusion3.1 Text Encoder3.2 Decoder3.3 Generation Model 总结参考 前言 简单学习下图像生成模型的相关知识&#x1f917; 以下内容来自于李宏…

vue3+elment复杂详情页面打开后,再打开其他页面都显示空白,控制台也没什么特殊报错

页面使用了el-tabs 、 el-tab-pane、el-table 等标签 但是经测试不是这些问题导致的 js也使用了onMounted &#xff0c;但是除掉也时空白页面 反正之前人写的页面可乱&#xff0c;尤其是js这块&#xff0c;穿插引用import一大堆 主题页面样式布局如下 最后看到页面代码太乱…

古籍数字化平台:精校功能介绍

一、平台介绍 古籍数字化平台&#xff0c;本着公益性、低成本、合作共赢的三大原则&#xff0c;功能涵盖古籍OCR识别、族谱县志OCR识别、民国报纸OCR识别、图文逐字校对、数据著录、智能标点分段、精编排版、智能白话译文等&#xff0c;是一站式线上整理全流程平台。 平台集成…
最新文章