目录
[一、深入理解 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.5 Pod 资源管控:requests 与 limits](#1.5 Pod 资源管控:requests 与 limits)
[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 方式))
[(2)启动 Rancher 容器](#(2)启动 Rancher 容器)
[2.4 登录 Rancher 平台](#2.4 登录 Rancher 平台)
[2.5 导入现有 K8s 集群到 Rancher](#2.5 导入现有 K8s 集群到 Rancher)
[(2)执行导入命令(k8s-master01 节点)](#(2)执行导入命令(k8s-master01 节点))
[2.6 部署监控系统](#2.6 部署监控系统)
[2.7 可视化管理 K8s 集群](#2.7 可视化管理 K8s 集群)
[(2)部署 Nginx 应用](#(2)部署 Nginx 应用)
[(3)暴露 NodePort 服务](#(3)暴露 NodePort 服务)
前言
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
通过requests和limits配置 CPU / 内存资源,避免资源抢占或耗尽:
(1)核心作用
requests:调度依据,节点需预留足够资源才能调度 Pod;limits:运行上限,超限时容器可能被限流或终止。
(2)资源单位
- CPU:以 m(毫核)为单位,
1 CPU = 1 vCPU,500m = 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(二进制计算的兆字节),64Mi和128Mi分别对应约 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 平台
- 访问地址:浏览器打开
http://192.168.10.16(忽略自签名证书的安全警告); - 切换语言:登录后点击右下角语言选项,选择中文,提升操作便捷性。
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 实战,完成了从安装部署到集群导入、应用可视化管理的全流程。