# 服务部署(1): 使用 kubectl 部署(deployment)

回顾我们在 “使用Dockerfile制作镜像” 一节里制作过的 python docker 镜像程序。镜像推送到镜像仓库的tag名字是`fanfeilong/cloud_native_hello_py`，源码结构如下：

```bash

├── .dockerignore
├── .gitignore
├── Dockerfile
├── README.md
└── src
    ├── main.py
    └── requirements.txt
```


我们在根目录下创建一个 k8s 的部署配置文件，文件是 yaml 格式，文件名为`k8s_python_sample_code.deployment.yml`，内容如下，注意`name`字段不能是下划线命名风格：

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cloud-native-hello-py
  labels:
    app: cloud-native-hello-py
spec:
  replicas: 3
  selector:
    matchLabels:
      app: cloud-native-hello-py
  template:
    metadata:
      labels:
        app: cloud-native-hello-py
    spec:
      containers:
      - name: cloud-native-hello-py
        image: fanfeilong/cloud_native_hello_py
        ports:
        - containerPort: 1024
```

通过一组操作来部署和查看状态
* 使用命令 `kubectl create -f k8s.deployment.yaml` 部署到 k8s 集群，“部署” 本身被当一种资源创建过程
* 使用命令 `kubectl get deployments` 查看部署情况
* 使用命令`kubectl rollout status deployment/cloud-native-hello-py`查看状态。

![](./img/deployment.png)


以下说法错误的是？

## 答案

k8s.deployment.yaml 里不需要指定目标部署 Python 服务的 docker 镜像名字

## 选项

### A

kubectl 对一种资源的操作，常见的包含：创建、查看列表、获取状态三种

### B

使用 yaml 配置部署信息，使用`kubectl create -f` 命令创建资源，这就是 k8s 的声明式 api 的做法 

### C

deployment 的配置文件yaml里，`name` 字段不能带下划线风格

### D

containerPort: 1024 用来暴露容器导出端口