Kubernetes 实战入门:核心资源操作
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)
- 新建配置文件 ns-dev.yaml:
apiVersion: v1 # Namespace 的 API 版本固定为 v1 kind: Namespace # 资源类型为 Namespace metadata: name: dev # Namespace 名称,必须唯一 - 应用配置:
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)
- 新建配置文件 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) - 应用配置:
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)
- 新建配置文件 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 - 应用配置后验证:
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)
- 新建配置文件 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 - 应用配置:
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 实战入门的四大核心资源:
- Namespace:实现资源隔离,区分多环境 / 多租户;
- Pod:最小管理单元,容器的载体;
- Label:资源的 “身份标识”,用于筛选和关联;
- Deployment:Pod 控制器,实现自愈、扩缩容等核心能力。
建议按 “Namespace → Pod → Label → Deployment” 的顺序逐步实践,熟悉命令操作和 YAML 配置,为后续学习 Service、Ingress 等资源打下基础。
更多推荐
所有评论(0)