3、Kubernetes的Namespace&Contexts&Pod&YAML格式

一、Namespace 命名空间

1.1 概念

Namespace(ns)用于逻辑隔离集群资源,把同一个物理集群划分多个逻辑资源组;同 ns 资源互通,不同 ns 资源逻辑隔离。

注意:

  1. Pod、Service、PVC 属于命名空间资源;Node、PV、Namespace 本身不属于任何 namespace。

  2. 集群内置 4 个 namespace 表格

    命名空间 作用
    default 不指定‑n 时资源默认创建到此 ns
    kube‑system K8s 系统组件资源
    kube‑public 所有用户可读
    kube‑node‑lease 节点心跳租约,检测节点故障

1.2 Namespace 管理命令

复制代码
#查看所有ns
kubectl get ns
#创建ns
kubectl create ns laoma
#yaml方式创建ns
kubectl apply -f ns‑laoma.yaml
#查看ns详情yaml
kubectl get ns laoma -o yaml
#描述namespace
kubectl describe ns laoma
#删除namespace:会删除ns内部全部资源,default/kube‑system不可删除
kubectl delete ns laoma

#操作指定命名空间资源,‑n指定ns
kubectl run web --image=nginx -n laoma
kubectl get pod -n laoma

1.3 切换 Namespace

  1. 原生 kubectl config 方式

    #查看当前上下文
    kubectl config get‑contexts
    #设置当前上下文默认namespace
    kubectl config set‑context --current --namespace=laoma

  2. 第三方工具 kubens(简化 ns 切换)

    #安装:解压kubectx项目,拷贝kubens到/usr/local/bin,配置bash补全
    kubens #列出所有namespace
    kubens kube‑system #切换到指定ns
    kubens - #切回上一个ns
    kubens -c #打印当前ns

二、Context 上下文 & kubeconfig 配置文件

文件路径:~/.kube/config,保存集群地址、证书、用户、上下文信息,kubectl凭此访问集群。

2.1 kubeconfig 三大组成部分

  1. clusters:集群列表,集群 API 地址、CA 证书。
  2. users:用户身份,客户端证书 / 私钥。
  3. contexts上下文:绑定 cluster + user + namespace ;current‑context标记当前使用的上下文。

2.2 多集群切换

  1. 原生命令

    kubectl config get‑clusters #查看集群
    kubectl config get‑contexts #查看上下文,*代表当前生效
    kubectl config use‑context cluster2‑context #切换上下文(切换集群)

  2. 第三方工具 kubectx(切换集群 / 上下文)

    kubectx #列出全部context
    kubectx cluster1‑context #切换到指定上下文
    kubectx - #回到上一个context
    kubectx -c #打印当前上下文名称

配置文件可以手动编写多集群 kubeconfig,通过环境变量KUBECONFIG指定配置文件路径。

三、Pod 核心

Pod 是 K8s 最小调度、管理单元;Pod 封装一个或多个容器 。 类比豌豆荚:Pod 是豌豆荚,容器是豌豆;同一个 Pod 内所有容器共享网络 namespace、共享存储卷,调度到同一个节点 。 Pod 分配独立 PodIP;Pod 内部容器用127.0.0.1互相通信。

3.1 Pod 基础管理命令

复制代码
#--dry‑run 只输出yaml,不创建资源
kubectl run web --image=nginx --dry‑run=client -o yaml

#直接创建pod
kubectl run web --image=nginx
#查看pod
kubectl get pod
kubectl get pod -o wide   #显示podIP、节点
kubectl get pod web -o yaml #输出yaml完整资源定义
kubectl describe pod web   #查看pod事件、详细状态
kubectl logs -f web        #查看pod容器日志,‑f实时跟踪

#进入pod执行命令
kubectl exec web -- hostname
kubectl exec -it web -- bash

#pod与宿主机拷贝文件
kubectl cp /etc/hosts web:/new‑hosts

#删除pod,terminationGracePeriodSeconds默认30秒优雅终止
kubectl delete pod web

#yaml文件创建pod
kubectl apply -f web.yaml
kubectl create -f web.yaml

3.2 多容器 Pod

同一个 Pod 运行多个容器;共享网络、共享 volume 存储,运行在同一节点。

  • 适用:业务容器 + sidecar 辅助容器(日志采集、代理)。

  • 多容器 pod 执行命令,需要‑c指定容器名称

    kubectl exec bbs -c wordpress -- hostname

实验示例:一个 pod 同时运行 mysql + wordpress,内部使用 127.0.0.1 访问数据库。

