Kubernetes(五)——rancher部署和Pod详解

文章目录


前言

本文围绕 Rancher 部署管理及 K8s Pod 核心知识展开,从概念原理到实操步骤,系统讲解集群运维与容器应用关键要点。


一、rancher概念

Rancher是Kubernetes 多集群管理平台(可视化界面),核心作用是降低 K8s 集群的部署、运维和管理门槛。官网:https://docs.rancher.cn/

作用:

● 集群全生命周期管理

● 多集群统一管控

● 简化应用部署与运维

● 强化安全与权限控制

● 降低学习和使用成本

Rancher 和 k8s 的区别:

Rancher 和 k8s 都是用来作为容器的调度与编排系统。但是 rancher 不仅能够管理应用容器,更重要的一点是能够管理 k8s 集群。 Rancher2.x 底层基于 k8s 调度引擎,通过 Rancher 的封装,用户可以在不熟悉 k8s 概念的情况下轻松的通过 Rancher 来部署容器到k8s集群当中。

二、rancher工作原理

rancher分为:rancher server 和 rancher agent

1)Agent 核心作用 :Rancher Agent 是运行在被管理 K8s 集群所有节(Master+Node)上的组件, 负责采集节点状态、接收 Rancher Server 指令、调用 K8s 原生接口执行操作。

2)监控闭环逻辑:Agent 定时采集节点的 CPU / 内存使用率、Pod 启停状态、容器日志等数据,上报至 Server;Server 对异常状态(如节点离线、Pod 崩溃)触发告警或自动修复。

3) 多集群管理核心:Rancher Server 不直接干预 K8s 集群内部调度,而是通过 Agent 作为 "中间人",实现对多个集群的统一监控和操作转发。

三、rancher部署

1、环境规划

控制节点/master01 192.168.10.111 k8s+rancher agent

工作节点/node01 192.168.10.112 k8s+rancher agent

工作节点/node02 192.168.10.113 k8s+rancher agent

Rancher节点/rancher 192.168.10.114 rancher(rancher server)

2、前置条件

1)防火墙和增强服务关闭

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

2)k8s集群已经部署

3)docker已经部署

3、rancher部署流程

复制代码
# 1、安装rancher
# 在 master01 节点和node01、node02节点,下载 rancher-agent 镜像
docker pull rancher/rancher-agent:v2.5.7
#在 rancher 节点下载 rancher 镜像
docker pull rancher/rancher:v2.5.7

# 2、启动racher服务
#--restart=unless-stopped 表示在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged --name rancher rancher/rancher:v2.5.7
# 可以查找到rancher容器运行
docker ps -a|grep rancher 

# 3、配置
步骤1:登录 Rancher 平台,登录后如是英文页面,可点击右下角语言选项选择中文
步骤2:选择【添加集群】,点击【导入】
步骤3:【集群名称】设置为 k8s-cluster,点击【创建】
步骤4:选择复制第三条命令绕过证书检查导入 k8s 集群

# 4、设置授权,允许rancher管理k8s
#在 k8s 控制节点 master01 上执行刚才复制的命令,如第一次执行报错,再执行一次即可
curl --insecure -sfL https://192.168.10.23/v3/import/ltlhl7vggnwz8knbjncgbxqlrf6krpbfbxtzh4qlpnqxrq5559k6gf_c-jf5bx.yaml | kubectl apply -f -

# 5、查看集群
kubectl get ns

查看命名空间:

注意:(fleet-system命名空间被整合到了cattle-system)

查看cattle-system的Pod信息

kubectl get pods -n cattle-system -o wide

查看rancher平台:

四、rancher操作

1、启用监控

1)点击【启用监控以查看实时监控】

2)【监控组件版本】选择 0.2.1,其他的默认即可

3)点击【启用监控】,启动监控时间可能比较长,需要等待10分钟左右

2、使用 Rancher 仪表盘管理 k8s 集群

1)以创建 nginx 服务为例

2)点击【仪表盘】进入 k8s 集群仪表盘界面

3、创建命名空间(namespace)

1)点击左侧菜单【Namespaces】,再点击右侧【Create】

2)【Name】输入 dev,【Description】选填可自定义

3)点击右下角【Create】

4、创建 Deployment 资源

1)点击左侧菜单【Deployments】,再点击右侧【Create】

2)【Namespace】下拉选择 dev,【Name】输入 nginx-dev,【Replicas】输入 3

3)点击中间选项【Container】,【Container Image】输入 nginx:1.14,【Pull Policy】选择 IfNotPresent

4)在【Pod Labels】下点击【Add Lable】,【Key】输入 app,【Value】输入 nginx

5)点击中间选项【Labels and Annotations】,点击【Add Label】,【Key】输入 app,【Value】输入 nginx

6)最后,点击右下角【Create】

5、创建serviece

1)点击左侧菜单【Services】,再点击右侧【Create】

2)点击【Node Port】

3)【Namespace】下拉选择 dev,【Name】输入 nginx-dev

4)【Port Name】输入 nginx,【Listening Port】输入 80,【Target Port】输入 80,5)5)【Node Port】输入 30180

