1. 命令式对象管理 (Imperative Commands)
这种方式直接使用 kubectl
命令在集群中执行操作,无需配置文件。
- 特点:直接、快速,但不留痕迹,难以追溯和复制。
- 常见命令:
kubectl run nginx-pod --image=nginx:latest --port=80
(创建一个运行 Nginx 的 Pod)kubectl expose deployment nginx-deployment --name=nginx-service --type=ClusterIP --port=80 --target-port=80
(创建一个 Service)kubectl scale deployment nginx-deployment --replicas=5
(扩展 Deployment 的副本数)kubectl delete pod nginx-pod
(删除一个 Pod)
- 适用场景:适合临时调试、快速实验或学习阶段。对于生产环境的严肃工作,通常不推荐,因为它缺乏版本控制和可重复性。
2. 命令式对象配置 (Imperative Object Configuration)
这种方式通过配置文件(YAML 或 JSON)和命令式命令来管理资源。
- 特点:配置被记录在文件中,可以存入版本控制系统(如 Git),提高了可重复性和可审计性。
- 常见命令:
kubectl create -f nginx-pod.yaml
(根据配置文件创建资源)kubectl replace -f nginx-pod.yaml
(替换现有资源配置,要求资源已存在)kubectl delete -f nginx-pod.yaml
(删除配置文件定义的资源)
- 缺点:
kubectl replace
执行的是 “全量替换”。如果其他人或进程在你不知情的情况下修改了资源的其他字段(例如通过kubectl edit
),这些修改会被你的replace
操作覆盖,因为它只遵循你提供的 YAML 文件。
3. 声明式对象配置 (Declarative Object Configuration)
这是 Kubernetes 推荐的管理方式,尤其适用于生产环境。你只需要声明资源的“期望状态”(在 YAML 文件中),Kubernetes 会自动计算并实施从当前状态到期望状态所需的更改。
- 核心命令:
kubectl apply -f <filename-or-directory>
(创建或更新资源以匹配配置)- 可以对一个文件、一个目录(递归处理所有配置文件)甚至一个 URL 使用
apply
。
- 特点:
- 幂等性 (Idempotent):可以安全地多次执行
kubectl apply
,结果是一致的。 - 差异合并 (Merge Patch):
apply
操作会智能地合并你对配置文件的更改和资源的当前状态,而不是简单替换。这避免了意外覆盖其他字段的问题。 - 状态驱动 (State-Driven):你关心的是“What”(期望状态),而不是“How”(如何达到这个状态),Kubernetes 会帮你处理细节。
- 幂等性 (Idempotent):可以安全地多次执行
- 适用场景:所有严肃环境,特别是团队协作、GitOps 工作流和需要审计追踪的场景。配置文件就是你的“基础设施即代码 (Infrastructure as Code)”。