Kubernetes 实战入门:核心资源操作

一、Namespace(命名空间):资源隔离的核心

Namespace 是 Kubernetes 中用于逻辑隔离资源的虚拟环境,可实现多环境(如开发、测试)或多租户的资源分隔,避免同名资源冲突。

1.1 核心概念

  • 隔离范围:仅隔离资源名称(如 Pod、Deployment),不隔离网络(默认跨 Namespace 可通信,需通过网络策略限制);
  • 资源配额:可结合 ResourceQuota 限制 Namespace 下的 CPU、内存等资源使用;
  • 默认 Namespace:集群启动后自动创建 4 个系统 Namespace,无需手动创建。

1.2 默认 Namespace 说明

Namespace 名称

作用

default

未指定 Namespace 的资源默认分配到此,用于存放用户自定义资源;

kube-system

Kubernetes 系统组件(如 API Server、Calico、CoreDNS)所在的命名空间;

kube-public

所有用户(包括未认证用户)可访问的公共资源,如集群配置信息;

kube-node-lease

维护节点间心跳检测(v1.13+ 引入),用于快速识别故障节点;

1.3 常用操作命令

操作目标

命令示例

查看所有 Namespace

kubectl get ns(缩写,等价于 kubectl get namespace)

查看指定 Namespace 详情

kubectl get ns default(基本信息)kubectl get ns default -o yaml(YAML 格式)kubectl describe ns default(详细事件)

创建 Namespace

命令式:kubectl create ns dev(创建名为 dev 的 Namespace)

删除 Namespace

命令式:kubectl delete ns dev(删除 dev 及其中所有资源)

1.4 YAML 配置示例(创建 Namespace)

  1. 新建配置文件 ns-dev.yaml:
    apiVersion: v1 # Namespace 的 API 版本固定为 v1
    
    kind: Namespace # 资源类型为 Namespace
    
    metadata:
    
    name: dev # Namespace 名称,必须唯一

  2. 应用配置:
kubectl create -f ns-dev.yaml # 创建 Namespace

kubectl delete -f ns-dev.yaml # 按文件删除 Namespace

1.5 注意事项

  • 删除 Namespace 会连带删除其下所有资源(Pod、Deployment 等),操作前需确认;
  • 系统 Namespace(如 kube-system)不建议删除,否则会导致集群组件故障。

二、Pod:Kubernetes 最小管理单元

Pod 是 Kubernetes 集群的最小部署和管理单元,容器必须运行在 Pod 内(一个 Pod 可包含 1 个或多个关联容器)。

2.1 核心概念

  • 容器载体:Pod 为容器提供共享网络(同一 Pod 内容器共享 IP 和端口)、存储等环境;
  • 集群组件形态:Kubernetes 自身组件(如 CoreDNS、Calico)也以 Pod 形式运行;
  • 管理方式:Kubernetes 很少直接管理 Pod,通常通过 Pod 控制器(如 Deployment)实现自愈、扩缩容。

2.2 查看集群内置 Pod(系统组件)

集群启动后,系统组件运行在 kube-system Namespace 下,执行以下命令查看:

kubectl get pod -n kube-system

# 示例输出(关键组件):

# NAME READY STATUS RESTARTS AGE

# calico-node-979j8 1/1 Running 3 45h # 网络插件

# coredns-6554b8b87f-bx5bg 1/1 Running 3 46h # DNS 服务

# kube-apiserver-master 1/1 Running 4 46h # API 服务

2.3 常用操作命令

2.3.1 1. 自主管理 Pod(无控制器,删除后不重建)
# 1. 创建 Pod(未指定 Namespace 则在 default 下)

kubectl run nginx-pod --image=nginx:latest --port=80

# 参数说明:--image 指定容器镜像,--port 指定容器暴露端口

# 2. 查看 Pod 状态

kubectl get pod # 基本信息(名称、就绪状态、重启次数、运行时间)

kubectl get pod -o wide # 额外显示 Pod IP、运行节点

kubectl describe pod nginx-pod # 详细信息(事件、容器日志、网络配置)

# 3. 测试 Pod 内部访问(集群内可通,外部需暴露服务)

curl <Pod IP>:80 # 如 curl 10.244.1.2:80,返回 Nginx 默认页面

# 4. 删除 Pod

kubectl delete pod nginx-pod
2.3.2 2. 控制器管理 Pod(Deployment 管控,自愈能力)

通过 Deployment 创建的 Pod 会被控制器监控,删除后会自动重建(确保副本数符合预期):

