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

news2024/12/26 11:07:13

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.coloradmin.cn/o/1606667.html

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

相关文章

[开发日志系列]PDF图书在线系统20240415

20240414 Step1: 创建基础vueelment项目框架[耗时: 1h25min(8:45-10:10)] 检查node > 升级至最新 (考虑到时间问题,没有使用npm命令行执行,而是觉得删除重新下载最新版本) > > 配置vue3框架 ​ 取名:Online PDF Book System 遇到的报错: 第一报错: npm ERR! …

Visual Studio调试C/C++指南

1. 前言 Visual Studio&#xff08;VS&#xff09;是微软开发的一款集成开发环境(IDE)软件&#xff0c;支持C/C、C#、VB、Python等开发语言&#xff0c;开发桌面、Web等应用程序。VS功能极其强大&#xff0c;使用极其便利&#xff0c;用户数量最多&#xff0c;被誉为"宇宙…

Python进阶编程 --- 3.闭包、装饰器、设计模式、多线程、网络编程、正则表达式、递归

文章目录 第三章&#xff1a;3.1 闭包3.2 装饰器语法糖写法 3.3 设计模式3.3.1 单例模式3.3.2 工厂模式 3.4 多线程3.4.1 进程、线程和并行执行3.4.2 多线程编程 3.5 网络编程3.5.1 Socket3.5.2 服务端开发3.5.3 客户端开发 3.6 正则表达式3.6.1 基础匹配3.6.2 元字符匹配单字符…

DevOps(八)Jenkins的Maven和Git插件

一、Maven简介 Maven是一个构建生命周期管理和理解工具&#xff0c;用于Java项目。它提供了标准化的构建流程&#xff0c;并简化了从项目编译到文档生成等各种构建方面的管理。 Maven是由Apache软件基金会开发和维护的一个流行的项目管理工具。它的设计目的是简化Java项目的构…

基于深度学习的光场超分辨率算法综述

摘要&#xff1a;光场图像分辨率低的原因之一是光场空间分辨率和角度分辨率之间存在相互制约。光场超分辨率技术旨在从低分辨率光场图像中重建出高分辨率光场图像。基于深度学习的光场超分辨率方法通过学习高、低分辨率光场图像之间的映射关系来提升图像的质量&#xff0c;突破…

三级等保安全解决方案——实施方案

实施方案设计 本方案将依照国家有关信息安全建设的一系列法规和政策&#xff0c;为电台建立体系完整、安全功能强健、系统性能优良的网络安全系统。以“统一规划、重点明确、合理建设、逐步强化”为基本指导原则。根据电台网络系统不同信息的重要性调整保护策略&#xff0c;不欠…

OpenHarmony网络组件-Mars

项目简介 Mars 是一个跨平台的网络组件&#xff0c;包括主要用于网络请求中的长连接&#xff0c;短连接&#xff0c;是基于 socket 层的解决方案&#xff0c;在网络调优方面有更好的可控性&#xff0c;暂不支持HTTP协议。 Mars 极大的方便了开发者的开发效率。 效果演示 编译…

【数学】推荐一种用尺规绘制正五边形,简单而又精确的作法

【说明】 正五边形的尺规作图方法很多&#xff0c;但大多比较繁琐&#xff0c;下面介绍一种作法&#xff0c;这种方法步骤少&#xff0c;简便易行。 【具体步骤】 1.作相互垂直的两条直线&#xff0c;交点为O&#xff1b; 2.以O为圆心作圆&#xff0c;交横线与AB两点&#…

死磕GMSSL通信-C/C++系列(一)

死磕GMSSL通信-C/C++系列(一) 最近再做国密通信的项目开发,以为国密也就简单的集成一个库就可以完事了,没想到能有这么多坑。遂写下文章,避免重复踩坑。以下国密通信的坑有以下场景 1、使用GMSSL guanzhi/GmSSL进行通信 2、使用加密套件SM2-WITH-SMS4-SM3 使用心得 ​…

团体程序设计天梯赛 往年关键真题 详细分析完整AC代码】L2-014 列车调度 STL L2-015 互评成绩 排序

