2. 创建第一个Deployment:使用kubectl create deployment命令、YAML文件结构解析

在Kubernetes集群中,Deployment是最常用的工作负载控制器之一。它负责声明式地管理Pod副本、滚动更新、回滚以及扩缩容。本节将带领你通过两种方式创建第一个Deployment:命令式(kubectl create deployment)和声明式(YAML文件),并深入解析YAML文件的核心结构。

2.1 使用kubectl create deployment命令快速创建

kubectl create deployment是Kubernetes提供的命令式创建方式,适合快速启动一个Deployment进行测试或验证。其基本语法如下:

kubectl create deployment <deployment-name> --image=<image-name> [--replicas=<副本数>] [--port=<容器端口>]

示例:创建一个名为nginx-deploy的Deployment,运行Nginx镜像,副本数为3。

kubectl create deployment nginx-deploy --image=nginx:1.25 --replicas=3 --port=80

执行后,Kubernetes会自动生成一个Deployment对象,并创建3个Nginx Pod。你可以通过以下命令验证:

kubectl get deployments
kubectl get pods -l app=nginx-deploy
提示:命令式创建虽然快捷,但缺乏版本控制和可重复性。在生产环境中,推荐使用YAML文件进行声明式管理。

2.2 YAML文件结构解析

YAML(YAML Ain't Markup Language)是Kubernetes资源对象的声明式定义语言。一个标准的Deployment YAML文件包含四个核心字段:apiVersion、kind、metadata和spec。下面是一个完整的Deployment YAML示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80

下表详细解释了每个字段的作用:

字段 说明 示例值
apiVersion 定义Kubernetes API的版本。Deployment在稳定版中使用apps/v1。 apps/v1
kind 指定资源对象的类型。对于工作负载控制器,此处为Deployment。 Deployment
metadata 包含资源的元数据,如名称、命名空间、标签和注解。 name: nginx-deploy
spec 定义Deployment的期望状态,包括副本数、选择器、Pod模板等。 见下文详解

2.3 spec字段深度解析

spec是Deployment的核心,它定义了控制器如何管理Pod。主要子字段包括:

  • replicas:期望的Pod副本数量。Kubernetes会确保集群中始终运行指定数量的Pod。
  • selector:标签选择器,用于匹配Deployment管理的Pod。必须与Pod模板中的标签一致。
  • template:Pod模板,定义了Pod的规格,包括容器、镜像、端口、环境变量等。
关键点:selector.matchLabels与template.metadata.labels必须完全匹配,否则Deployment无法正确管理Pod。

下面通过一个SVG图展示Deployment YAML文件的结构层次:

Deployment YAML 结构层次图 Deployment apiVersion: apps/v1 kind metadata spec replicas: 3 selector template metadata.labels spec 说明:selector.matchLabels 必须与 template.metadata.labels 完全匹配,Deployment 才能正确管理 Pod。 spec 是 Deployment 的核心,定义了期望状态,包括副本数、选择器和 Pod 模板。

2.4 使用YAML文件创建Deployment

声明式创建方式通过kubectl apply -f命令应用YAML文件,Kubernetes会根据文件内容创建或更新资源。步骤如下:

  1. 编写YAML文件:将上述示例保存为nginx-deployment.yaml。
  2. 应用YAML文件:
kubectl apply -f nginx-deployment.yaml
  1. 验证Deployment状态:
kubectl get deployment nginx-deploy -o wide
kubectl describe deployment nginx-deploy
注意:如果YAML文件格式错误(如缩进不一致、字段拼写错误),kubectl apply会报错。建议使用kubectl apply --dry-run=client -f nginx-deployment.yaml进行预检。

2.5 命令式 vs 声明式:对比总结

特性 命令式(kubectl create deployment) 声明式(YAML + kubectl apply)
创建速度 快速,适合临时测试 需要编写文件,稍慢
可重复性 低,参数需手动记忆 高,文件可版本控制
可读性 一般,参数分散 高,结构清晰
更新方式 需使用kubectl set或kubectl edit 修改YAML后重新apply
生产环境推荐 不推荐 强烈推荐