文档首页/ 云容器引擎 CCE_Autopilot集群/ 快速入门/ 在CCE Autopilot集群中部署Nginx工作负载
更新时间:2024-12-18 GMT+08:00
分享

在CCE Autopilot集群中部署Nginx工作负载

CCE Autopilot集群是云容器引擎服务推出的Serverless版集群,支持智能化版本升级、漏洞自动修复和智能调参等技术,能够为您提供更智能的使用体验。同时,CCE Autopilot集群采用底层统一资源池技术,您无需管理和维护底层资源设施的分配和扩展,可以有效降低运维成本。底层统一资源池技术支持故障快速隔离和修复,能够确保应用的持续稳定运行,提升应用的可靠性。

Nginx是一款高性能的开源HTTP服务器和反向代理服务器,广泛用于处理高并发、负载均衡和静态资源服务。在集群中部署Nginx工作负载,可以通过负载均衡和反向代理有效地分配流量,确保高可用性和容错性。它还能够简化微服务架构中的流量管理、安全控制和API网关功能,提升系统的灵活性和扩展性。

本示例以部署Nginx工作负载为例,帮助您了解如何创建CCE Autopilot集群以及如何在集群中部署工作负载,整体架构请参见图1 方案架构

图1 方案架构

操作流程

表1 部署Nginx的操作流程

操作步骤

步骤说明

费用说明

准备工作

您需要注册华为账号,并为账号充值。

不涉及费用。

步骤一:首次开通CCE并进行授权

当您的账号在当前区域中首次使用CCE时,您需要为CCE进行授权。

不涉及费用。

步骤二:创建CCE Autopilot集群

在CCE服务中创建CCE Autopilot集群,以提供更简化的Kubernetes服务。

涉及集群管理和终端节点等费用,具体请参见集群计费说明

步骤三:部署并访问Nginx工作负载

在集群中创建工作负载,并为其创建负载均衡类型的服务,然后您就可以从公网访问您的工作负载。

涉及Pod和弹性负载均衡(ELB)费用,具体请参见集群计费说明ELB计费说明

后续操作:释放资源

如果您在完成实践后不需要继续使用集群,请及时清理资源以免产生额外扣费。

不涉及费用。

准备工作

步骤一:首次开通CCE并进行授权

由于CCE在运行中对计算、存储、网络以及监控等各类云服务资源都存在依赖关系,因此当您首次登录CCE控制台时,CCE将自动请求获取当前区域下的云资源权限,从而更好地为您提供服务。如果您在当前区域已完成授权,可忽略本步骤。

  1. 使用华为账号登录CCE控制台
  2. 单击控制台左上角的,选择“区域”,本示例使用区域为“华东-上海一”。
  3. 在首次登录某个区域的CCE控制台时将跳出“授权说明”,请您在仔细阅读后单击“确定”

    当您同意授权后,CCE将在IAM中创建名为“cce_admin_trust”委托,统一对您的其他云服务资源进行操作,并且授予其Tenant Administrator权限。Tenant Administrator拥有除IAM管理外的全部云服务管理员权限,用于对CCE所依赖的其他云服务资源进行调用,且该授权仅在当前区域生效。

    CCE对其他云服务存在依赖,如果没有Tenant Administrator权限,可能会因为某服务权限不足而无法正常使用。因此,在使用CCE服务期间,请不要自行删除或者修改“cce_admin_trust”委托。

步骤二:创建CCE Autopilot集群

