从 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 实战,完成了从安装部署到集群导入、应用可视化管理的全流程。

相关推荐
伞啊伞17 小时前
k8s(四) Rancher 管理集群
容器·kubernetes·rancher
忍冬行者17 小时前
k8s的etcd的一键备份和故障恢复
docker·云原生·容器·kubernetes·云计算
QWsin17 小时前
【k8s】为什么statefulSet初始化pod需要service name
云原生·容器·kubernetes
lin张17 小时前
k8s(三)pod详解(精简版)
云原生·容器·kubernetes
youxiao_9018 小时前
kubernetes 插件、操作管理(二)
云原生·容器·kubernetes
huaweichenai1 天前
docker部署kkFileView实现文件预览功能
运维·docker·容器
叫致寒吧1 天前
k8s部署
云原生·容器·kubernetes
叫致寒吧1 天前
k8s操作(三)
网络·容器·kubernetes
oMcLin1 天前
如何在 Red Hat Linux 8 上实现 Kubernetes 自定义资源管理器(CRD)扩展,支持微服务架构
linux·架构·kubernetes