【团体程序设计天梯赛 往年关键真题 详细分析&完整AC代码】搞懂了赛场上拿下就稳 【团体程序设计天梯赛 往年关键真题 25分题合集 详细分析&完整AC代码】&#xff08;L2-001 - L2-024&#xff09;搞懂了赛场上拿下就稳了 【团体程序设计天梯赛 往年关键真题 25分题合…

数据库--Sqlite3

1、思维导图 2sqlite3在linux中是实现数据的增删&#xff0c;改 #include<myhead.h> int main(int argc, const char *argv[]) { //1、定义一个数据库句柄指针 sqlite3* ppDb NULL; //2、创建或打开数据库 if(sqlite3_open("./mydb…

【OpenGL实践08】现代渲染管线在GLUT和Pygame和Qt.QOpenGLWidget上各自的实现代码

Qt.QOpenGLWidget进行现代渲染管线实验效果 一、说明 据说QOpenGLWidget是用来取代QGLWidget的继承者&#xff0c;我们试图将GLUT上的旧代码改成QOpenGLWidget&#xff0c;本以为差别不大&#xff0c;轻易搞定&#xff0c;经实践发现要付出极大努力才能完成。经多次实验发现G…

对比实验系列:Efficientdet环境配置及训练个人数据集

一、源码下载 可以通过下方链接下载Efficientdet源码 GitHub - zylo117/Yet-Another-EfficientDet-Pytorch: The pytorch re-implement of the official efficientdet with SOTA performance in real time and pretrained weights.The pytorch re-implement of the official …

【3GPP】【核心网】【LTE】史上最全 闲时被叫CSFB 深度分析

3.2 闲时被叫CSFB 3.2.1 闲时被叫CSFB基本流程 被叫CSFB消息附近通常有一条Paging寻呼&#xff0c;然后进行CSFB流程&#xff1a; &#xff08;1&#xff09;UE向MME发起拓展服务请求&#xff0c;同时上报TMSI和承载状态&#xff0c;该条消息的服务类型字段中会区分主/被叫&a…

NASA数据集——2017 年 12 月圣巴巴拉山托马斯大火的烟雾和灰烬数据集

Across the Channel Investigating Diel Dynamics project 简介 圣巴巴拉海峡的 ACIDD&#xff08;穿越海峡调查昼夜动态&#xff09;项目最初旨在描述浮游植物种群的日变化&#xff0c;但随着 2017 年 12 月圣巴巴拉山托马斯大火的发生&#xff0c;该项目演变为一项研究&…

JS绘制电流闪烁流动效果

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>电流闪动动效</title><style>.sd1 {dis…

传统外呼吃力不讨好?AI智能外呼降低85%人力成本!

前几天有电商的客户来咨询&#xff0c;他们每逢大促客服压力就激增&#xff0c;主要原因就是客服人员少&#xff0c;遇到这种高峰期根本来不及打电话&#xff0c;招新人的话培训时间长&#xff0c;算下来人力成本相当高。因此他们想借助智能外呼看能否解决这个难题。这种时候就…

CTFshow-PWN-前置基础(pwn21-pwn22)

关于 RELRO 保护的基础知识可以参考我上一篇博客 pwn20&#xff1a; https://myon6.blog.csdn.net/article/details/137935702?spm1001.2014.3001.5502 目录 1、pwn21 2、 pwn22 1、pwn21 提交ctfshow{【.got表与.got.plt是否可写(可写为1&#xff0c;不可写为0)】,【.got的…

2024-4-15-ARM作业

实现字符串数据收发函数的封装 源代码&#xff1a; main.c #include "gpio.h"#include "uart4.h"int main(){uart4_config();while (1){// char agetchar();// putchar(a1);char s[20];gets(s);puts(s);//putchar(\n);putchar(\r);}return 0;}uart4.c …

开发一个农场小游戏需要多少钱

开发一个农场小游戏的费用因多个因素而异&#xff0c;包括但不限于游戏的规模、复杂性、功能需求、设计复杂度、开发团队的规模和经验&#xff0c;以及项目的时间周期等。因此&#xff0c;无法给出确切的费用数字。 具体来说&#xff0c;游戏的复杂程度和包含的功能特性数量会直…