在CCE服务中创建CCE Autopilot集群,以提供更简化的Kubernetes服务。本示例中仅解释必要参数,其他参数保留默认值。关于其他参数的详细说明,请参见购买Autopilot集群

  1. 进入CCE控制台

    • 如果您的账号在当前区域未创建过集群,请在当前页面单击“购买集群”“购买CCE Autopilot集群”,进入购买页。
    • 如果您的账号在当前区域已创建过集群,请在左侧菜单栏选择集群管理,单击右上角“购买集群”,进入购买页。

  2. 配置集群基础信息,具体的参数示例请参见图2表2

    图2 集群基本信息
    表2 集群基础信息

    参数

    示例

    参数说明

    集群类型

    CCE Autopilot集群

    CCE支持创建多种类型集群,满足各种业务需求,提供高可靠、安全的商业级容器集群服务。

    • CCE Standard集群:标准版本集群,提供高可靠、安全的商业级容器集群服务。
    • CCE Turbo集群:拥有更高性能的云原生网络,提供云原生混部调度能力,可实现更高的资源利用率和更广的全场景覆盖。
    • CCE Autopilot集群:Serverless版集群,提供免运维的容器服务,可以大幅降低运维成本,提高应用程序的可靠性和可扩展性。

    了解集群类型的更多内容,请参见集群对比

    集群名称

    autopilot-example

    新建集群的名称。

    集群名称长度范围为4-128个字符,以小写字母开头,支持小写字母、数字和中划线(-),不能以中划线(-)结尾。

    企业项目

    default

    该参数仅对开通企业项目的企业客户账号显示,不显示时请忽略。

    企业项目是一种资源管理单位,可跨区域归类资源,方便企业按部门或项目组集中管理。了解企业项目的更多内容,请参见项目管理

    请根据需要选择适合的企业项目,如果没有特殊要求,可以选择default。

    集群版本

    v1.28

    集群安装的Kubernetes软件版本,建议选择最新版本。

  3. 配置集群网络信息,具体的参数示例请参见图3表3

    图3 集群网络信息

    表3 集群网络信息

    参数

    示例

    参数说明

    虚拟私有云

    vpc-autopilot

    选择集群所在的虚拟私有云(VPC)。如果没有可选项,单击右侧“新建虚拟私有云”创建,具体请参见创建虚拟私有云和子网。集群创建后,VPC不支持修改。

    容器子网

    subnet-502f

    选择容器所在子网。每个Pod需要唯一的IP地址,容器子网内IP地址的数量决定了集群中Pod的数量上限,进而决定容器的数量上限,集群创建后支持新增子网。

    如果没有可选项,请单击右侧“新建子网”创建,具体请参见创建虚拟私有云和子网

    服务网段

    10.247.0.0/16

    同一集群下容器互相访问时使用的Service资源网段,决定Service资源数量的上限。集群创建后,服务网段不支持修改。

    配置SNAT

    开启

    默认开启,开启后您的集群可以通过NAT网关访问公网。默认使用所选VPC中已有的NAT网关,若VPC没有NAT网关,系统将会为您自动创建一个默认规格的NAT网关并绑定弹性公网IP,同时自动配置SNAT规则。

    使用NAT网关将产生一定费用,详情请参见NAT网关计费说明

  4. 单击“下一步:插件选择”,选择创建集群时需要安装的插件。

    本示例中,仅选择默认安装插件,即CoreDNS域名解析和Kubernetes Metrics Server插件。

  5. 单击“下一步:插件配置”,对选择的插件进行配置,默认插件无需配置。
  6. 单击“下一步:确认配置”,显示集群资源清单,确认无误后,单击“提交”

    创建集群预计需要5-10分钟,请耐心等待。创建成功后,集群管理中对应集群的状态为运行中。

    图4 集群运行中

步骤三:部署并访问Nginx工作负载