# 1. 创建 Deployment(管理 1 个 Nginx Pod)

kubectl create deployment nginx-deploy --image=nginx:latest --port=80

# 2. 查看 Pod(名称含随机后缀,由控制器生成)

kubectl get pod

# 示例输出:

# NAME READY STATUS RESTARTS AGE

# nginx-deploy-7c5ddbdf54-4n2nx 1/1 Running 0 11s

# 3. 尝试删除 Pod(控制器会自动重建)

kubectl delete pod nginx-deploy-7c5ddbdf54-4n2nx

kubectl get pod # 会发现新 Pod 已生成

# 4. 彻底删除 Pod(需先删除控制器)

kubectl get deploy nginx-deploy # 查看控制器

kubectl delete deploy nginx-deploy # 删除控制器,Pod 随之删除

2.4 YAML 配置示例(创建 Pod)

  1. 新建配置文件 pod-nginx.yaml(指定在 dev Namespace 下):
    apiVersion: v1 # Pod 的 API 版本固定为 v1
    
    kind: Pod # 资源类型为 Pod
    
    metadata:
    
    name: nginx-pod # Pod 名称,在 Namespace 内唯一
    
    namespace: dev # 指定 Namespace(需提前创建)
    
    spec:
    
    containers: # 容器列表(一个 Pod 可多个容器)
    
    - name: nginx-container # 容器名称(唯一)
    
    image: nginx:latest # 容器镜像
    
    ports: # 容器暴露端口
    
    - name: nginx-port # 端口名称(自定义)
    
    containerPort: 80 # 容器内部端口
    
    protocol: TCP # 协议(TCP/UDP)

  2. 应用配置:
kubectl create -f pod-nginx.yaml # 创建 Pod

kubectl delete -f pod-nginx.yaml # 按文件删除 Pod

2.5 注意事项

  • 同一 Pod 内的容器共享网络命名空间,可通过 localhost 相互访问;
  • 自主管理的 Pod 无自愈能力,生产环境建议用 Deployment 等控制器管理。

三、Label(标签):资源的 “身份标识”

Label 是附加在资源(如 Pod、Node)上的 键值对(key=value),用于资源分类、筛选和关联(如 Deployment 通过 Label 匹配 Pod)。

3.1 核心特性

  • 灵活性:一个资源可添加多个 Label,一个 Label 可附加到多个资源;
  • 动态性:资源创建后可随时添加、更新或删除 Label;
  • 多维度分组:支持按版本(version=v1)、环境(env=dev)、架构(tier=frontend)等维度标记资源。

3.2 Label Selector(标签选择器)

Label Selector 用于筛选拥有指定 Label 的资源,分为两种类型:

选择器类型

语法示例

说明

基于等式

version=v1、env!=prod

匹配 key=value 或 key≠value 的资源;

基于集合

version in (v1, v2)、tier not in (db)

匹配 value 在 / 不在集合内的资源;

多条件组合

version=v1, env=dev

多个条件用逗号分隔,需同时满足;

3.3 常用操作命令

操作目标

命令示例

为 Pod 打 Label

kubectl label pod nginx-pod version=1.0 env=dev # 添加 2 个 Label

查看 Pod 的 Label

kubectl get pod nginx-pod --show-labels # 显示所有 Label

更新 Pod 的 Label

kubectl label pod nginx-pod version=2.0 --overwrite # 覆盖已有 Label

筛选 Label 匹配的 Pod

kubectl get pod -l version=2.0 # 筛选 version=2.0 的 Podkubectl get pod -l "env in (dev, test)" # 筛选 env 在 dev/test 中的 Pod

删除 Pod 的 Label

kubectl label pod nginx-pod version- # 键名后加 “-” 表示删除

3.4 YAML 配置示例(Pod 带 Label)

  1. 新建配置文件 pod-with-label.yaml:
    apiVersion: v1
    
    kind: Pod
    
    metadata:
    
    name: nginx-pod
    
    namespace: dev
    
    labels: # 直接在 metadata 下定义 Label
    
    version: "3.0" # 注意:value 含特殊字符(如数字开头)需加引号
    
    env: "test"
    
    tier: "frontend"
    
    spec:
    
    containers:
    
    - name: nginx-container
    
    image: nginx:latest
    
    ports:
    
    - containerPort: 80

  2. 应用配置后验证:
kubectl create -f pod-with-label.yaml

kubectl get pod -n dev --show-labels # 查看 Label

