当前位置: 首页 > article >正文

涨薪技术|Kubernetes(k8s)之认识Pod

01了解Pod

Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。

一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。它可能由单个容器或多个容器共享组成的资源。

Kubernetes中的Pod使用可分两种主要方式:

  • Pod中运行一个容器。“one-container-per-Pod”模式是Kubernetes最常见的用法; 在这种情况下,你可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。

  • Pods中运行多个需要一起工作的容器。Pod可以封装紧密耦合的应用,它们需要由多个容器组成,它们之间能够共享资源,这些容器可以形成一个单一的内部service单位 - 一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。

每个Pod都是运行应用的单个实例,如果需要水平扩展应用(例如,运行多个实例),则应该使用多个Pods,每个实例一个Pod。在Kubernetes中,这样通常称为Replication。Replication的Pod通常由Controller创建和管理。

02Pod结构和定义

Kubernetes 添加了一个 Pod 来托管你的应用实例。Pod 是 Kubernetes 抽象出来的,表示一组一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源。

这些资源包括:

  • 共享存储,当作卷

  • 网络,作为唯一的集群 IP 地址

  • 有关每个容器如何运行的信息,例如容器镜像版本或要使用的特定端口

Pod 为特定于应用程序的“逻辑主机”建模,并且可以包含相对紧耦合的不同应用容器。例如,Pod 可能既包含带有 Node.js 应用的容器,也包含另一个不同的容器,用于提供 Node.js 网络服务器要发布的数据。Pod 中的容器共享 IP 地址和端口,始终位于同一位置并且共同调度,并在同一工作节点上的共享上下文中运行。

Pod是Kubernetes 平台上的原子单元。当我们在 Kubernetes 上创建 Deployment 时,该Deployment 会在其中创建包含容器的 Pod (而不是直接创建容器)。每个 Pod 都与调度它的工作节点绑定,并保持在那里直到终止重启策略)或删除。如果工作节点发生故障,则会在集群中的其他可用工作节点上调度相同的 Pod。

图片

Pod资源清单:

apiVersion: v1 #必选,版本号,例如v1king: Pod #必选,资源类型,例如Podmetadata:name: string #必选,pod名称namespace: string #pod所属的命名空间,默认为"default"labels:- name: stringspec: #必选,pod中容器的详细定义containers: #必选,pod中容器列表- name: string #必选,容器名称image: string #必选,容器镜像名称imagePullPolicy: [Always|Never|IfNotPresent] #获取镜像的策略command: [string] #容器的启动命令列表,如不指定,使用打包时使用的启动命令args: [string] #容器的启动命令参数列表workingDir: string #容器的工作目录volumeMounts: #挂载到容器内部的存储卷配置- name: string #引用pod定义的共享数据卷的名称,需用volumes[]部分定义的卷名mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符readOnly: boolean #是否为只读模式ports: #需要暴露的端口库号列表- name: string #端口的名称containerPort: int #容器需要监听的端口号hostPort: int #容器所在主机需要监听的端口号,默认与Container相同protocol: string #端口协议,支持TCP和UDP,默认TCP env: #容器运行前需要设置的环境变量列表 - name: string #环境变量名称 value: string #环境变量的值resources: #资源限制和请求的设置 limits: #资源限制的设置......

可以发现,pod的资源非常繁多,因此要一个一个记住是不现实,所以k8s提供了能够查看每种资源的配置项的命令​​​​​​​

#kubectl explain 资源类型 #查看某种资源可以配置的一级属性#kubectl explain 资源类型.属性 #查看属性的子属性

查看pod资源的一级属性

[root@master ~]# kubectl explain pod

03Pod之镜像拉取策略

Pod的核心是运行容器,必须指定容器引擎,比如Docker,启动容器时需要拉取镜像,k8s的镜像拉取策略可以由用户指定:

  • IfNotPresent:在镜像已经存在的情况下,kubelet将不再去拉取镜像,仅当本地缺失时才会从仓库中拉取,默认的镜像拉取策略

  • Alaways:每次创建Pod都会重新拉取一次镜像

  • Never:Pod不会主动拉取这个镜像,仅使用本地镜像

注意:对于标签为latest的镜像文件,其默认的镜像获取策略即为Always;而对于其他标签的镜像,其默认策略则为IfNotPresent。​​​​​​​

apiVersion: v1kind: Podmetadata:name: mypodspec:containers:- name: nginximage: nginximagePullPolicy: Always

04Pod启动命令

创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数。如果要设置命令,就填写在配置文件的 command 字段下,如果要设置命令的参数,就填写在配置文件的 args 字段下。一旦 Pod 创建完成,该命令及其参数就无法再进行更改。

参数command相当于docker中的ENTRPOINT命令,args相当于docker中的CMD命令。本示例中,将创建一个只包含单个容器的 Pod。在 Pod 配置文件中设置了一个命令与两个参数:​​​​​​​

# cat commands.yamlapiVersion: v1kind: Podmetadata:name: command-demolabels:purpose: demonstrate-commandspec:containers:- name: command-demo-containerimage: debiancommand: ["printenv"]args: ["HOSTNAME", "KUBERNETES_PORT"]restartPolicy: OnFailure

运行yaml文件并查看pod节点的日志信息​​​​​​​

kubectl apply -f commands.yaml# kubectl get pods# kubectl logs command-demo## 日志中显示了 HOSTNAME 与 KUBERNETES_PORT 这两个环境变量的值:command-demotcp://10.3.240.1:443

如果要覆盖默认的 ENTRPOINT 与 CMD,需要遵循如下规则:

1. 如果在容器配置中没有设置 command 或者 args,那么将使用 Docker 镜像自带的命令及其参数。

2. 如果在容器配置中只设置了 command 但是没有设置 args,那么容器启动时只会执行该命令,Docker 镜像中自带的命令及其参数会被忽略。

3. 如果在容器配置中只设置了 args,那么 Docker 镜像中自带的命令会使用该新参数作为其执行时的参数。

4. 如果在容器配置中同时设置了 command 与 args,那么 Docker 镜像中自带的命令及其参数会被忽略。容器启动时只会执行配置中设置的命令,并使用配置中设置的参数作为命令的参数。

图片


http://www.kler.cn/a/591209.html

相关文章:

  • 前端(vue)学习笔记(CLASS 4):组件组成部分与通信
  • Qt 读取数据库
  • 每日一题:动态规划
  • 第17章-用6050走直线和转90度功能 平衡车入门---MPU6050陀螺仪的使用 超详细陀螺仪MPU6050模块输出姿态角(有完整版源码)
  • Oracle 启用 Sql 跟踪的方式
  • 微软OneNote无法同步解决方案
  • 记一次ElasticSearch参数调优
  • Bash环境定制git分支提示符暨JDK版本切换脚本
  • C 语言格式化输入输出详解
  • 译:《Converting a Hugging Face Model to a GGUF Model》转化HuggingFace原生模型为GGUF格式
  • autosar功能安全文档解析
  • 【极光 Orbit·STC8AH】04. 深度探索 GPIO 底层逻辑
  • Redis之单线程与多线程
  • 【leetcode hot 100 124】二叉树中的最大路径和
  • 【Linux网络编程】I/O模型
  • DeepSeek 3FS集群化部署临时笔记
  • 素数判定方法详解:从基础试除法到优化策略
  • TDE透明加密:重塑文件传输与网盘存储的安全新范式
  • 生信分析服务作图TCGA/GEO数据库挖掘细胞测序转录学代做指导辅导
  • Scrapy爬虫实战:动态代理破解链家反爬机制的详细步骤