Day2 Pod、命名空间与配置
本文最后更新于2 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、Namespace(命名空间)

1. 概念

Namespace 是 K8s逻辑隔离、资源分组机制。

✅只隔离资源对象(Pod、Deployment、Service),默认不隔离网络;不同 namespace 的 Pod 默认可以互相访问,想要网络隔离需要配置NetworkPolicy

❗Namespace 是逻辑概念,不绑定 Node,同一个 namespace 的 Pod 可以分布在不同节点。

类比:集群是一栋办公楼,Namespace 是独立办公室;办公室互相隔开,但是共用大楼水电(集群底层硬件)。

区分:K8s Namespace(集群逻辑隔离)≠ Linux 内核 Namespace(容器底层进程 / 网络隔离)

2.K8s 内置 4 个命名空间

命名空间作用
default默认命名空间,不指定-n,资源全部创建在此
kube-system集群系统组件 Pod,禁止放业务应用
kube-public集群公开可读资源,未认证用户也可读
kube-node-lease节点心跳 Lease 对象,实现轻量级节点健康检测,减轻 apiserver 压力,用户一般不操作

3. 命名空间操作命令

# 查看所有命名空间
kubectl get ns

# 命令式创建namespace
kubectl create namespace development

# yaml声明式创建ns.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: development

# 应用yaml
kubectl apply -f ns.yaml

二、Pod 核心概念

Pod 是 K8s 最小部署、调度单元!不是容器!

Pod = 容器组,一个 Pod 可以包含1 个或者多个业务容器

1.Pod 核心特性

  1. 同生共死:Pod 内全部容器调度到同一个 Node,一起创建、一起销毁。
  2. 共享网络栈:整个 Pod 共用同一个 Pod‑IP,Pod 内部容器之间可以直接用localhost通信。
  3. 共享存储 Volume:Pod 级别挂载卷,所有容器可以读写同一份文件。
  4. 不可变性:Pod 创建完成,不能修改容器配置;更新需要新建 Pod 替换旧 Pod。

2.Pod 两种使用模式

①单容器 Pod(最常用)

一个 Pod 里面只有 1 个业务容器;Pod 充当容器的包装外壳。

场景:普通微服务 Nginx、Java 后端。

②多容器 Pod

同一个 Pod 多个紧密协作容器。

  • Sidecar 边车容器:辅助主容器,日志收集、监控代理,不侵入业务。
  • Init 容器:主容器启动之前执行初始化任务(等待数据库、生成配置文件)
  • 临时调试容器:故障排查调试使用

注意:只有高度耦合、需要本地高频通信的容器才放同一个 Pod;普通微服务分开不同 Pod。

3.Pod 内部共享环境

Pod 内容器共享:

  1. Linux 命名空间:Network、IPC、UTS;PID 命名空间不共享
  2. cgroups:统一对整个 Pod 做 CPU、内存资源限制
  3. Volume 存储卷,实现文件共享

Pod 内部容器三种通信方式:

  1. localhost网络通信(共享网络命名空间)
  2. IPC 进程间通信(消息队列、共享内存)
  3. 共享 Volume 文件读写

4.Pause(基础设施 / 根容器)⭐面试重点

每一个 Pod 都会最先启动 pause 容器,业务容器后启动。

  1. 作用:
    • 创建 Pod 级别的 Network、IPC、UTS 命名空间。
    • 业务容器加入 pause 创建的命名空间,从而实现 Pod 内容器共享同一个 IP、网络栈。
    • Pause 生命周期 = Pod 生命周期;pause 死,整个 Pod 销毁。
  2. 工作流程 创建Pod → 启动Pause容器 → 创建各类Linux命名空间 → 业务容器加入命名空间 → 实现网络与IPC共享

类比:Pause 是公寓物业,先建好水电网络;业务容器是住户,直接入住使用公共设施。


三、Pod 的两种创建方式

1. 命令式 kubectl run

kubectl run my‑pod --image=nginx:1.27.1 -n default

2.YAML 声明式(生产推荐)

YAML 语法要点:

  1. 缩进只用空格,禁止 Tab,一般 2 空格;
  2. :-符号后面必须加空格;
  3. ---分割多个资源;#注释。

Pod 完整 yaml 模板

apiVersion: v1       # 核心资源固定v1版本
kind: Pod            # 资源类型Pod
metadata:
  name: my‑nginx‑pod # Pod名称,ns内唯一
  labels:            # 标签key:value
    app: web
    env: test
spec:
  containers:        # 容器列表,数组用"-"
  - name: nginx‑c
    image: nginx:1.27.1
    imagePullPolicy: IfNotPresent #镜像拉取策略
    ports:
    - containerPort: 80  #容器监听端口

多容器 Pod yaml 示例

apiVersion: v1
kind: Pod
metadata:
  name: multi‑pod
spec:
  containers:
  - name: nginx‑c
    image: nginx:1.27.1
    ports:
    - containerPort:80
  - name: busybox‑c
    image: busybox:1.36
    command: ["sleep","3600"]

kubectl create 与 kubectl apply 对比⭐

特性kubectl createkubectl apply
类型命令式声明式(生产首选)
幂等性❌非幂等,资源已存在直接报错✅幂等,可重复执行
行为只做创建,不能更新创建;修改 yaml 后自动更新资源
适用场景临时测试生产环境、CI/CD、GitOps
kubectl create -f pod.yaml  #资源存在直接报错
kubectl apply -f pod.yaml   #推荐,存在就更新,不存在创建

四、kubectl 核心命令大全

1. 查询类

kubectl get pods                     #查看pod基础状态
kubectl get pods -o wide             #显示PodIP、节点名等更多信息
kubectl get pod <podname> -n ns‑name #指定命名空间查看
kubectl get ns                       #查看命名空间
kubectl api‑resources                #查看所有k8s资源

# 查看标签
kubectl get pod --show‑labels
#标签过滤资源
kubectl get pod -l app=web

2. 排错诊断 describe

重点!看 Pod 事件,定位 Pod 启动失败、镜像拉取失败原因

kubectl describe pod pod‑name -n ns

3. 日志 logs

kubectl logs pod‑name                     #查看日志
kubectl logs -f pod‑name                  #实时跟踪日志 tail‑f
kubectl logs --tail=100 pod‑name          #最近100行
kubectl logs --since=10m pod‑name         #最近十分钟日志

#多容器Pod,指定容器看日志
kubectl logs pod‑name -c container‑name
#全部容器日志
kubectl logs pod‑name --all‑containers=true

#根据标签批量看日志
kubectl logs -f -l app=web

4. 调试 exec 进入容器

#进入pod(单容器)
kubectl exec -it pod‑name -- /bin/bash

#多容器,指定容器进入
kubectl exec -it pod‑name -c nginx‑c -- /bin/bash

#指定命名空间
kubectl exec -it pod‑name -n dev -- /bin/bash

5. 删除资源

kubectl delete pod pod‑name
kubectl delete -f pod.yaml

6. 标签 label 操作

#给pod新增/修改标签
kubectl label pod my‑pod env=prod
#删除标签 加"-"
kubectl label pod my‑pod env‑

7. 底层容器工具 crictl /ctr

containerd 工具,节点上直接管理镜像、容器(不经过 k8s)

crictl images                 #查看节点本地镜像
crictl rmi <image‑id>         #删除镜像

#ctr是containerd自带,指定k8s.io命名空间
ctr -n=k8s.io images import xxx.tar #导入镜像

日常 K8s 节点运维优先:crictl

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