从 Pod 核心原理到 Rancher 实战:K8s 容器管理全解析

目录

前言

[一、深入理解 K8s Pod 核心原理](#一、深入理解 K8s Pod 核心原理)

[1.1 Pod 的本质:K8s 最小部署单元](#1.1 Pod 的本质:K8s 最小部署单元)

[1.2 Pod 的 "基石":Pause 容器](#1.2 Pod 的 “基石”:Pause 容器)

[1.3 Pod 的容器类型:初始化与应用容器](#1.3 Pod 的容器类型:初始化与应用容器)

[(1)Init 容器(初始化容器)](#(1)Init 容器(初始化容器))

[(2)应用容器(Main Container)](#(2)应用容器(Main Container))

[1.4 Pod 关键配置:镜像拉取与重启策略](#1.4 Pod 关键配置:镜像拉取与重启策略)

(1)镜像拉取策略(imagePullPolicy)

(2)重启策略(restartPolicy)

[1.5 Pod 资源管控:requests 与 limits](#1.5 Pod 资源管控:requests 与 limits)

(1)核心作用

(2)资源单位

(3)配置示例

关键配置说明

[1.6 Pod 健康检查:三大探针保障可用性](#1.6 Pod 健康检查:三大探针保障可用性)

探针检查方式

预期输出特征

[1.7 Pod 生命周期钩子:扩展容器行为](#1.7 Pod 生命周期钩子:扩展容器行为)

[二、Rancher 实战:可视化管理 K8s 集群](#二、Rancher 实战:可视化管理 K8s 集群)

[2.1 Rancher 核心价值](#2.1 Rancher 核心价值)

[2.2 环境准备](#2.2 环境准备)

[2.3 Rancher 安装部署(Docker 方式)](#2.3 Rancher 安装部署(Docker 方式))

(1)拉取镜像

[(2)启动 Rancher 容器](#(2)启动 Rancher 容器)

(3)验证容器状态

示例输出解释

[2.4 登录 Rancher 平台](#2.4 登录 Rancher 平台)

[2.5 导入现有 K8s 集群到 Rancher](#2.5 导入现有 K8s 集群到 Rancher)

(1)创建集群配置

[(2)执行导入命令(k8s-master01 节点)](#(2)执行导入命令(k8s-master01 节点))

参数说明

(3)验证导入结果

[2.6 部署监控系统](#2.6 部署监控系统)

[2.7 可视化管理 K8s 集群](#2.7 可视化管理 K8s 集群)

(1)创建命名空间

[(2)部署 Nginx 应用](#(2)部署 Nginx 应用)

[(3)暴露 NodePort 服务](#(3)暴露 NodePort 服务)

(4)验证访问

三、总结


前言

Kubernetes(K8s)作为容器编排领域的事实标准,Pod 是其最小部署单元,理解 Pod 的核心原理是掌握 K8s 的基础;而 Rancher 作为企业级多集群 K8s 管理平台,能大幅降低 K8s 运维复杂度。本文将从 Pod 的核心原理入手,结合实操案例拆解关键配置,再通过 Rancher 实战讲解 K8s 集群的可视化管理,帮助读者打通 "原理 - 实操 - 管理" 的全链路。

一、深入理解 K8s Pod 核心原理

Pod 是 K8s 的核心调度单元,承载着容器的运行环境,所有 Workload 资源(Deployment、StatefulSet 等)均基于 Pod 扩展。

1.1 Pod 的本质:K8s 最小部署单元

Pod 是 K8s 中代表单个运行进程的最小部署单元,由一个或多个紧密耦合的容器组成,核心特征如下:

  • 包含一个 / 多个容器,容器间共享网络命名空间(同一 IP + 端口)和存储资源;
  • Pod 是 "短暂的",自身无自我恢复能力,节点故障时会被删除;
  • 两种使用方式:
    • 单容器 Pod:最常见,Pod 等价于容器的封装,K8s 直接管理 Pod 而非容器;
    • 多容器 Pod:适用于紧密耦合场景(如主应用 + sidecar 日志收集器),容器间可通过localhost通信。

1.2 Pod 的 "基石":Pause 容器

每个 Pod 内都内置了Pause 容器(基础容器),它是 Pod 的 "隐形核心":

  • 核心作用:提供 Pod 的 Linux 命名空间基础,让 Pod 内所有容器共享同一网络、存储命名空间;
  • 镜像示例:registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
  • 对用户透明:由 K8s 自动创建和管理,无需手动配置。

1.3 Pod 的容器类型:初始化与应用容器

Pod 内的容器分为两类,启动顺序和职责明确:

(1)Init 容器(初始化容器)

  • 启动规则:按配置顺序逐个启动,前一个成功退出后,下一个才启动;
  • 核心价值:
    • 执行初始化操作(如等待依赖服务启动、配置预处理);
    • 包含应用容器无需的工具(sed、awk 等),避免污染业务镜像;
    • 独立文件系统视图,可安全访问 Secrets;
  • 失败处理:若restartPolicy为 Never,Pod 会卡在 Pending 状态,需人工干预。

(2)应用容器(Main Container)

  • 启动规则:所有 Init 容器成功后,多个应用容器并行启动;
  • 核心职责:承载业务逻辑,是 Pod 的功能核心。

1.4 Pod 关键配置:镜像拉取与重启策略

(1)镜像拉取策略(imagePullPolicy)

策略 适用场景 核心逻辑
IfNotPresent 私有仓库 / 稳定环境(默认) 本地存在镜像则不拉取,缺失时才拉取
Always 持续交付 / 镜像频繁更新 每次启动都强制拉取最新镜像
Never 离线环境 / 镜像完全可控 仅使用本地镜像,永不执行拉取操作

实操示例:创建指定拉取策略的 Pod

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-test1
spec:
  containers:
  - name: nginx
    image: nginx:1.14
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    resources:
      limits:
        cpu: "500m"
        memory: "512Mi"
      requests:
        cpu: "250m"
        memory: "256Mi"
 

执行命令:

bash 复制代码
# 应用Pod配置文件
kubectl apply -f pod-test1.yaml

# 查看Pod列表及详细信息
kubectl get pods -o wide
 

(2)重启策略(restartPolicy)

  • Always(默认):无论退出状态,均重启容器(适合核心服务);
  • OnFailure:仅非正常退出(退出码≠0)时重启(适合批处理任务);
  • Never:容器退出后永不重启(适合一次性任务);
  • 注意:K8s 不支持直接重启 Pod,需删除重建。

1.5 Pod 资源管控:requests 与 limits

通过requestslimits配置 CPU / 内存资源,避免资源抢占或耗尽:

(1)核心作用

  • requests:调度依据,节点需预留足够资源才能调度 Pod;
  • limits:运行上限,超限时容器可能被限流或终止。

(2)资源单位

  • CPU:以 m(毫核)为单位,1 CPU = 1 vCPU500m = 0.5 CPU
  • 内存:推荐用二进制单位(Gi/Mi),避免 1GiB(1024Mi)与 1GB(1000³ 字节)的换算误差。

(3)配置示例

yaml 复制代码
containers:
- name: web
  image: nginx:1.14
  resources:
    requests:
      cpu: "250m"
      memory: "64Mi"
    limits:
      cpu: "500m"
      memory: "128Mi"
 

关键配置说明

  • CPU 单位250m 表示 250 毫核(即 0.25 个 CPU 核心),500m 表示 500 毫核(0.5 个核心)。
  • 内存单位Mi 表示 Mebibyte(二进制计算的兆字节),64Mi128Mi 分别对应约 64MB 和 128MB。
  • 资源隔离requests 确保容器调度时获得最小资源,limits 防止容器超额使用资源。

1.6 Pod 健康检查:三大探针保障可用性

K8s 通过探针(Probe)实现容器 "智能自愈",三种探针各司其职:

探针类型 核心作用 失败后果
livenessProbe 检测容器是否处于运行状态 终止容器进程并根据重启策略重新启动
readinessProbe 检测容器是否准备好接收请求 将该 Pod 的 IP 地址从关联 Service 的 Endpoints 列表中移除
startupProbe 检测应用是否完成启动(K8s 1.17+版本) 在探测成功前禁用其他探针功能,防止误判启动缓慢的应用
探针检查方式
  • exec:执行命令,返回码 0 则成功;
  • tcpSocket:检测 TCP 端口连通性;
  • httpGet:发送 HTTP GET 请求,状态码 200≤code<400 则成功。

实操示例:livenessProbe exec 方式

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: liveness-exec
spec:
  containers:
  - name: liveness-exec-container
    image: busybox
    command: ["/bin/sh","-c","touch /tmp/live ; sleep 30; rm -rf /tmp/live; sleep 3600"]
    livenessProbe:
      exec:
        command: ["test","-e","/tmp/live"]
      initialDelaySeconds: 1
      periodSeconds: 3
 

执行命令验证:

bash 复制代码
# 创建 Pod
kubectl create -f liveness-exec.yaml

# 查看 Pod 事件和状态变化
kubectl describe pods liveness-exec
 

预期输出特征

执行 describe 命令后,在事件日志中会看到类似记录:

vhdl 复制代码
Events:
  Type     Reason     Age   From               Message
  ----     ------     ----  ----               -------
  Normal   Scheduled  42s   default-scheduler  Successfully assigned default/liveness-exec to node-1
  Normal   Pulling    41s   kubelet            Pulling image "registry.k8s.io/busybox"
  Normal   Created    40s   kubelet            Created container liveness
  Normal   Started    40s   kubelet            Started container liveness
  Warning  Unhealthy  8s    kubelet            Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory
  Normal   Killing    8s    kubelet            Container liveness failed liveness probe, will be restarted
 

1.7 Pod 生命周期钩子:扩展容器行为

通过lifecycle配置钩子,自定义容器启动 / 终止行为:

  • postStart:容器启动后执行(如写入初始化日志);
  • preStop:容器终止前执行(如清理临时文件)。

配置示例

yaml 复制代码
spec:
  containers:
  - name: lifecycle-demo-container
    image: soscscs/myapp:v1
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo '启动完成' >> /var/log/nginx/message"]
      preStop:
        exec:
          command: ["/bin/sh", "-c", "echo '开始终止' >> /var/log/nginx/message"]
 

二、Rancher 实战:可视化管理 K8s 集群

Rancher 是开源企业级多集群 K8s 管理平台,封装 K8s API 提供可视化界面,支持混合云 / 本地数据中心的 K8s 集群集中管控。

2.1 Rancher 核心价值

  • 多集群统一管理:支持跨公有云、私有云的 K8s 集群管控;
  • 降低运维门槛:可视化界面替代复杂的 kubectl 命令,适配非专业 K8s 运维人员;
  • 丰富的扩展能力:内置监控、日志、应用商店等功能。

2.2 环境准备

主机名 IP地址 用途
k8s-master01 192.168.10.13 Kubernetes 控制节点
k8s-node01 192.168.10.14 Kubernetes 工作节点
k8s-node02 192.168.10.15 Kubernetes 工作节点
rancher 192.168.10.16 Rancher 管理节点

2.3 Rancher 安装部署(Docker 方式)

(1)拉取镜像

bash 复制代码
# 在 Rancher 节点上拉取主镜像
docker pull rancher/rancher:v2.5.7

# 在 k8s-master01 节点上拉取 Agent 镜像
docker pull rancher/rancher-agent:v2.5.7
 

(2)启动 Rancher 容器

bash 复制代码
docker run -d \
  --restart=unless-stopped \
  -p 80:80 \
  -p 443:443 \
  --privileged \
  --name rancher \
  rancher/rancher:v2.5.7
 

参数说明:

  • -d:后台运行;
  • --restart=unless-stopped:容器退出自动重启(Docker 启动时已停止的除外);
  • -p 80:80 -p 443:443:端口映射;
  • --privileged:授予容器扩展权限。

(3)验证容器状态

bash 复制代码
docker ps -a | grep rancher
 

示例输出解释

当运行上述命令后,可能会看到类似下面的输出:

apache 复制代码
1326da432b17   rancher/rancher:v2.5.7   "entrypoint.sh"   13秒前   Up 13秒   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   rancher
 

2.4 登录 Rancher 平台

  1. 访问地址:浏览器打开http://192.168.10.16(忽略自签名证书的安全警告);
  2. 切换语言:登录后点击右下角语言选项,选择中文,提升操作便捷性。

2.5 导入现有 K8s 集群到 Rancher

(1)创建集群配置

Rancher 界面操作:【集群】→【全局】→【添加集群】→【导入】,命名为k8s-cluster,点击【创建】。

(2)执行导入命令(k8s-master01 节点)

复制 Rancher 生成的 "绕过证书检查" 的导入命令,执行:

bash 复制代码
curl --insecure -sfL https://192.168.10.16/v3/import/xxx.yaml | kubectl apply -f -
 

参数说明

--insecure:跳过SSL证书验证,适用于测试环境或自签名证书场景

-s:静默模式,不显示进度或错误信息

-f:请求失败时静默退出(HTTP错误码>=400)

-L:遵循重定向

(3)验证导入结果

bash 复制代码
# 列出所有命名空间,确认cattle-system和fleet-system存在  
kubectl get ns  

# 检查cattle-system命名空间下的Pod状态及调度详情  
kubectl get pods -n cattle-system -o wide  
 

2.6 部署监控系统

Rancher 界面点击【启用监控以查看实时监控】,选择监控组件版本 0.2.1,等待约 10 分钟完成初始化,即可查看集群实时监控数据。

2.7 可视化管理 K8s 集群

(1)创建命名空间

仪表盘→Namespaces→Create,输入名称dev,创建隔离的应用部署空间。

(2)部署 Nginx 应用

Deployments→Create,配置如下:

  • 命名空间:dev;
  • 名称:nginx-dev;
  • 副本数:3;
  • 容器镜像:nginx:1.14(拉取策略:IfNotPresent);
  • 标签:app=nginx。

(3)暴露 NodePort 服务

Services→Create→NodePort,配置如下:

  • 命名空间:dev;
  • 名称:nginx-dev;
  • 端口:80(容器)→30180(节点,需在 30000-32767 范围内);
  • 选择器:app=nginx。

(4)验证访问

点击 Service 的30180/TCP链接,直接访问 Nginx 服务页面,确认部署成功。

三、总结

本文从 Pod 的核心原理出发,拆解了 Pause 容器、Init 容器、资源限制、健康检查等关键知识点,并结合实操案例加深理解;同时通过 Rancher 实战,完成了从安装部署到集群导入、应用可视化管理的全流程。

相关推荐
lichenyang4532 天前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang4532 天前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang4532 天前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
运维开发故事5 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson6 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生7 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭7 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美8 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵9 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程