3.5 注意事项

  • Label 的 key 需符合 DNS 子域名规范(如不能含大写字母、特殊符号);
  • Deployment 与 Pod 的关联依赖 Label Selector,需确保 spec.selector 与 Pod 的 metadata.labels 匹配。

四、Deployment:Pod 控制器的 “自愈专家”

Deployment 是 Kubernetes 最常用的 Pod 控制器,用于管理 Pod 的全生命周期,实现 Pod 的自愈(故障重建)、弹性扩缩容、滚动更新等功能。

4.1 核心作用

  • 自愈能力:Pod 故障(如容器崩溃、节点宕机)时,自动重建 Pod,确保副本数符合预期;
  • 弹性扩缩容:一键调整 Pod 副本数,应对流量波动;
  • 滚动更新:更新 Pod 镜像时,逐步替换旧 Pod,避免服务中断;
  • 版本回退:更新失败时,可快速回滚到历史稳定版本。

4.2 常用操作命令

4.2.1 1. 创建 Deployment(指定副本数)
# 创建 3 个 Nginx Pod 的 Deployment(默认在 default Namespace)

kubectl create deployment nginx-deploy \

--image=nginx:latest \

--port=80 \

--replicas=3

# 参数说明:--replicas 指定 Pod 副本数,--port 指定容器端口
4.2.2 2. 查看 Deployment 与 Pod 状态
# 查看 Deployment 基本信息

kubectl get deploy nginx-deploy

# 示例输出(关键字段):

# NAME READY UP-TO-DATE AVAILABLE AGE

# nginx-deploy 3/3 3 3 51s

# 字段说明:

# READY:就绪的 Pod 数/总副本数;

# UP-TO-DATE:符合最新配置的 Pod 数;

# AVAILABLE:可用的 Pod 数(可提供服务)。

# 查看 Deployment 详细信息(含事件、配置)

kubectl describe deploy nginx-deploy

# 查看 Deployment 管理的 Pod(Label 自动匹配)

kubectl get pod -l app=nginx-deploy # Deployment 自动为 Pod 添加 app=<deploy-name> Label
4.2.3 3. 弹性扩缩容(调整副本数)
# 方法 1:命令式调整(将副本数改为 5)

kubectl scale deploy nginx-deploy --replicas=5

# 方法 2:编辑配置(手动修改 replicas 字段)

kubectl edit deploy nginx-deploy # 打开编辑器,修改 spec.replicas: 5,保存退出
4.2.4 4. 删除 Deployment
kubectl delete deploy nginx-deploy # 删除控制器及管理的所有 Pod

4.3 YAML 配置示例(创建 Deployment)

  1. 新建配置文件 deploy-nginx.yaml:
    apiVersion: apps/v1 # Deployment 的 API 版本为 apps/v1(需注意版本对应)
    
    kind: Deployment # 资源类型为 Deployment
    
    metadata:
    
    name: nginx-deploy # Deployment 名称
    
    namespace: dev # 指定 Namespace
    
    spec:
    
    replicas: 3 # 预期 Pod 副本数
    
    selector: # Label Selector(匹配要管理的 Pod)
    
    matchLabels:
    
    app: nginx # 匹配 Label 为 app=nginx 的 Pod
    
    template: # Pod 模板(控制器根据此模板创建 Pod)
    
    metadata:
    
    labels:
    
    app: nginx # Pod 的 Label,需与 selector.matchLabels 一致
    
    spec:
    
    containers:
    
    - name: nginx-container
    
    image: nginx:latest
    
    ports:
    
    - containerPort: 80

  2. 应用配置:
kubectl create -f deploy-nginx.yaml # 创建 Deployment

kubectl delete -f deploy-nginx.yaml # 按文件删除 Deployment

4.4 注意事项

  • Deployment 的 spec.selector 必须与 spec.template.metadata.labels 匹配,否则无法管理 Pod;
  • 滚动更新时,默认保留 1 个旧副本(可通过 spec.revisionHistoryLimit 调整历史版本保留数)。

总结

本文覆盖了 Kubernetes 实战入门的四大核心资源:

  1. Namespace:实现资源隔离,区分多环境 / 多租户;
  2. Pod:最小管理单元,容器的载体;
  3. Label:资源的 “身份标识”,用于筛选和关联;
  4. Deployment:Pod 控制器,实现自愈、扩缩容等核心能力。

建议按 “Namespace → Pod → Label → Deployment” 的顺序逐步实践,熟悉命令操作和 YAML 配置,为后续学习 Service、Ingress 等资源打下基础。

更多推荐