
# 无状态负载（Deployment）
#### 介绍视频
<video controls="controls" preload="none" id="object2531553124819" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/cci-video/1750839561433569806.mp4" title="创建工作负载中文" poster="https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0000002403914381.jpg" height="300.0000" width="600.0000"></video>
无状态负载与Kubernetes中Deployment Workloads的定义方式相同，是对Pod的服务化封装。一个无状态负载可以包含一个或多个Pod，每个Pod的角色相同，所以系统会自动为无状态负载的多个Pod分发请求。同一无状态负载的所有Pod共享存储卷。
在[Pod](https://support.huaweicloud.com/usermanual-cci/cci_01_0067.html)这个章节介绍了Pod，Pod是Kubernetes创建或部署的最小单位，但是Pod是被设计为相对短暂的一次性实体，Pod可以被驱逐（当节点资源不足时）、随着集群的节点fail而消失。同时kubernetes提供了Controller（控制器）来管理Pod，Controller可以创建和管理多个Pod，提供副本管理、滚动升级和自愈能力，其中最为常用的就是Deployment。
一个Deployment可以包含一个或多个Pod副本，每个Pod副本的角色相同，所以系统会自动为Deployment的多个Pod副本分发请求。
Deployment集成了上线部署、滚动升级、创建副本，恢复上线任务，在某种程度上，Deployment可以帮用户实现无人值守的上线，大大降低了上线过程的复杂沟通、操作风险。
图1无状态负载   
![](https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0198439521.png)
#### 创建方式
表1创建无状态负载方式 
| 创建方式             | 相关链接                                                                                        |
|:---|:---|
| 通过控制台创建无状态负载     | [通过控制台创建无状态负载]                                         |
| 使用Kubectl创建无状态负载 | 使用Kubectl创建无状态负载请参见[Deployment](https://support.huaweicloud.com/devg-cci/cci_05_0005.html)。 |
   
 #### 通过控制台创建无状态负载
1. 登录云容器实例管理控制台，左侧导航栏中选择"工作负载 \> 无状态（Deployment）"，在右侧页面单击"镜像创建"。
2. 添加基本信息。 
   - **负载名称**
     请输入以小写字母或数字开头，小写字母、数字、中划线（-）、点（.）组成（其中两点不能相连，点不能与中划线相连），小写字母或数字结尾的1到63字符的字符串。负载名称不支持修改，如需修改名称，需要重新创建。
     
   
   - **命名空间**
     选择命名空间，如果还未创建命名空间，请参考[命名空间](https://support.huaweicloud.com/usermanual-cci/cci_01_0001.html)创建。
     
   
   - **负载描述**
     描述信息，少于等于250个字符。
     
   
   - **Pod数量**
     负载可以有一个或多个Pod，您可以设置具体Pod个数。每个负载Pod都由相同的容器部署而成。设置多个Pod主要用于实现高可靠性，当某个Pod故障时，负载还能正常运行。
     
   
   - **Pod规格**
     您可以选择使用GPU（只能在GPU型命名空间下）或不使用GPU。
     具体的规格信息请参考[约束与限制](https://support.huaweicloud.com/productdesc-cci/cci_03_0007.html)中的"Pod规格"。
     ![](https://support.huaweicloud.com/usermanual-cci/public_sys-resources/note_3.0-zh-cn.png)
     - nvidia-smi是一个命令行工具，详细信息请参考[NVIDIA System Management Interface](https://developer.nvidia.com/nvidia-system-management-interface)。
     
     - CCI不提供nvidia-smi，您可以将nvidia-smi打包到镜像中，通过nvidia-smi监控GPU使用情况。使用nvidia-smi前需要设置LD_LIBRARY_PATH值。
       
   
   - **启用镜像快照**
     使用镜像快照（ImageSnapshot），可以避免镜像下载，减少Pod启动时间，要了解镜像快照的工作原理，请参阅[镜像快照概述](https://support.huaweicloud.com/usermanual-cci/cci_01_0112.html)。
     支持以下两种方式：
     - 自动匹配镜像快照 自动匹配将从用户创建的所有可用镜像快照中选择最优的镜像。按以下顺序进行匹配：
       a. 镜像匹配度：优先选择匹配度高的镜像快照，匹配度指的是Pod和镜像快照两者在镜像上的匹配情况。
       b. 创建时间：优先选择创建时间更新的镜像快照。
       
     
     - 明确指定 指定已有的镜像快照，并在容器配置下的"镜像快照"页签中选择镜像快照中的镜像。该镜像缓存必须为创建完成可用（Available）状态。
       ![](https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0000001570742946.png)
       
      
   
   - **容器配置**
     一个Pod可以包含一个或多个运行不同镜像的容器，通常情况下一个Pod中只有一个容器，如果您的应用程序需要多个容器，请单击"添加容器"，然后选择镜像。
     ![](https://support.huaweicloud.com/usermanual-cci/public_sys-resources/notice_3.0-zh-cn.png)
     同一个Pod实例中的不同容器如果监听了相同的端口，则会导致端口冲突，Pod可能会启动失败。例如在Pod中添加了一个nginx镜像容器，启动了80端口，如果该Pod中另一个http服务的镜像也启动80端口，那么这个Pod就会出现端口冲突。
     - 我的镜像：展示了您上传到容器镜像服务的镜像。
       ![](https://support.huaweicloud.com/usermanual-cci/public_sys-resources/note_3.0-zh-cn.png)
       - 如果您开通了[企业管理](https://support.huaweicloud.com/usermanual-em/zh-cn_topic_0123692049.html)，使用账号登录云容器实例控制台时，您需要在账号下的容器镜像服务中给IAM用户添加权限，IAM用户才能使用账号下的私有镜像。给IAM用户添加权限有如下两种方法：
         - 在镜像详情中为IAM用户添加授权，授权完成后，IAM用户享有读取/编辑/管理该镜像的权限，具体请参见[在镜像详情中添加授权](https://support.huaweicloud.com/usermanual-swr/swr_01_0015.html)。
         
         - 在组织中为IAM用户添加授权，使IAM用户对组织内所有镜像享有读取/编辑/管理的权限，具体请参见[在组织中添加授权](https://support.huaweicloud.com/usermanual-swr/swr_01_0015.html)。
          
       
       - CCI当前暂不支持对接第三方镜像仓库。
       
       - 镜像单层解压后的实际大小不能超过20G。
         
     
     - 开源镜像中心：展示了镜像中心的公共镜像。
     
     - 共享镜像：展示了容器镜像服务中他人共享的镜像。
     
     
     镜像选择完成后，需要选择镜像的版本、设置容器名称、设置容器占用的CPU和内存规格，并选择是否开启采集标准输出文件（开启后，应用运维管理AOM将根据实际使用量进行计费）。
     ![](https://support.huaweicloud.com/usermanual-cci/public_sys-resources/note_3.0-zh-cn.png)
     每个租户一个月有500M的免费日志存储空间，超过500M时AOM将根据实际使用量进行收费，计费规则请参见[产品价格详情](https://www.huaweicloud.com/pricing.html?tab=detail#/aom)。
     对于GPU加速型Pod（仅GPU型命名空间下才可以选择），Pod中只有一个容器能使用GPU，如果您的Pod中有多个容器，您可以通过**开启GPU**这个开关选择哪个容器使用GPU。
     您还可以为容器做如下高级设置：
     - 存储：支持挂载持久化卷到容器中，以实现数据文件的持久化存储，当前支持云硬盘存储卷、文件存储卷和极速文件存储卷。单击"添加云硬盘存储卷"、"添加文件存储卷"或"添加极速文件存储卷"，输入名称、容量、容器内挂载路径，选择磁盘类型。负载创建完成后，可对存储卷进行管理，具体请参见[云硬盘存储卷](https://support.huaweicloud.com/usermanual-cci/cci_01_0045.html)、[文件存储卷 3.0](https://support.huaweicloud.com/usermanual-cci/cci_01_0062.html)或[极速文件存储卷](https://support.huaweicloud.com/usermanual-cci/cci_01_0069.html)。
     
     - 日志采集：支持根据您配置的日志输出路径，采集应用日志请自行防爆处理。单击添加日志存储，输入容器内日志路径，调整日志存储空间。负载创建完成后，可在AOM界面查看日志，具体请参见[日志管理](https://support.huaweicloud.com/usermanual-cci/cci_01_0049.html)。
     
     - 环境变量：在容器中设置环境变量，支持手动输入和引用变量。环境变量为应用提供极大的灵活性，您可以在应用程序中使用环境变量，在创建容器时为环境变量赋值，容器运行时读取环境变量的值，从而做到灵活的配置，而不是每次都重新编写应用程序制作镜像。 手动输入只需要直接输入变量名称和变量值。
       变量引用支持引用PodIP（Pod的IP地址）、PodName（Pod的名称）以及Secret，输入变量名称，选择引用类型、引用值。其中Secret引用的创建请参见[使用Secret](https://support.huaweicloud.com/usermanual-cci/cci_01_0035.html)。
       
     
     - 健康检查：健康检查是指容器运行过程中，根据您需要，定时检查容器健康状况。详细步骤请参见[健康检查](https://support.huaweicloud.com/usermanual-cci/cci_01_0013.html)。
     
     - 生命周期：生命周期脚本定义，在容器的生命周期的特定阶段执行调用。详细步骤请参见[容器生命周期](https://support.huaweicloud.com/usermanual-cci/cci_01_0012.html)。
     
     - 启动命令：输入容器启动命令，容器启动后会立即执行。启动命令对应于容器引擎的ENTRYPOINT启动命令，详细内容请参见[容器启动命令](https://support.huaweicloud.com/usermanual-cci/cci_01_0050.html)。
     
     - 配置管理：容器支持挂载ConfigMap和Secret。ConfigMap和Secret的创建请参见[使用ConfigMap](https://support.huaweicloud.com/usermanual-cci/cci_01_0034.html)和[使用Secret](https://support.huaweicloud.com/usermanual-cci/cci_01_0035.html)。
      
   
   
   
   
3. 单击"下一步：访问配置"，配置负载访问信息。 
   负载访问有如下三个选项：
   - 不启用：将不提供任何从其他负载访问到当前负载的入口，可用于使用自定义的服务发现或简单启用多个Pod的场景。
   
   - 内网访问：内网访问将为当前负载配置一个负载域名或内网域名/虚拟IP，使得当前负载能够为内网中其他负载提供服务，分为Service和ELB两种方式。内网访问的详细内容请参见[内网访问](https://support.huaweicloud.com/usermanual-cci/cci_01_0054.html)。
   
   - 公网访问：将提供一个可以从Internet访问的入口，支持HTTP/HTTPS/TCP/UDP协议。公网访问的详细内容请参见[公网访问](https://support.huaweicloud.com/usermanual-cci/cci_01_0055.html)。
   
   
   
   
4. 单击"下一步：高级设置"，进行高级设置。 
   - **升级策略：** 升级方式支持"滚动升级"和"替换升级"。
     - 滚动升级：滚动升级将逐步用新版本的实例替换旧版本的实例，升级的过程中，业务流量会同时负载均衡分布到新老的实例上，因此业务不会中断。 最大无效实例数：每次滚动升级允许的最大无效实例数，如果等于实例数有断服风险（最小存活实例数 = 实例数 - 最大无效实例数）。
       
     
     - 替换升级：先删除旧实例，再创建新实例。升级过程中业务会中断。
      
   
   - **客户端DNS配置** ：负载支持替换域名解析配置和追加域名解析配置，参数设置请参见[客户端DNS配置](https://support.huaweicloud.com/usermanual-cci/cci_01_0099.html)。
   
   
   
   
5. 配置完成后，单击"下一步：规格确认"，单击"提交"，单击"返回无状态负载列表"。 
   在负载列表中，待负载状态为"运行中"，负载创建成功。您可以单击负载名进入负载详情界面，按F5查看负载实时状态。
   如果需要访问负载，选择"访问配置"Tab页，查看访问地址。
   
   
 
#### 删除Pod
负载创建完后，可以对Pod进行手动删除操作，由于Pod是由控制器在控制，单击删除按钮后会立即重新创建一个新的Pod。手动删除Pod在某些场景下非常有用，比如升级到一半出现失败时、想重启业务进程时。
删除Pod如[图2]所示。
图2删除Pod   
![](https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0228211221.png)
删除后立即重新创建Pod，如[图3]所示。
图3删除Pod的效果   
![](https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0228211414.png)
#### 重新拉取镜像失败问题排查
工作负载详情中，如果事件中提示"重新拉取镜像失败"，请参见[事件一：重新拉取镜像失败](https://support.huaweicloud.com/cci_faq/cci_faq_0033.html)来排查原因。
#### 重新启动容器失败问题排查
工作负载详情中，如果事件中提示"重新启动容器失败"，请参见[事件二：重新启动容器失败](https://support.huaweicloud.com/cci_faq/cci_faq_0010.html)来排查原因。
