读懂 Deployment YAML - 每天5分钟玩转 Docker 容器技术(125)

本文介绍如何使用 YAML 配置文件进行 Kubernetes 的 Deployment 部署,并详细解析了 Deployment 配置文件的各项参数意义及其组成部分。

既然要用 YAML 配置文件部署应用,现在就很有必要了解一下 Deployment 的配置格式,其他 Controller(比如 DaemonSet)非常类似。

还是以 nginx-deployment 为例,配置文件如下图所示:

① apiVersion 是当前配置格式的版本。
② 
kind 是要创建的资源类型,这里是 Deployment
③ 
metadata 是该资源的元数据,name 是必需的元数据项。
④ 
spec 部分是该 Deployment 的规格说明。
⑤ 
replicas 指明副本数量,默认为 1。
⑥ 
template 定义 Pod 的模板,这是配置文件的重要部分。
⑦ 
metadata 定义 Pod 的元数据,至少要定义一个 label。label 的 key 和 value 可以任意指定。
⑧ 
spec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。

此 nginx.yml 是一个最简单的 Deployment 配置文件,后面我们学习 Kubernetes 各项功能时会逐步丰富这个文件。

执行 kubectl apply -f nginx.yml

部署成功。同样地,通过 kubectl get 查看 nginx-deployment 的各种资源:

Deployment、ReplicaSet、Pod 都已经就绪。如果要删除这些资源,执行 kubectl delete deployment nginx-deployment 或者 kubectl delete -f nginx.yml

下一节讨论 Deployment 的 Scale Up/Down。

书籍: 

1.《每天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html


2.《每天5分钟玩转OpenStack》
https://item.jd.com/12086376.html

<think>我们遇到了一个错误:在创建 Deployment 时使用了 `--replicas` 标志,但 kubectl 提示未知标志。这是因为在 `kubectl create deployment` 命令中,`--replicas` 并不是一个直接可用的选项。正确的做法是使用 `kubectl create deployment` 创建部署后,再使用 `kubectl scale` 来设置副本数,或者在创建时使用另一种方式(比如通过YAML文件)指定副本数。 但是,我们也可以使用 `kubectl run` 命令来创建带有副本数的部署(在较新版本的Kubernetes中,`kubectl run` 用于创建Pod,而部署通常用 `kubectl create deployment` 或使用文件)。然而,在 `kubectl create deployment` 中,我们可以通过 `--replicas` 吗?实际上,根据文档,`kubectl create deployment` 并不直接支持 `--replicas` 参数。我们可以通过以下两种方式之一来解决: 1. 先创建部署,再扩展副本数: ```bash kubectl create deployment my-dep --image=docker.1ms.run/nginx kubectl scale deployment my-dep --replicas=4 ``` 2. 使用 `kubectl create` 命令的变体(但注意,`create` 命令本身没有`--replicas`,所以只能通过第一种方式)。 然而,错误信息已经明确:`unknown flag: --replicas`。所以我们需要调整命令。 为什么会出现这个错误?因为 `kubectl create deployment` 命令的语法是: kubectl create deployment NAME --image=image [--dry-run=server|client|none] [options] 其中,`[options]` 中并没有 `--replicas`。所以,我们只能先创建部署,然后再扩展。 因此,正确的步骤是: 步骤1: 创建部署(不指定副本数,默认副本数为1) ```bash kubectl create deployment my-dep --image=docker.1ms.run/nginx ``` 步骤2: 扩展副本数到4 ```bash kubectl scale deployment my-dep --replicas=4 ``` 另外,我们也可以使用YAML文件来创建,这样可以一次性指定副本数。 示例YAML文件(deploy.yaml): ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-dep spec: replicas: 4 selector: matchLabels: app: my-dep template: metadata: labels: app: my-dep spec: containers: - name: nginx image: docker.1ms.run/nginx ``` 然后应用这个文件: ```bash kubectl apply -f deploy.yaml ``` 因此,对于当前错误,我们只需要分两步执行命令即可。 现在,我们回答用户的问题,并按照要求提出相关问题。 </think> ### Kubernetes Deployment 创建错误分析与解决方案 #### 错误原因解析 1. **无效参数**: ```bash Error: unknown flag: --replicas ``` - `kubectl create deployment` 命令**不支持直接使用 `--replicas` 参数** - 这是常见误区,因 `kubectl run` 支持该参数但 `create deployment` 不支持 2. **版本差异**: - Kubernetes 1.18+ 版本中 `kubectl run` 行为变更 - 旧版:`kubectl run` 可创建 Deployment - 新版:`kubectl run` 仅创建 Pod,需改用 `create deployment` #### 正确创建方法 **方法1:分步操作(推荐)** ```bash # 1. 创建Deployment(默认1个副本) kubectl create deployment my-dep --image=docker.1ms.run/nginx # 2. 扩展副本数 kubectl scale deployment my-dep --replicas=4 ``` **方法2:单命令创建(需完整参数)** ```bash # 使用完整参数创建(不推荐,容易出错) kubectl create deployment my-dep \ --image=docker.1ms.run/nginx \ --replicas=4 # 错误!实际无效参数 ``` **方法3:YAML文件创建(生产推荐)** ```yaml # my-dep.yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-dep spec: replicas: 4 selector: matchLabels: app: my-dep template: metadata: labels: app: my-dep spec: containers: - name: nginx image: docker.1ms.run/nginx ``` 应用YAML: ```bash kubectl apply -f my-dep.yaml ``` #### 命令对比表 | 命令类型 | 创建副本数方法 | 适用版本 | |----------------------|--------------------------------|---------------| | `kubectl run` | 支持 `--replicas` | Kubernetes <1.18 | | `kubectl create deployment` | **不支持** `--replicas` | Kubernetes ≥1.18 | | `kubectl scale` | 独立扩缩容命令 | 所有版本 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值