3.3 Pod 关键 yaml 属性

  1. metadata元数据:name、namespace、labels标签、annotations 注解。
  2. spec期望规格
    • containers[]:业务容器数组,必填。
      • image镜像;name容器名;
      • imagePullPolicy镜像拉取策略
        • Always总是拉取镜像;
        • Never只使用本地镜像,不拉取;
        • IfNotPresent:本地有就用本地,没有才拉取(常用)。
      • command / args:覆盖容器镜像入口命令;
      • env环境变量;volumeMounts挂载卷。
    • restartPolicy容器重启策略,对 pod 内全部容器生效
      • Always:总是重启(pod 默认);
      • OnFailure:异常退出(非 0 返回码)才重启;
      • Never:绝不重启。
    • initContainers[]初始化容器
      • 串行依次执行,全部 0 退出成功,才启动业务 containers;
      • 任意 init 容器失败,pod 会根据重启策略重启,直到 init 全部成功;
      • 场景:等待依赖服务、准备文件、初始化配置。
    • volumes定义存储卷。
  3. status:Pod 实际运行状态,由 k8s 实时填充,写 yaml 不需要写 status。

3.4 Pod 常见状态

表格

状态 含义
ContainerCreating 容器正在创建拉取镜像
Running 全部容器正常运行
Completed 容器正常退出,任务完成
Error 容器异常退出
CrashLoopBackOff 容器反复崩溃重启
ErrImagePull / ImagePullBackOff 镜像拉取失败
Terminating pod 正在删除终止

3.5 静态 Pod

  1. 普通 Pod:通过 apiserver 创建,master 管控。
  2. 静态 Pod:由节点本机 kubelet 直接管理,不经过 apiserver 。
    • kubelet 读取目录/etc/kubernetes/manifests/*.yaml;检测文件变化自动创建 / 删除 pod。
    • K8s 控制平面组件kube‑apiserver、etcd、scheduler、controller‑manager就是 master 节点上的静态 Pod。
    • 不能通过 kubectl delete 直接删除静态 pod;需要删除 manifest 目录下 yaml 文件。

3.6 三个核心思考题

  1. Pod 和容器区别?
  • 容器:底层运行时概念(containerd/docker),是进程隔离运行环境。
  • Pod:K8s 独有的最小调度管理单元,是容器的封装外壳;提供独立 PodIP、共享网络、共享存储、重启策略、健康检查;一个 Pod 可以包含一个或多个容器。
  1. 为什么 K8s 管理 Pod,而不直接管理容器? ①支持多容器协同(业务 + sidecar、init 容器),共享网络存储,必须调度到同一节点; ②Pod 提供统一抽象:生命周期、重启自愈、资源、健康检查; ③解耦底层 CRI 容器运行时,兼容 docker/containerd/cri‑o。
  2. pause(infra)容器作用? 每个 Pod 自动启动 pause 容器,Pod 基石。 ①创建、持有 Pod 的 network、IPC 命名空间 ;业务容器加入 pause 的 namespace,实现多容器共享同一个 PodIP; ②pause 容器保持不退出,业务容器反复重启,Pod 网络 / IP 不销毁; ③实现 Pod 内部容器localhost互通。

比喻:pause 是房东,占好房子(网络命名空间),业务容器是租客,可以更换租客,房子不变。

四、YAML 语法规范(K8s 资源文件使用)

  1. 缩进:只能空格,禁止 Tab;一般 2 空格缩进;同级缩进对齐。
  2. 注释:#,# 前面要有空格。
  3. 字符串:一般不需要引号;特殊字符可单 / 双引号。
  4. 多行字符串
    • |保留换行;
    • >换行替换为空格,折叠长文本。
  5. 字典(mapping):键:值,冒号后面必须空格;也支持{k1:v1,k2:v2}内联(不推荐)。
  6. 列表(sequence):‑ 横线开头表示数组项;也支持[a,b,c]内联,可读性差尽量不用。
  7. ---用来分割多个 yaml 文档,一个文件写多个 k8s 资源。

思维导图

相关推荐
戴西软件1 小时前
制造研发中的AI视觉与仿真:戴西工程图纸智能审图智能体、戴西3DViz_CAE AI集成与戴西3DViz_CAD AI集成
大数据·运维·人工智能·3d·自动化·制造·rpa
javaDocker1 小时前
1800 亿科技投入砸下去,多数机构平的只是服务器,不是能力
运维·服务器·人工智能·科技·研发效能·金融科技
SatanII2 小时前
K8s 存储与配置管理|Volume、ConfigMap、Secret 核心笔记
笔记·rpc·kubernetes
骇客野人2 小时前
Linux 全套实操方案(含目录详解、文件传输、日志、文件规范、环境变量、Java 应用部署运维)
java·linux·运维
容器魔方2 小时前
Volcano v1.16 发布:新增 NamespaceQueue 与 fairshare,拓展 HyperNode 生态
人工智能·云原生·容器·华为云·云计算
eleven_4u2 小时前
RocketMQ相关问题
java·运维·中间件
0+1112 小时前
Linux --DNS与ICMP
linux·运维·服务器
钛生智能3 小时前
OA 流程定制全参数详解(三):环节信息——流程中最核心、参数最多的部分
运维·办公自动化·oa·协同办公·oa办公系统
bjxiaxueliang3 小时前
一文自建STUN:在Ubuntu上分步搭建STUN服务
linux·运维·ubuntu