自学内容网 自学内容网

Rancher 管理 Kubernetes 集群与Pod的详解

前言

在容器化技术飞速发展的今天,Kubernetes(简称k8s)已成为容器编排的事实标准。但对于不少开发者和运维人员来说,k8s复杂的概念和操作门槛让人望而却步。而Rancher的出现,彻底解决了这一痛点——它作为开源的企业级多集群Kubernetes管理平台,能实现混合云+本地数据中心下k8s集群的集中部署与管理,既保障了集群安全性,又能加速企业数字化转型。目前全球已有超过40000家企业每天通过Rancher快速创新,足以见得它的实用性和可靠性。

本文将带你从零开始,一步步完成Rancher的安装配置、k8s集群导入、监控系统部署,以及通过Rancher仪表盘创建Nginx服务,让你无需深入钻研k8s细节,也能轻松玩转容器管理。

一、Rancher和K8s的核心区别

很多人会混淆Rancher和k8s,其实两者定位完全不同:

  • 相同点:两者都可用于容器的调度与编排;
  • 核心区别:Rancher的能力更全面——它不仅能管理应用容器,更关键的是能管理k8s集群。Rancher2.x底层基于k8s调度引擎,通过封装简化了复杂操作,让不熟悉k8s概念的用户也能轻松将容器部署到k8s集群中。

简单说,k8s是“容器编排引擎”,而Rancher是“k8s集群的管理平台”,是更高维度的工具。

二、实验环境准备

在开始操作前,需准备以下节点(本文使用的IP地址可根据实际环境替换):

  • 控制节点(master01):192.168.10.19
  • 工作节点(node01):192.168.10.20
  • 工作节点(node02):192.168.10.21
  • Rancher节点(rancher):192.168.10.23

所有节点需提前安装Docker和kubectl工具(确保k8s集群已正常部署)。

三、Rancher安装与登录

1. 下载并启动Rancher镜像

首先在对应节点执行镜像下载和容器启动命令:

  • 步骤1:在master01节点下载rancher-agent镜像
docker pull rancher/rancher-agent:v2.5.7
  • 步骤2:在rancher节点下载rancher镜像并启动容器
# 下载镜像
docker pull rancher/rancher:v2.5.7
# 启动容器(映射80/443端口,设置自动重启)
docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged --name rancher rancher/rancher:v2.5.7

参数说明:--restart=unless-stopped 表示容器退出时自动重启(Docker守护进程启动时已停止的容器除外),--privileged 赋予容器特权模式,确保正常运行。

  • 步骤3:验证容器是否启动成功
docker ps -a|grep rancher

若输出类似以下内容,说明Rancher容器启动成功:

1326da432b17   rancher/rancher:v2.5.7   "entrypoint.sh"   13 seconds ago   Up 13 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   rancher

2. 登录Rancher平台

  • 步骤1:等待容器初始化完成(约1-2分钟),打开浏览器访问 Rancher节点IP:http://192.168.10.23
  • 步骤2:由于未使用授信证书,浏览器会提示安全报警,直接忽略并继续访问;
  • 步骤3:首次登录后,若页面为英文,可点击右下角语言选项切换为中文,操作更便捷。

四、导入已存在的K8s集群

Rancher支持管理已部署的k8s集群,导入步骤如下:

  1. 登录Rancher后,点击【添加集群】,选择【导入】;
  2. 【集群名称】设置为 k8s-cluster(可自定义),点击【创建】;
  3. 页面会生成3条导入命令,选择第三条“绕过证书检查”的命令(避免证书验证问题),复制该命令;
  4. 在k8s控制节点(master01)执行复制的命令(若第一次执行报错,重新执行一次即可):
curl --insecure -sfL https://192.168.10.23/v3/import/ltlhl7vggnwz8knbjncgbxqlrf6krpbfbxtzh4qlpnqxrq5559k6gf_c-jf5bx.yaml | kubectl apply -f -
  1. 验证导入结果:
  • 查看命名空间,确认cattle-system、fleet-system已创建并处于Active状态:
