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-nginxlabels:name: my-nginx
    spec:containers:- name: my-nginximage: nginx:latestresources: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://2c73c0faa3aa91a72849fdaa1aa09cbca1ce3c6ef2092e2542fc7558d3b524a3Image:          nginxImage ID:       docker-pullable://nginx@sha256:d2cb0992f098fb075674730da5e1c6cccdd4890516e448a1db96e0245c1b7fcaPort:           80/TCPHost Port:      0/TCPState:          RunningStarted:      Thu, 18 Apr 2024 09:49:23 +0800Ready:          TrueRestart Count:  0Limits:cpu:     500mmemory:  128MiRequests:cpu:        500mmemory:     128MiEnvironment:  <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-kpmzn (ro)
    Conditions:Type              StatusInitialized       TrueReady             TrueContainersReady   TruePodScheduled      True
    Volumes:kube-api-access-kpmzn:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
    QoS Class:                   Guaranteed
    Node-Selectors:              <none>
    Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.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.k8sNormal  Pulling    13s   kubelet            Pulling image "nginx"Normal  Pulled     2s    kubelet            Successfully pulled image "nginx" in 10.625690431sNormal  Created    2s    kubelet            Created container my-nginxNormal  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-jobimage: nginxcommand: ['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.mzph.cn/news/825418.shtml

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

相关文章

Python介绍(未完)

文章目录 Python 背景知识Python 是谁创造的&#xff1f;Python 可以用来干什么&#xff1f;Python 的优缺点 搭建 Python 环境安装 Python搭建 PyCharm 环境新工具到手&#xff0c;赶紧试试中文设置第一个Python程序 Python基础语法基础语法&#xff08;1&#xff09;常量和表…

JavaScript的循环语句有哪些?作用是什么?

JavaScript 中的循环语句主要有四种&#xff1a;for 循环&#xff0c;while 循环&#xff0c;do...while 循环&#xff0c;以及 for...in 循环。每种循环都有其特定的用途和适用场景。 1.for 循环&#xff1a;这是最常见的循环类型&#xff0c;用于在指定次数内重复执行一段代…

代码随想录刷题day58|每日温度下一个更大元素I

文章目录 day58学习内容一、每日温度1.1、思路1.2、代码 二、下一个更大元素I2.1、思路2.2、代码 总结1.感想2.思维导图 day58学习内容 day58主要内容 每日温度下一个更大元素I 声明 本文思路和文字&#xff0c;引用自《代码随想录》 一、每日温度 739.原题链接 1.1、思路 使…

python复制文件夹内容

参考博客 https://blog.csdn.net/itfans123/article/details/133710731 案例1 import os import shutildef copy_folder(source_folder, destination_folder):# 创建目标文件夹os.makedirs(destination_folder, exist_okTrue)# 遍历源文件夹中的所有文件和文件夹for item in …

[docker] 核心知识 - 概念和运行

[docker] 核心知识 - 概念和运行 之前 docker 学了个开头就去搞项目去了&#xff0c;不过项目也开展了好久了&#xff0c;前端差不多吃透了&#xff0c;有些新功能需要用 docker 和 k8s……是时候重新学习一下了。 这一部分简单的过一下概念和讲一下怎么运行 docker 镜像和启…

uniapp开发App,手机顶部状态栏问题

问题&#xff1a;在使用uniapp开发手机App时&#xff0c;因为HBuildX创建的应用默认是沉浸式样式&#xff0c;如果去除自带的导航栏之后&#xff0c;页面会直通手机顶部状态栏&#xff0c;解决办法有一下几个 方法1&#xff1a;可以使用uniapp官方文档提供的解决方案 https://u…

Golang实践:用Sync.Map实现简易内存缓存系统

介绍 定义了一个Cache结构体&#xff0c;其中使用sync.Map作为底层数据结构来存储缓存项。Set方法用于设置缓存项&#xff0c;指定键、值以及过期时间。Get方法用于获取缓存项&#xff0c;如果缓存项存在且未过期&#xff0c;则返回值和true&#xff0c;否则返回nil和false。方…

攻防演练,作为蓝方,centos的操作系统,怎么查看是不是有隐藏用户,有没有获取权限

在攻防演练中&#xff0c;作为蓝方&#xff08;防守方&#xff09;&#xff0c;检查 CentOS 操作系统中是否存在隐藏的用户以及是否有未授权的权限获取是非常重要的。以下是一些检查步骤和工具的使用方法&#xff0c;这些可以帮助你确保系统的安全和完整性。 1. 检查系统用户 …

论文复现《SplaTAM: Splat, Track Map 3D Gaussians for Dense RGB-D SLAM》

前言 SplaTAM算法是首个开源的基于RGB-D数据&#xff0c;生成高质量密集3D重建的SLAM技术。 通过结合3DGS技术和SLAM框架&#xff0c;在保持高效性的同时&#xff0c;提供精确的相机定位和场景重建。 代码仓库&#xff1a;spla-tam/SplaTAM: SplaTAM: Splat, Track & Map 3…

前端性能优化如何做

前端性能监控是确保用户体验顺畅和快速响应的关键环节。以下是一些实施前端性能监控的常见方法和最佳实践&#xff1a; 1. 使用浏览器开发者工具 性能面板&#xff1a;Chrome、Firefox等浏览器的开发者工具提供了性能面板&#xff0c;可以记录和展示页面的加载、渲染、JavaSc…

从零开始学习Linux(3)----权限

1.Linux权限的概念 Linux用户&#xff1a;1.root&#xff0c;超级管理员 2.非root&#xff0c;XXX&#xff0c;普通用户 命令&#xff1a;su[用户名] 功能&#xff1a;切换用户。 su -&#xff1a;是指以root的身份重新登录一次。 普通用户切换root需要输入密码&#xff0c;…

java算法day56 | 动态规划part15 ● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 动规五部曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] 表示以下标i-1为结尾的字符串s&#xff0c;和以下标j-1为结尾的字符串t&#xff0c;相同子序列的长度为dp[i][j]。确定递推公式 在确定递推公式的时候&#xff0c;…

