【k8s应用管理】kubernetes pod资源控制管理(一)

Pod 基础

Pod 是 Kubernetes 中能够创建和管理的最小单位。Kubernetes 直接管理的是 Pod,而不是容器。

Pod 的组成

  1. Pause 容器(基础容器、父容器、根容器)

    • 作用
      1. 作为 Linux 命名空间共享的基础,为 Pod 内的其他容器提供网络、存储等资源的共享。
      2. 作为 PID=1 的 init 进程,管理整个 Pod 容器组的生命周期。
    • 特性
      • Pod 中第一个启动的容器。
      • 为其他容器提供共享的环境。
  2. 应用容器(业务容器、用户容器、Main Container)

    • 作用
      1. 运行应用程序。
      2. 作为边车容器(Sidecar),为主应用容器提供紧密相关的业务功能支持。
    • 特性
      • 在 Pause 容器之后启动。
      • 如果 Pod 中有多个应用容器,它们会并行启动。
  3. Init 容器(初始化容器)

    • 作用
      1. 在应用容器启动前,基于共享存储卷为应用容器提供依赖环境或工具包。
      2. 可以阻塞或延迟应用容器的启动。
    • 特性
      • 在 Pause 容器之后启动。
      • 如果 Pod 中有多个 Init 容器,它们会串行启动(一个完成后才会启动下一个)。

Pod 的特性

  1. 共享资源

    • 同一个 Pod 中的容器运行在同一个 Node 节点上。
    • 容器之间通过 localhost 互相通信,共享同一个 IP 和端口范围。
    • 共享同一个存储卷(Volume),实现容器间的数据共享。
  2. Pod 的 3 种类型

    • 自主式 Pod

      • 由 Scheduler 调度到 Node 节点部署。
      • 不被控制器管理,没有自愈能力(Pod 挂了不会被重建)。
      • 没有副本管理能力,不支持滚动更新。
      • 配置信息存储在 etcd 中。
      • 创建命令kubectl run ...
    • 控制器管理的 Pod

      • 由 Scheduler 调度到 Node 节点部署。
      • 被控制器(如 Deployment、StatefulSet)管理。
      • 具有自愈能力(Pod 挂了会被重建)。
      • 支持副本管理和滚动更新。
      • 配置信息存储在 etcd 中。
      • 创建命令kubectl create deployment ...
    • 静态 Pod

      • 不由 Scheduler 调度,也不通过 API Server 创建。
      • 由 Kubelet 自行创建和管理。
      • 配置信息存储在 Node 节点的 /etc/kubernetes/manifests/ 目录中。
      • Kubelet 会自动根据该目录中的 YAML 文件创建静态 Pod。
      • 删除 YAML 文件后,Kubelet 会自动删除静态 Pod。

Pod 容器的镜像拉取策略

通过 imagePullPolicy 字段定义:

  1. IfNotPresent

    • 优先使用 Node 节点本地已存在的镜像。
    • 如果本地没有,则从仓库拉取镜像。
    • 默认策略:适用于标签为非 latest 的镜像。
  2. Always

    • 总是从仓库拉取镜像,无论本地是否已存在。
    • 默认策略:适用于标签为 latest 或无标签的镜像。
  3. Never

    • 仅使用 Node 节点本地的镜像,总是不从仓库拉取镜像。

Pod 容器的重启策略

通过 restartPolicy 字段定义:

  1. Always

    • 当容器退出时,总是重启容器(无论退出状态码如何)。
    • 默认策略:适用于 Deployment、StatefulSet、DaemonSet 等控制器管理的 Pod。
  2. OnFailure

    • 仅当容器异常退出时(退出状态码为非 0),重启容器。
    • 正常退出的容器(退出状态码为 0)不会重启。
  3. Never

    • 当容器退出时,总是不重启容器(无论退出状态码如何)。

注:deployment、statefulset、daemonset 控制器的Pod容器重启策略只能设置为 Always

示例

# pod3.yaml
apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 30; exit 3  # 命令让容器睡眠30秒后退出,退出状态码为3
  # 默认情况下,如果不指定restartPolicy,Pod的重启策略为Always(仅适用于单独的Pod定义,不适用于由控制器管理的Pod)
  # 但在这里我们稍后会显式设置restartPolicy为Never来演示其效果

# 应用YAML文件创建Pod
# kubectl apply -f pod3.yaml

# 查看Pod状态,初始时Pod应该是Running状态
# 等容器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值