kubectl get ns

输出示例:

NAME              STATUS   AGE
cattle-system     Active   3m24s
default           Active   27d
fleet-system      Active   2m14s
kube-node-lease   Active   27d
kube-public       Active   27d
kube-system       Active   27d
  • 查看cattle-system命名空间下的Pod,确认状态为Running:
kubectl get pods -n cattle-system -o wide
  • 查看fleet-system命名空间下的Pod,确认状态为Running:
kubectl get pods -n fleet-system -o wide

当两个命名空间下的Agent Pod都正常运行时,说明k8s集群已成功导入Rancher。

五、部署Rancher监控系统

为了实时监控k8s集群的运行状态,需启用Rancher自带的监控功能:

  1. 在Rancher集群页面,点击【启用监控以查看实时监控】;
  2. 【监控组件版本】选择 0.2.1(其他保持默认);
  3. 点击【启用监控】,耐心等待约10分钟(监控组件部署需要一定时间);
  4. 部署完成后,即可在Rancher页面查看集群的CPU、内存、网络等实时监控数据。

六、通过Rancher仪表盘管理K8s集群(以创建Nginx服务为例)

导入集群并启用监控后,就可以通过Rancher的可视化仪表盘管理k8s资源了。下面以创建Nginx服务为例,演示完整流程:

1. 创建命名空间(Namespace)

命名空间用于隔离不同环境的资源(如开发、测试、生产):

  1. 点击【仪表盘】进入k8s集群仪表盘界面;
  2. 左侧菜单选择【Namespaces】,点击右侧【Create】;
  3. 【Name】输入 dev(自定义命名空间名称),【Description】可选填描述;
  4. 点击右下角【Create】,完成命名空间创建。

2. 创建Deployment资源

Deployment用于定义Pod的部署规则(如副本数、镜像版本等):

  1. 左侧菜单选择【Deployments】,点击右侧【Create】;
  2. 基础配置:【Namespace】下拉选择 dev,【Name】输入 nginx-dev,【Replicas】输入 3(创建3个Pod副本);
  3. 容器配置:点击【Container】,【Container Image】输入 nginx:1.14(指定Nginx镜像版本),【Pull Policy】选择 IfNotPresent(优先使用本地镜像,本地没有再拉取);
  4. 标签配置:
    • 在【Pod Labels】下点击【Add Label】,【Key】输入 app,【Value】输入 nginx(给Pod打标签,用于后续关联Service);
    • 在【Labels and Annotations】下点击【Add Label】,【Key】输入 app,【Value】输入 nginx(给Deployment打标签);
  5. 点击右下角【Create】,完成Deployment创建。

3. 创建Service资源

Service用于暴露Pod的网络访问(这里使用NodePort类型,通过节点IP+端口访问Nginx):

  1. 左侧菜单选择【Services】,点击右侧【Create】;
  2. 选择【Node Port】类型(适合测试环境暴露服务);
  3. 基础配置:【Namespace】下拉选择 dev,【Name】输入 nginx-dev;
  4. 端口配置:【Port Name】输入 nginx,【Listening Port】输入 80(Service监听端口),【Target Port】输入 80(Pod的目标端口,与Nginx默认端口一致),【Node Port】输入 30180(节点端口,范围需在30000-32767之间);
  5. 关联Pod:点击【Selectors】,【Key】输入 app,【Value】输入 nginx(与Deployment的Pod标签一致,实现Service与Pod的关联);
  6. 点击右下角【Create】,完成Service创建。

4. 访问Nginx服务

  1. 点击创建好的【nginx-dev】Service,查看是否已成功关联3个Pod;
  2. 打开浏览器,访问任意工作节点IP+NodePort:http://192.168.10.20:30180 (或 http://192.168.10.21:30180);
  3. 若能看到Nginx默认欢迎页面,说明服务创建成功。
    你想系统地了解 Kubernetes 中 Pod 的核心知识,包括它的概念、容器类型、存在意义、实现机制,以及镜像拉取和容器相关策略,我会从基础到核心机制,逐一为你清晰讲解。

