
# 使用云容器引擎CCE拉取镜像并部署应用
您可以使用镜像快速创建一个可公网访问的单实例工作负载。本章节将指导您基于云容器引擎CCE快速部署Nginx容器应用。
#### 前提条件
1. **首次开通CCE并进行授权**
   - 详细步骤请参见[首次开通CCE并进行授权](https://support.huaweicloud.com/qs-cce/cce_qs_0003.html#section2)。
    
2. **创建集群**
   - 详细操作步骤请参见[创建集群](https://support.huaweicloud.com/qs-cce/cce_qs_0003.html#section3)。
    
3. **在集群中创建节点池和节点**
   - 详细操作步骤请参见[创建节点池和节点](https://support.huaweicloud.com/qs-cce/cce_qs_0003.html#section4)。
   
   - 集群至少包含1个4核8G节点。
   
   - 集群内节点已绑定弹性公网IP。
    
 
#### 创建并访问工作负载
您可以登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，使用控制台和[kubectl](https://kubernetes.io/zh-cn/docs/reference/kubectl/)命令行方式部署工作负载，本文中使用NGINX镜像作为示例。
- [使用控制台方式]
  1. 在集群控制台的左侧菜单栏选择"工作负载"，单击右上角"创建工作负载"。
  
  2. 配置工作负载基本信息。 
     本示例中填写以下关键参数，其它参数可保持默认。关于配置参数的详细说明请参见[创建无状态负载（Deployment）](https://support.huaweicloud.com/usermanual-cce/cce_10_0047.html)。
     
     | 参数   | 示例                   | 参数说明                                                                                                                                                            |
     |:---|:---|:---|
     | 负载类型 | **无状态负载 Deployment** | 工作负载是在 Kubernetes 上运行的应用程序。Kubernetes提供了一些内置的工作负载资源，不同工作负载的功能特性及应用场景不同。关于工作负载类型的介绍请参见[工作负载概述](https://support.huaweicloud.com/usermanual-cce/cce_10_0006.html)。 |
     | 负载名称 | **nginx**            | 请填写工作负载的名称。                                                                                                                                                     |
     | 命名空间 | **default**          | 命名空间是Kubernetes集群中的抽象概念，可以将集群中的资源或对象划分为一个组，且不同命名空间中的数据彼此隔离。 集群创建后将默认生成一个default命名空间，您可以直接使用该命名空间。    |
     | 实例数量 | **1**                | 工作负载中的Pod数量。                                                                                                                                                    |
        
     
     
  
  3. 配置容器信息。 
     填写以下关键参数，其它参数可保持默认。
     ![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002530208146.png)
     
     | 参数    | 示例                                 | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
     |:---|:---|:---|
     | 镜像名称  | 使用**nginx** 镜像，镜像版本为**latest**     | 单击"选择镜像"，在弹出的窗口中切换至"镜像中心"，选择一个公共镜像。                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
     | CPU配额 | 申请值为**0.25** Core，限制值为**0.25**Core | - 申请：容器预分配的CPU值，默认0.25Core。  - 限制：容器允许使用的CPU资源最大上限，默认与申请值相同。如果设置限制值大于申请值，则表示在突发场景可临时突破预分配的资源限制。   详细说明请参见[设置容器规格](https://support.huaweicloud.com/usermanual-cce/cce_10_0163.html)。 |
     | 内存配额  | 申请值为**512** MiB，限制值为**512**MiB     | - 申请：容器预分配的内存值，默认512MiB。  - 限制：容器允许使用的内存资源最大上限，默认与申请值相同。如果设置限制值大于申请值，则表示在突发场景可临时突破预分配的资源限制。   详细说明请参见[设置容器规格](https://support.huaweicloud.com/usermanual-cce/cce_10_0163.html)。                  |
        
     
     
  
  4. 配置访问信息。
     
     单击"服务配置"下的加号，创建服务（Service）用于从外部访问负载。本示例将创建一个负载均衡类型的Service，请在右侧弹窗中配置如下参数。
     ![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002561008139.png)
     
     
     | 参数        | 示例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
     |:---|:---|:---|
     | Service名称 | **nginx**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 输入服务的名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
     | 访问类型      | **负载均衡 ( LoadBalancer )**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 选择服务类型，即服务访问的方式。不同的服务类型的差别请参见[服务概述](https://support.huaweicloud.com/usermanual-cce/cce_10_0249.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                            |
     | 负载均衡器     | - 类型：选择**独享型**。  - 可用区：至少选择一个可用区，如**可用区1**。  - 弹性公网IP：选择**自动创建**。   其余参数可保持默认。 | 如果已有负载均衡（ELB）实例，可以选择已有ELB。 如果没有可选择"自动创建"，创建一个负载均衡器，并同时绑定弹性公网IP。关于参数的详细说明，请参见[创建负载均衡类型的服务](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html)。                                                                                                                                                                                                                                                                                                                             |
     | 端口配置      | - 协议：**TCP**  - 容器端口：**80**  - 服务端口：**8080**                                       | - 协议：负载均衡监听器端口协议。  - 容器端口：容器中应用启动监听的端口，该容器端口需和应用对外提供的监听端口一致，使用nginx镜像请设置为80。  - 服务端口：ELB将会使用该端口创建监听器，提供外部流量访问入口。您可以自定义对外访问的端口。   |
        
     
     
  
  5. 单击右下角"创建工作负载"。 
     等待工作负载创建成功。创建成功后在无状态负载下会显示一个运行中的工作负载。
     图1创建工作负载成功   
     ![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002560888143.png)
     
     
     
  
  6. 获取Nginx的外部访问地址。 
     单击Nginx工作负载名称，进入工作负载详情页。在"访问方式"页签下可以看到nginx的IP地址，其中公网地址就是外部访问地址。
     图2获取外部访问地址   
     ![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002561008119.png)
     
     
     
  
  7. 在浏览器中输入"外部访问地址:服务端口"，即可成功访问应用。其中"服务端口"对应[4]中配置的服务端口值，本例中使用8080。
     
     图3访问nginx应用   
     ![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002560888157.png)
     
     
   
- [使用kubectl命令行方式]
  ![](https://support.huaweicloud.com/qs-swr/public_sys-resources/notice_3.0-zh-cn.png)
  如果您使用kubectl命令行方式连接集群，您需要在**集群所在VPC下** 准备一台**已绑定弹性公网IP**的ECS虚拟机。
  1. 登录ECS虚拟机，详情请参见[Linux ECS登录方式概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
  
  2. 在ECS虚拟机上安装kubectl命令行工具。 
     您可以尝试执行**kubectl version**命令判断是否已安装kubectl，如果已经安装kubectl，则可跳过此步骤。
     本文以Linux环境为例安装和配置kubectl，更多安装方式请参考[安装kubectl](https://kubernetes.io/zh-cn/docs/tasks/tools/#kubectl)。
     1. 下载kubectl。
        ```
        cd /home
        curl -LO https://dl.k8s.io/release/{v1.29.0}/bin/linux/amd64/kubectl
        ```
        其中*{v1.29.0}*为指定的版本号，请根据集群版本进行替换。
        
     
     2. 安装kubectl。
        ```
        chmod +x kubectl
        mv -f kubectl /usr/local/bin
        ```
        
     
     
     
     
  
  3. 为kubectl命令行工具配置访问Kubernetes集群的凭证。 
     1. 请登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，并单击集群名称进入集群总览页。
     
     2. 在集群总览页中找到"连接信息"版块。单击kubectl后的"配置"按钮，查看kubectl的连接信息。
     
     3. 在弹出页面中选择"内网访问"，然后下载对应的配置文件。
     
     4. 登录已安装kubectl客户端的虚拟机，将上一步中下载的配置文件（以kubeconfig.yaml为例）复制到/home目录下。
     
     5. 将kubectl认证文件保持至$HOME/.kube目录下的config文件中。
        ```
        cd /home
        mkdir -p $HOME/.kube
        mv -f kubeconfig.yaml $HOME/.kube/config
        ```
        
     
     6. 执行kubectl命令验证集群的连通性。 以查看集群信息为例，执行以下命令。
        ```
        kubectl cluster-info
        ```
        回显如下：
        ```
        Kubernetes master is running at https://*.*.*.*:5443
        CoreDNS is running at https://*.*.*.*:5443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
        To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
        ```
        
     
     
     
     
  
  4. 创建一个名为nginx-deployment.yaml的YAML文件。其中，nginx-deployment.yaml为自定义文件名称，您可以随意命名。 
     ```
     vi nginx-deployment.yaml
     ```
     文件内容如下：
     ```
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: nginx
     spec:
       replicas: 1
       selector:
         matchLabels:
           app: nginx
       template:
         metadata:
           labels:
             app: nginx
         spec:
           containers:
           - image: nginx:alpine
             name: nginx
           imagePullSecrets:
           - name: default-secret
     ```
     
     
  
  5. 执行以下命令，部署工作负载。 
     ```
     kubectl create -f nginx-deployment.yaml
     ```
     回显如下表示已开始创建工作负载。
     ```
     deployment "nginx" created
     ```
     
     
  
  6. 执行以下命令，查看工作负载状态。 
     ```
     kubectl get deployment
     ```
     回显如下，表示已创建成功。
     ```
     NAME           READY     UP-TO-DATE   AVAILABLE   AGE 
     nginx          1/1       1            1           4m5s
     ```
     回显中的参数解析如下：
     - NAME：工作负载名称。
     
     - READY：表示工作负载的可用状态，显示为"可用Pod个数/期望Pod个数"。
     
     - UP-TO-DATE：指当前工作负载已经完成更新的Pod数。
     
     - AVAILABLE：工作负载可用的Pod个数。
     
     - AGE：工作负载已经运行的时间。
     
     
     
     
  
  7. 创建一个名为nginx-elb-svc.yaml的YAML文件。将selector修改为nginx-deployment.yaml示例应用文件中matchLabels的值（本示例为app: nginx），从而将该服务关联至后端应用。 
     ```
     vi nginx-elb-svc.yaml
     ```
     示例如下，其中参数详细描述请参见[负载均衡(LoadBalancer)](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#section4)。
     ```
     apiVersion: v1 
     kind: Service 
     metadata: 
       annotations:   
         kubernetes.io/elb.class: union
         kubernetes.io/elb.autocreate: 
             '{
                 "type": "public",
                 "bandwidth_name": "cce-bandwidth",
                 "bandwidth_chargemode": "bandwidth",
                 "bandwidth_size": 5,
                 "bandwidth_sharetype": "PER",
                 "eip_type": "5_bgp"
             }'
       labels:
         app: nginx
       name: nginx 
     spec: 
       ports: 
       - name: service0 
         port: 8080
         protocol: TCP 
         targetPort: 80
       selector: 
         app: nginx 
       type: LoadBalancer
     ```
     
     
  
  8. 执行以下命令创建服务。 
     ```
     kubectl create -f nginx-elb-svc.yaml
     ```
     回显如下，表示服务已创建。
     ```
     service/nginx created
     ```
     
     
  
  9. 执行以下命令查看服务。 
     ```
     kubectl get svc
     ```
     回显如下，表示工作负载访问方式已设置成功，工作负载可访问。
     ```
     NAME         TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)          AGE
     kubernetes   ClusterIP      10.247.0.1       <none>          443/TCP          3d
     nginx        LoadBalancer   10.247.130.196   **.**.**.**   8080:31540/TCP   51s
     ```
     
     
  
  10. 在浏览器中输入访问地址，例如输入\*\*.\*\*.\*\*.\*\*:8080。其中\*\*.\*\*.\*\*.\*\*为负载均衡实例的弹性公网IP地址，8080为访问端口。 
      图4通过负载均衡访问nginx   
      ![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002530048190.png)
      
      
   
