Administrator
发布于 2026-08-13 / 2 阅读
0
0

第四章.k8s资源清单-资源清单的编写2

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=0e85828f19fba96334ebaebea2da3e2f&p=15

一、Kubernetes 资源查询与层级概念

1.1 Pod 基础查询操作

  • 基础查询命令:kubectl get pod,用于获取Pod资源,默认查询当前默认命名空间(default)下的Pod

  • 命名空间指定:通过-n <命名空间名>参数指定查询目标命名空间,比如kubectl get pod -n kube-system查询kube-system命名空间下的Pod,默认不加-n等同于-n default

  • 输出字段含义:

  • 名称列:Pod的资源名称

  • 就绪状态列:格式为就绪容器数/总容器数,如0/2表示Pod内共2个容器,0个处于就绪状态

  • 状态列:如Running表示运行中、ContainerCreating表示容器正在创建中

  • 后续字段:重启次数、运行时长、所在节点、Pod IP等

1.2 资源层级特性

Kubernetes资源分为命名空间级别和集群级别,两类资源的查询特性完全不同:

命名空间级别资源

  • 典型代表:Pod、Deployment、Service、ConfigMap等

  • 特性:不同命名空间下的资源相互隔离,同一类资源在不同命名空间下查询结果不同

  • 特殊命名空间:kube-system是Kubernetes集群系统组件的专属命名空间,存放调度器、kube-controller-manager、kube-apiserver、etcd、coredns、kube-proxy、calico(CNI网络插件)等核心组件,禁止在该命名空间下执行随意操作

集群级别资源

  • 典型代表:Node(节点)、ClusterRole、PersistentVolume等

  • 特性:不受命名空间限制,在任何命名空间下查询同一集群级别资源,返回结果完全相同

  • 类比:如同查询不同院系的所属学校,无论哪个命名空间下的集群级别资源都属于集群本身,结果一致

二、常用 kubectl 核心命令详解

2.1 kubectl get 扩展选项

  • -A / --all-namespaces:查看所有命名空间下的指定资源,-A是--all-namespaces的缩写,执行后会额外输出「命名空间」列,标识资源所属命名空间

  • -o wide:展示资源的扩展信息,额外输出Pod的IP地址、调度节点等字段

  • --show-labels:展示资源关联的标签信息

  • -l <标签选择器>:根据标签筛选资源,支持key(筛选含该key的所有资源)、key=value(筛选key对应值为value的资源)格式,比如-l app=myapp筛选标签app值为myapp的Pod

2.2 进入容器执行命令:kubectl exec

  • 基础语法:kubectl exec -it <Pod名称> [-c <容器名称>] -- <执行的命令>

  • 参数说明:

  • -i:保持标准输入打开,开启交互模式

  • -t:分配伪TTY终端,支持交互式命令

  • -c <容器名称>:指定要进入的目标容器名称,当Pod内仅有一个业务容器(排除pause容器)时可省略该参数

  • --:命令分隔符,后面跟容器内要执行的操作,比如bash进入容器终端、ls查看目录等

2.3 查看资源详细信息:kubectl describe

  • 基础语法:kubectl describe <资源类型> <资源名称>

  • 作用:输出资源的全量描述信息,包含元数据、状态、事件等板块,排错时优先查看「Events(事件)」板块的报错内容

2.4 查看容器日志:kubectl logs

  • 基础语法:kubectl logs <Pod名称> [-c <容器名称>]

  • 作用:获取指定容器的标准输出日志,等同于Docker的docker logs命令,用于排查容器运行异常

三、Pod 核心特性与容器交互

3.1 Pod 的本质

Pod是Kubernetes中最小的调度单元,本质是多个容器的集合,集合内的容器共享网络、IPC、PID命名空间:

  • 每个Pod默认会携带一个pause(infra)容器,用于初始化网络命名空间、共享网络栈,其他业务容器均与pause容器共享网络资源

  • 同一Pod内的容器可以通过localhost互相访问,共享端口、存储等资源

3.2 容器交互验证

  • 通过kubectl get pod -o wide获取Pod的IP地址,直接通过curl <Pod IP>即可访问Pod内的业务服务

  • 进入Pod内的业务容器修改文件后,再次访问服务可以看到修改生效,验证Pod内容器共享存储与网络

四、资源清单创建与排错实战

4.1 资源清单创建

  • 基于之前编写的Pod资源清单,可快速创建新的Pod实例:修改资源名称、业务容器镜像、容器名称等字段后,执行kubectl create -f <资源清单文件路径>即可完成创建

  • 示例:修改后的资源清单包含两个业务容器myapp-1(基于nginx 1.0镜像)、myapp-2(基于自定义nginx 2.0镜像)

4.2 Pod 重启机制说明

  • 若业务容器前台进程退出(比如sleep 3600休眠结束后进程终止),Kubernetes会按照资源清单的期望状态,创建新的容器实例替换已终止的容器,因此会出现重启计数,该过程本质是容器重建而非原有容器重启

  • 若Pod被手动删除,无额外控制器守护时无法自动恢复,后续学习的控制器可实现Pod的自动恢复

4.3 排错实战:端口冲突问题

  • 问题现象:创建修改后的Pod后状态变为Error,重启次数持续增加

  • 排错步骤:

  1. 优先执行kubectl describe pod <Pod名称>查看「Events」板块,若无明确集群级报错则进入下一步

  2. 执行kubectl logs <Pod名称> -c <容器名称>查看容器日志,定位到报错信息为地址已被占用

  3. 根因分析:同一Pod内的容器共享网络命名空间,myapp-1默认绑定80端口,myapp-2同样绑定80端口,同一网络命名空间下不允许存在两个相同端口的监听,因此myapp-2启动失败,Pod持续重启

  • 排错思路总结:优先查看describe的事件报错→其次查看容器日志→最后排查端口、存储等资源冲突问题

AI 总结

本小节围绕Kubernetes Pod资源的操作与特性展开,首先讲解了Pod查询的命名空间逻辑、命名空间/集群级别资源的差异,其次详解了kubectl get/exec/describe/logs等核心常用命令的使用方法,然后明确了Pod作为多容器集合的核心特性与交互逻辑,最后通过资源清单创建、重启机制说明、端口冲突排错三个实战场景,帮助学习者掌握Kubernetes基础资源操作的完整流程与排错思路。


评论