6)点击中间选项【Selectors】,【Key】输入 app,【Value】输入 nginx

7)点击右下角【Create】

8)点击【nginx-dev】查看 service 是否已关联上 Pod


6、浏览器访问验证

http://192.168.10.112:31023/

五、Pod基础概念

Pod 是 Kubernetes 中的最小部署单元,它代表集群中的一个运行进程。一个 Pod 可以包含一个或多个紧密耦合的容器,这些容器共享网络和存储资源。在 Kubernetes 中,Pod 是管理容器的基础结构,其他如 Deployment、StatefulSet、DaemonSet 等控制器对象都围绕 Pod 进行扩展。

总结:

1、最小部署的单元

2、包含一个或者多个容器(一组容器的集合)

3、一个pod中的容器共享网络命名空间和存储资源

六、k8s集群中两种pod使用方式

1、单容器pod

最常见的用法,一个 Pod 只包含一个容器。这种情况下,Pod 就相当于容器的封装,Kubernetes管理的是 Pod,而不是容器。

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: single-container-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.14

2、多容器pod

一个 Pod 可以包含多个容器,这些容器通常有共同的资源需求,如共享网络和存储,彼此间可以通过 localhost 进行通信。

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: multi-container-pod
spec:
  containers:
  - name: app
    image: my-app:latest mysql
  - name: sidecar
    image: log-collector:latestfilbeat

七、pause容器和共享资源

1、pause容器介绍

在每个 Pod 中,都会有一个特殊的容器被称为 Pause 容器,它的主要职责是提供 Pod 的 Linux 命名空间基础。它使得 Pod 内的所有容器共享网络和存储资源。Pause 容器运行时,它会创建一个 Linux 命名空间,其他容器将共享该命名空间来进行网络通信和存储操作。

docker ps # 可以看到正常运行的pause容器

2、Pod的共享资源

1)网络共享:

每个 Pod 分配一个唯一的 IP 地址,Pod 内的所有容器共享该 IP 和端口。它们能够通过

localhost 进行通信。Pod中的容器与外界通信时,必须分配共享网络资源(例如使用宿主机的端口映射)

① 每个pod 分配一个独特IP地址

② pod 内部所有容器共享这个IP和端口 ,能通过 localhost直接通信

③ 与外界 通信时, 必须使用宿主机的端口映射

2)存储共享:

Pod 可以指定多个共享的 Volume,这些 Volume 可以被 Pod 内的所有容器访问,确保容器重启后数据不会丢失。

① Pod可以指定多个共享的Volume,所有容器都可以访问

② Volume可以用来持久化存储 ,确保容器重启后数据不会丢失

3、小结

每个Pod都有一个特殊的被称为"基础容器"的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或者多个紧密相关的用户应用容器。

Pod 包含一个特殊的"基础容器"的Pause容器 ,它负责 pod网络 和存储资源,除了pauser容器 pod还包含多个应用容器,他们可以共同工作

八、Pod使用场景和类型

1、Pod使用场景

单一进程应用:最常见的用法,一个 Pod 用于运行一个容器。

多进程协作:多个容器在同一个 Pod 内共享网络和存储资源,适用于紧密耦合的服务。

2、Pod类型

自主式 Pod:

这种 Pod 不具备自我修复的能力。如果它所在的节点故障,Pod 会被删除,且不会自动恢复。

控制器管理的 Pod:

Kubernetes 中通常通过控制器(如 Deployment、StatefulSet)来管理 Pod。控制器提供副本管理、滚动升级、自动修复等功能。

九、Pod容器分类

1、基础容器

每次创建 Pod 时候就会创建,运行的每一个Pod都有一个 pause-amd64 的基础容器自动会运行,对于用户是透明的。

复制代码
docker ps | grep pause

2、初始化容器

2.1、Init容器启动过程

Init容器必须在应用程序容器启动之前运行完成,而应用程序容器是并行运行的,所以Init容器能够提供了一种简单的阻塞或延迟应用容器的启动的方法。

Init 容器与普通的容器非常像,除了以下两点:

  • Init 容器总是运行到成功完成为止
    启动 --》运行 --》 结束 --》 退出 成功 再运行下一个init
  • 每个 Init 容器都必须在下一个 Init 容器启动之前成功完成启动和退出。
    如果 Pod 的 Init 容器失败,k8s 会不断地重启该 Pod,直到 Init 容器成功为止。然而,如 果 Pod对应的重启策略(restartPolicy)为 Never,它不会重新启动。

2.2、Init 的容器作用

因为init容器具有与应用容器分离的单独镜像,其启动相关代码具有如下优势:

1、Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。例如,没有必要仅为了在安装过程中使用类似 sed、 awk、 python 或 dig 这样的工具而去FROM 一个镜像来生成一个新的镜像。 独立使用的工具

2、Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。

3、应用镜像的创建者和部署者可以各自独立工作,而没有必要联合构建一个单独的应用镜像。