Vue2 基础四前后端交互

代码下载 前后端交互模式 接口调用方式&#xff1a;原生ajax、基于jQuery的ajax、fetch、axios。 URL 地址格式 传统形式的 URL 格式&#xff1a;schema://host:port/path?query#fragment schema&#xff1a;协议。例如http、https、ftp等host&#xff1a;域名或者IP地址…

【c4ai-command-r-plus、c4ai-command-r-v01】最强RAG模型中文流式输出多轮对话代码案例

型号概要 C4AI Command R 是一个 104B 十亿参数模型的开放权重研究版本&#xff0c;具有高度先进的功能&#xff0c;其中包括检索增强生成 (RAG) 和用于自动执行复杂任务的工具。此模型生成中使用的工具支持多步骤工具使用&#xff0c;这允许模型在多个步骤中组合多个工具来完…

优先编码器电路①

描述 下表是某优先编码器的真值表。 ①请用Verilog实现此优先编码器 输入描述 ①输入描述&#xff1a; input [8:0] I_n 输出描述 ①输出描述&#xff1a; output reg [3:0] Y_n 解题分析 本优先编码器&#xff0c;可采用case语句实现&#xff…

嵌入式操作系统FreeRTOS(队列管理)

1.队列管理 &#xff08;1&#xff09;数据存储 队列可以保存有限个具有确定长度的数据单元。队列可以保存的最大单元数目被称为队列的“深度”。在队列创建时需要设定其深度和每个单元的大小。通常情况下&#xff0c;队列被作为FIFO (先进先出)使用&#xff0c;即数据由队列尾…

解决Git 不相关的分支合并

可以直接调到解决方案,接下来是原因分析和每步的解决方式 问题原因: 我之前在自己本机创建了一个初始化了Git仓库,后来有在另一个电脑初始化仓库,并没有clone自己在本机Git远程仓库地址,导致Git历史版本不相关 错误信息 From https://gitee.com/to-uphold-justice-for-other…

点击广告就能日赚收益1000+?开发一款看广告赚收益的APP靠谱吗?

APP对接广告变现是开发者获得收益的重要方式之一&#xff0c;对一些体量较小的APP来说&#xff0c;甚至是唯一的收益来源。开发者是否可以单独开发一款全是广告的APP&#xff0c;拿出一部分的广告收益给点击者&#xff0c;类似在快手极速版里看广告获得金币一个原理&#xff0c…

解决:Java后端返回给前端的Date格式数据相差8小时的问题

问题描述&#xff1a; 后端得到的数据是对的&#xff0c;但是返回给前端后&#xff0c;数据比原数据慢了8小时。 原因&#xff1a; json数据在返回浏览器端是会被spring-boot默认的Jackson框架转换&#xff0c;而Jackson框架默认的时区GMT&#xff08;相对于中国是少了8小时…

户外公园亲子实景剧本杀小程序闯关游戏系统开发搭建

开发一个户外公园亲子实景剧本杀小程序闯关游戏系统需要考虑以下几个步骤&#xff1a; 1. 设计游戏场景和剧本&#xff1a;需要设计一系列户外公园的实景场景&#xff0c;并根据每个场景的故事情节设计剧本。需要考虑故事情节的复杂程度和互动性&#xff0c;确保游戏过程的趣味…