七、 Pod 的详解

基本概念

Pod 是 Kubernetes 中最小的部署和调度单元,不是容器,而是一个“容器组”。你可以把 Pod 理解成一个“逻辑主机”,里面可以封装一个或多个紧密关联的容器,这些容器共享网络命名空间(同一 IP、端口空间)、存储卷(Volume)等资源,在同一台宿主机上运行。

1.Pod 中的几种容器类型
容器类型作用使用场景
主容器(Main Container)执行 Pod 的核心业务逻辑,是 Pod 存在的核心目的运行 Web 服务(如 Nginx)、应用程序(如 Java 服务)等核心业务
初始化容器(Init Container)在主容器启动前执行,完成初始化工作(如配置加载、依赖检查、数据准备)启动前等待数据库就绪、下载配置文件、初始化目录权限等
边车容器(Sidecar Container)与主容器并行运行,为核心业务提供辅助功能(非核心但必需)日志收集(如 Fluentd)、监控采集(如 Prometheus Agent)、网络代理(如 Envoy)
临时容器(Ephemeral Container)临时创建的调试容器,用于排查 Pod 故障(K8s 1.16+ 支持)进入运行中的 Pod 查看日志、调试网络、检查文件系统等

示例:包含主容器 + 边车容器的 Pod 配置

apiVersion: v1
kind: Pod
metadata:
  name: nginx-sidecar
spec:
  containers:
  # 主容器:运行 Nginx
  - name: nginx-main
    image: nginx:alpine
    ports:
    - containerPort: 80
  # 边车容器:收集 Nginx 日志
  - name: log-collector
    image: fluentd:alpine
    volumeMounts:
    - name: nginx-log
      mountPath: /var/log/nginx
  volumes:
  - name: nginx-log
    emptyDir: {}

2. Pod 存在的意义

Pod 设计的核心是解决“紧耦合容器的协同部署和资源共享”问题,具体意义如下:

  1. 资源共享:Pod 内所有容器共享网络(同一 IP,无需跨容器端口映射)、存储卷(Volume)、主机名,降低容器间通信和数据共享的复杂度。
  2. 原子调度:K8s 只会将整个 Pod 调度到同一台宿主机,保证紧密关联的容器始终在一起运行,避免“主容器在节点 A,边车容器在节点 B”的问题。
  3. 生命周期统一:Pod 是最小的管理单元,K8s 对 Pod 进行整体的创建、销毁、重启、扩缩容,而非单独管理容器。
  4. 简化部署:将“核心业务 + 辅助功能”封装为一个 Pod,对外呈现为一个独立的服务单元,简化部署和运维逻辑。

3. Pod 实现的机制

Pod 不是直接运行容器,而是通过 Pause 容器(基础设施容器) 实现核心机制,核心逻辑如下:

  1. Pause 容器作为 Pod 的“骨架”
    • 创建 Pod 时,K8s 首先启动一个 Pause 容器(镜像为 k8s.gcr.io/pause),它占用极少资源(CPU/内存),主要作用是“占坑”。
    • Pause 容器会创建并持有 Pod 的网络命名空间(Network Namespace)、UTS 命名空间(主机名)、IPC 命名空间(进程间通信)。
  2. 业务容器共享 Pause 容器的命名空间
    • 后续启动的主容器、边车容器等,都会加入 Pause 容器的命名空间,因此所有容器共享同一 IP、主机名、IPC 通信通道。
    • 即使 Pod 内的业务容器重启,Pause 容器依然运行,Pod 的网络标识、存储卷等资源不会丢失,保证 Pod 身份不变。
  3. Pod 的生命周期由 Pause 容器锚定
    • K8s 通过监控 Pause 容器的状态判断 Pod 是否“存活”,只要 Pause 容器运行,Pod 就被认为是“存在”的;只有 Pause 容器终止,整个 Pod 才会被销毁。