4、Init 容器能以不同于Pod内应用容器的文件系统视图运行。因此,Init容器可具有访问 Secrets 的权限,而应用容器不能够访问。

5、由于 Init 容器必须在应用容器启动之前运行完成,因此 Init 容器提供了一种机制来阻塞或延迟应用容器的启动,直到满足了一组先决条件。一旦前置条件满足,Pod内的所有的应用容器会并行启动。

2.3、init初始化特性

  • 启动规则:Pod 网络 / 数据卷初始化后,Init 容器按序启动,需前一个成功退出,下一个才启动。
  • 失败重试:启动失败 / 异常退出时,按 Pod 的restartPolicy(含 Always 策略)重试。
  • Pod 状态影响:所有 Init 容器成功前,Pod 无 Ready 状态、Init 容器端口不纳入 Service,Pod 处于 Pending 且 Initializing=true;Pod 重启则所有 Init 容器需重新执行。
  • 配置限制:仅 Init 容器的image字段可修改(修改等效重启 Pod),无readinessProbe配置;Pod 内 Init 容器与应用容器名称需唯一,否则验证报错。

十、应用容器

官网init容器启动示例:

https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/init-containers/

init容器启动示例:

这个例子是定义了一个具有 2 个 Init 容器的简单 Pod。 第一个等待 myservice 启动, 第二个等待 mydb 启动。 一旦这两个 Init容器都启动完成,Pod 将启动 spec 中的应用容器。

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

1)运行yaml文件,创建Pod

通过kubectl apply -f test01.yaml 可以看到卡在了Init这里。

2)排错方法

复制代码
#1 查看pod具体描述信息,查看events(事件)
kubectl describe pod myapp-pod
#2 查看pod日志
kubectl logs myapp-pod
#3 查看Pod中容器的日志
# kubectl logs pod名称 -c 容器名称
kubectl logs myapp-pod -c init-myservice
  1. 解决方法

    vim test02.yaml

    apiVersion: v1
    kind: Service
    metadata:
    labels:
    app: nginx
    name: myservice
    spec:
    ports:

    • port: 80
      targetPort: 80
      selector:
      app: nginx

加载配置文件, 解决myservice 服务解析问题

kubectl apply -f test02.yaml

验证结果如下:发现init已经完成了1个

加载配置文件, 解决myservice 服务解析问题

kubectl apply -f test02.yaml

验证结果如下:发现init已经完成了1个

  1. 同理完成mydb服务的创建,验证pod是否运行

扩展命令:

复制代码
# 在线编辑service
kubectl edit svc service

十一、配置的核心部分

1、 Pod 的镜像拉取策略

Pod 中的容器需要通过指定镜像来启动,镜像拉取策略有以下几种:

● IfNotPresent (默认):如果本地已有镜像,不会拉取新的镜像,仅在本地缺失时拉取。

● Always :每次启动 Pod 时都会拉取镜像。

● Never :不拉取镜像,仅使用本地镜像。

示例:

复制代码
vim pod1.yaml
----------------------------------
apiVersion: v1
kind: Pod
metadata:
  name: pod-test1
spec:
  containers:
    - name: nginx
    image: nginx
    command: [ "echo", "SUCCESS" ]

kubectl apply -f pod1.yaml

2、Pod 的重启策略

Pod 的重启策略定义了容器退出后 Kubernetes 如何处理容器的重启。主要有以下三种策略:

● Always :无论容器的退出状态如何,都会重新启动。

● OnFailure :只有容器非正常退出(即退出码非 0)时,才会重启容器。

● Never :容器退出后不会重启。

restartPolicy: Always

注意:K8S 中不支持重启 Pod 资源,只有删除重建

更改方法:使用在线编辑

复制代码
kubectl edit deployment nginx-deployment
......
restartPolicy: Always

总结

本文全面梳理 Rancher 部署、操作流程及 K8s Pod 核心特性,涵盖容器分类、资源共享与策略配置,为集群运维提供完整理论与实践指引。

相关推荐
郝学胜-神的一滴10 小时前
Linux 读写锁深度解析:原理、应用与性能优化
linux·服务器·c++·程序人生·性能优化
oMcLin10 小时前
如何在Rocky Linux 8.5上部署并优化Jenkins流水线,支持跨平台CI/CD自动化与容器化构建?
linux·ci/cd·jenkins
大都督老师10 小时前
配置 containerd 使用镜像加速器拉取 Docker Hub 镜像
容器·kubernetes·k8s
HalvmånEver13 小时前
Linux:命名管道实现IPC(进程间通信七)
linux·运维·服务器·ipc·命名管道·管道pipe
正在学习前端的---小方同学19 小时前
Harbor部署教程
linux·运维
Sean X20 小时前
Ubuntu24.04安装向日葵
linux·ubuntu
木童66221 小时前
Kubernetes 操作管理完全指南:从陈述式到声明式,覆盖全生命周期
云原生·容器·kubernetes
IT 乔峰21 小时前
脚本部署MHA集群
linux·shell
dz小伟21 小时前
execve() 系统调用深度解析:从用户空间到内核的完整加载过程
linux