在集群中创建Nginx工作负载,将应用程序或服务部署到容器环境中,实现资源的高效利用和自动化管理。同时,为该工作负载创建负载均衡类型的服务,使您能够从公网访问Nginx。本节介绍两种方式部署并访问Nginx工作负载,包括控制台方式和kubectl命令行方式。

  1. 单击新建的集群名称,进入集群控制台。
  2. 在左侧菜单栏中选择“工作负载”,单击右上角“创建工作负载”,进入创建页。
  3. 配置工作负载基本信息,具体参数示例请参见图5表4

    本示例中仅解释必要参数,其他参数保留默认值。关于其他参数的详细说明,请参见创建工作负载,您可以根据工作负载类型选择适合的参考文档。

    图5 工作负载基本信息

    表4 工作负载基本信息

    参数

    示例

    参数说明

    负载类型

    无状态负载

    Deployment

    工作负载是一种对Pod的抽象管理方式,用于定义和控制Pod的创建、运行和生命周期。通过工作负载,您可以批量管理和自动化控制多个Pod的行为,如伸缩、更新和恢复。

    • 无状态负载(Deployment):管理无状态应用,支持上线部署、滚动升级、创建副本和恢复上线。
    • 有状态负载(StatefulSet):管理有状态应用,确保每个Pod能够拥有独立的持久化状态,并能够在Pod重启或迁移时恢复其数据,以保障应用的可靠性和一致性。
    • 普通任务(Job):一次性任务,完成后Pod自动删除。
    • 定时任务(CronJob):基于时间的Job,指定时间周期内运行指定的Job。

    了解工作负载的更多内容,请参见工作负载概述

    本示例将Nginx部署为无状态负载,原因在于Nginx主要用于处理请求转发、负载均衡和静态内容分发,不需要在本地保存任何持久性数据。

    负载名称

    nginx

    请填写工作负载的名称。

    工作负载名称长度范围为1-63个字符,可以包含小写英文字母、数字和和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。

    命名空间

    default

    命名空间是Kubernetes集群中的抽象概念,可以将集群中的资源或对象划分为一个组,且不同命名空间中的数据彼此隔离,您可以根据需要创建并使用命名空间。

    集群创建后会默认生成default命名空间,如果没有特殊要求,可以直接选择default命名空间。

    实例数量

    1

    工作负载中Pod实例的数量。Pod实例数量的设置策略:

    • 高可用性:如果您需要保证工作负载的高可用性,则实例数量至少设置为2,避免单点故障。
    • 性能要求:您需要根据工作负载的流量和资源需求设置实例数量,避免过载或资源浪费。

    本示例仅做演示,实例数量设置为1。

  4. 配置工作负载容器信息,具体参数示例请参见图6表5

    本示例中仅解释必要参数,其他参数保留默认值。关于其他参数的详细说明,请参见创建工作负载,您可以根据工作负载类型选择适合的参考文档。

    图6 工作负载容器信息
    表5 工作负载容器信息

    参数

    示例

    参数说明

    镜像名称

    nginx

    单击“选择镜像”,在弹出的窗口中切换至“镜像中心”,选择公共镜像。

    镜像版本

    latest

    选择需要部署的镜像版本。

    CPU配额

    0.25cores

    CPU资源限制值,即允许容器使用的CPU最大值,防止占用过多资源,默认0.25cores。

    内存配额

    512MiB

    内存资源限制值,即允许容器使用的内存最大值。如果超过,容器会被终止,默认512MiB。

  5. 单击“服务配置”下的,进入创建服务页面,配置工作负载服务信息,具体参数示例请参见图7表6

    本示例仅解释必要参数,其他参数保留默认值。关于其他参数的详细说明,请参见服务(Service),您可以根据服务类型选择适合的参考文档。

    图7 工作负载服务信息

    表6 工作负载服务信息

    参数

    示例

    参数说明

    Service名称

    nginx

    请填写服务的名称。

    服务名称长度范围为1-63个字符,可以包含小写英文字母、数字和和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。

    访问类型

    负载均衡

    选择服务类型,即服务访问的方式。

    • 集群内访问:通过集群的内部IP暴露服务,只能够在集群内部访问。
    • 负载均衡:通过弹性负载均衡(ELB)对外部提供服务,即能够从公网访问到工作负载。

    本示例中需要外部访问Nginx,所以访问类型设置为负载均衡。了解服务类型的更多内容,请参见服务(Service)

    负载均衡器

    • 独享型
    • 网络型(TCP/UDP)
    • 选择已有
    • elb-nginx
    • 如果已有弹性负载均衡(ELB)实例,可以选择已有ELB实例。
      说明:

      使用已有的ELB时,ELB实例需要具备3个条件:

      • 与集群属于同一VPC。
      • 实例类型为独享型。
      • 网络类型必须支持私网(存在私有地址)。
    • 如果没有弹性负载均衡(ELB)实例,请选择“自动创建”创建一个负载均衡器并绑定弹性公网IP,具体操作请参见创建负载均衡类型的服务

    端口配置

    协议:TCP

    负载均衡监听器端口协议。

    容器端口:80

    容器中应用启动监听的端口,该容器端口需和应用对外提供的监听端口一致。

    使用nginx镜像时容器端口需设置为80,原因在于Nginx默认使用80端口提供HTTP服务。

    服务端口:8080

    ELB将会使用该端口创建监听器,提供外部流量访问入口,可自定义。

  6. 单击右下角“创建工作负载”

    创建成功后,无状态工作负载列表中对应工作负载的状态为运行中。

    图8 工作负载运行中

  7. 单击Nginx工作负载名称,进入工作负载详情页,获取Nginx的外部访问地址。“访问方式”页签中,“负载均衡公网IP:访问端口”即为外部访问地址。其中,“负载均衡公网IP”5中ELB实例的公网地址,“访问端口”5中的“服务端口”

    图9 访问方式

  8. 在浏览器中输入“负载均衡公网IP:访问端口”,即可成功访问应用。

    图10 访问应用