4. 镜像拉取策略(Image Pull Policy)

镜像拉取策略决定 K8s 在创建容器时何时从镜像仓库拉取镜像,核心配置为 imagePullPolicy,有 3 种取值:

策略值触发拉取的条件适用场景
Always每次创建/重启容器时,都从镜像仓库拉取最新镜像开发环境(需要实时更新镜像)
Never从不拉取镜像,仅使用节点本地已存在的镜像;若本地无镜像,创建容器失败离线环境(无外网访问)
IfNotPresent仅当节点本地没有该镜像,或镜像标签不是 :latest 时,才从仓库拉取(默认策略)生产环境(减少网络开销)

注意

  • 若镜像标签为 :latest,默认拉取策略为 Always
  • 若镜像标签为固定版本(如 nginx:1.25),默认拉取策略为 IfNotPresent

示例:配置镜像拉取策略

apiVersion: v1
kind: Pod
metadata:
  name: pull-policy-demo
spec:
  containers:
  - name: nginx
    image: nginx:1.25  # 固定标签,默认 IfNotPresent
    imagePullPolicy: IfNotPresent  # 显式指定策略
  - name: busybox
    image: busybox:latest  # latest 标签,默认 Always
    imagePullPolicy: Always

5. 容器重启策略(Restart Policy,你提到的“镜像容器策略”核心是重启策略)

Pod 的重启策略决定 K8s 在容器异常退出时如何重启容器,配置为 restartPolicy,作用于 Pod 内所有容器,有 3 种取值:

策略值重启规则适用场景
Always只要容器终止(无论退出码是 0 还是非 0),就自动重启(默认策略)长期运行的服务(如 Web 服务)
OnFailure仅当容器异常退出(退出码非 0)时重启;正常退出(退出码 0)不重启一次性任务(如数据备份)
Never容器终止后永不重启测试/调试场景

注意

  • 重启策略是 Pod 级别的,无法为单个容器单独配置;
  • 重启操作是在原宿主机上重启容器,而非重新调度 Pod 到其他节点;
  • 若容器反复重启失败,K8s 会触发“退避策略”(back-off),重启间隔逐渐变长(10s → 20s → 40s…),避免频繁重启消耗资源。

示例:配置重启策略

apiVersion: v1
kind: Pod
metadata:
  name: restart-policy-demo
spec:
  restartPolicy: OnFailure  # 仅异常退出时重启
  containers:
  - name: backup-job
    image: busybox
    command: ["sh", "-c", "echo '备份数据' && exit 1"]  # 模拟异常退出

小结

  1. 核心概念:Pod 是 K8s 最小调度单元,包含主容器、初始化容器、边车容器等,通过 Pause 容器实现资源共享和生命周期锚定;
  2. 存在意义:解决紧耦合容器的协同部署、原子调度、资源共享问题,简化服务管理;
  3. 关键策略:镜像拉取策略(Always/IfNotPresent/Never)控制镜像获取方式,重启策略(Always/OnFailure/Never)决定容器异常时的重启规则。
总结

通过Rancher,我们无需深入学习k8s的复杂命令和概念,就能通过可视化界面完成集群管理、资源部署、服务暴露等操作,极大降低了k8s的使用门槛。本文演示的只是Rancher的基础功能,它还支持多集群管理、权限控制、持续集成/持续部署(CI/CD)等高级特性,足以满足企业级容器管理的需求。

如果你正在为k8s的复杂操作发愁,不妨试试Rancher,让容器管理变得简单高效!如果在实践过程中有任何问题,可参考Rancher官方文档(https://docs.rancher.cn/)获取更多支持。


原文地址:https://blog.csdn.net/2501_93990905/article/details/156732667

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!