该步骤涉及命令行操作,您可以使用以下两种方式进行相关操作。

  • 通过集群内命令行工具进行操作:该命令行工具已经配置kubectl命令,并已连接集群,更多信息请参见通过CloudShell连接集群
  • 通过ECS虚拟机进行操作:您需要购买一台Linux系统的ECS虚拟机,该ECS需与集群处于同一VPC,并绑定弹性公网IP,具体操作请参见快速购买和使用Linux ECS。如果已有满足条件的ECS,则无需购买。此外,您还需要安装kubectl命令,并通过kubectl连接集群

以第一种方法为例,介绍如何使用kubectl命令行方式创建Nginx工作负载。

  1. 单击新建的集群名称,进入集群控制台。
  2. 单击右上角“命令行工具”,进入CloudShell页面。

    目前,只有部分区域支持CloudShell连接集群,具体情况请以控制台为准。如果区域不支持,请通过ECS虚拟机进行操作。

    图11 CloudShell

  3. 执行以下命令,创建YAML文件nginx-deployment.yaml,用于配置nginx工作负载,文件名称可自定义。

    Linux文件命名支持字母、数字、下划线和连字符,但不能包含斜杠(/)和空字符(\0)。文件名区分大小写,建议避免使用特殊字符,如空格、问号(?)和星号(*)等,以提高兼容性。

    vim nginx-deployment.yaml

    文件内容如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx     # 工作负载名称
    spec:
      replicas: 1     # 实例数量
      selector:
        matchLabels:  # 选择器,用于选择带有特定标签的资源,需与6中负载均衡类型服务YAML文件中的selector取值保持一致
          app: nginx  
      template:
        metadata:
          labels:     # 标签,
            app: nginx
        spec:
          containers:
          - image: nginx:latest   # 镜像名称:镜像版本
            name: nginx
          imagePullSecrets:
          - name: default-secret

    输入完成后,按Esc键退出编辑,输入:wq保存。

  4. 执行以下命令,创建工作负载。

    kubectl create -f nginx-deployment.yaml

    回显如下,表示已经开始创建工作负载。

    deployment.apps/nginx created

  5. 执行以下命令,查看工作负载状态。

    kubectl get deployment

    回显如下,如果工作负载创建的Pod皆为可用状态,则表示创建成功。

    NAME     READY   UP-TO-DATE   AVAILABLE   AGE
    nginx    1/1     1            1           4m59s

    回显内容的参数说明如下:

    表7 回显内容参数说明

    参数

    示例

    参数说明

    NAME

    nginx

    工作负载的名称。

    READY

    1/1

    表示工作负载的可用状态,显示为“可用Pod个数/期望Pod个数”。

    UP-TO-DATE

    1

    指当前工作负载已经完成更新的Pod数。

    AVAILABLE

    1

    工作负载可用的Pod个数。

    AGE

    4m59s

    工作负载已经运行的时间。

  6. 执行以下命令,创建YAML文件nginx-elb-svc.yaml,用于配置负载均衡服务并关联已创建的工作负载nginx,文件名称可自定义。

    本示例基于已有的弹性负载均衡(ELB)实例创建服务,如果您需要自动创建ELB请参考通过kubectl命令行创建-自动创建ELB
    vim nginx-elb-svc.yaml

    文件内容如下:

    apiVersion: v1 
    kind: Service 
    metadata: 
      name: nginx      # 服务的名称
      annotations:
        kubernetes.io/elb.id: <your_elb_id>          # ELB ID,替换为实际值
        kubernetes.io/elb.class: performance         # 负载均衡器类型
    spec:
      selector:        # selector取值需与3中工作负载YAML文件中matchLabels参数取值一致
         app: nginx
      ports: 
      - name: service0 
        port: 8080     
        protocol: TCP 
        targetPort: 80  
      type: LoadBalancer

    输入完成后,按Esc键退出编辑,输入:wq保存。

    表8 使用已有ELB参数说明

    参数

    示例

    参数说明

    kubernetes.io/elb.id

    405ef586-0397-45c3-bfc4-xxx

    已有的ELB的ID。

    说明:

    使用已有的ELB时,ELB实例需要具备3个条件:

    • 与集群属于同一VPC。
    • 实例类型为独享型。
    • 网络类型必须支持私网(存在私有地址)。

    获取方式:进入网络控制台,在左上方选择集群所在区域,在左侧导航栏中选择“弹性负载均衡 > 我的ELB”,找到对应的ELB实例名称,名称下方即为对应ID。同时,单击ELB实例名称,在“基本信息”页签中验证该ELB是否满足上述条件。

    kubernetes.io/elb.class

    performance

    负载均衡器类型,仅支持performance类型,即独享型负载均衡。

    selector

    app: nginx

    选择器,服务将流量发送给对应标签的Pod。

    ports.port

    8080

    弹性负载均衡(ELB)将会使用该端口创建监听器,提供外部流量访问入口,可自定义。

    ports.protocol

    TCP

    负载均衡监听器端口协议。

    ports.targetPort

    80

    Service访问目标容器的端口,此端口与容器中运行的应用强相关。

    使用nginx镜像请设置为80。

  7. 执行以下命令,创建服务。

    kubectl create -f nginx-elb-svc.yaml

    回显如下,表示服务已创建。

    service/nginx created

  8. 执行以下命令,查看服务。

    kubectl get svc

    回显如下,表示工作负载访问方式已设置成功。

    NAME         TYPE           CLUSTER-IP     EXTERNAL-IP                  PORT(S)          AGE
    kubernetes   ClusterIP      10.247.0.1     <none>                       443/TCP          18h
    nginx        LoadBalancer   10.247.56.18   xx.xx.xx.xx,xx.xx.xx.xx      8080:30581/TCP   5m8s

  9. 在浏览器中输入“外部访问地址:服务端口”,即可成功访问应用。其中外部访问地址为EXTERNAL-IP对应的第一个IP地址,服务端口为8080。

    图12 访问应用

后续操作:释放资源

如果您无需继续使用集群,请及时释放资源,避免产生额外的费用。

  • 删除集群会删除集群下工作负载和服务,相关业务将无法恢复。
  • 集群关联创建的VPC级别的资源(如终端节点、NAT网关和SNAT出网EIP等),删除集群时默认保留,请确认其他集群或者地方没有重用该资源,再进行删除操作。
  1. 进入CCE控制台,在左侧导航栏中选择“集群管理”
  2. 找到需要删除的集群,单击集群卡片右上角的,并单击“删除集群”。
  3. 在弹出的“删除集群”窗口中,根据页面提示删除相关资源。
  4. 在确认框中输入“DELETE”,单击“是”,开始执行删除集群操作。

    删除集群需要花费1-3分钟,请耐心等候。集群列表中对应集群名称消失,则说明删除集群成功。

相关文档