在CCE Autopilot集群中部署Nginx工作负载
CCE Autopilot集群是云容器引擎服务推出的Serverless版集群,支持智能化版本升级、漏洞自动修复和智能调参等技术,能够为您提供更智能的使用体验。同时,CCE Autopilot集群采用底层统一资源池技术,您无需管理和维护底层资源设施的分配和扩展,可以有效降低运维成本。底层统一资源池技术支持故障快速隔离和修复,能够确保应用的持续稳定运行,提升应用的可靠性。
Nginx是一款高性能的开源HTTP服务器和反向代理服务器,广泛用于处理高并发、负载均衡和静态资源服务。在集群中部署Nginx工作负载,可以通过负载均衡和反向代理有效地分配流量,确保高可用性和容错性。它还能够简化微服务架构中的流量管理、安全控制和API网关功能,提升系统的灵活性和扩展性。
本示例以部署Nginx工作负载为例,帮助您了解如何创建CCE Autopilot集群以及如何在集群中部署工作负载,整体架构请参见图1 方案架构。
操作流程
操作步骤 |
步骤说明 |
费用说明 |
---|---|---|
您需要注册华为账号,并为账号充值。 |
不涉及费用。 |
|
当您的账号在当前区域中首次使用CCE时,您需要为CCE进行授权。 |
不涉及费用。 |
|
在CCE服务中创建CCE Autopilot集群,以提供更简化的Kubernetes服务。 |
涉及集群管理和终端节点等费用,具体请参见集群计费说明。 |
|
在集群中创建工作负载,并为其创建负载均衡类型的服务,然后您就可以从公网访问您的工作负载。 |
||
如果您在完成实践后不需要继续使用集群,请及时清理资源以免产生额外扣费。 |
不涉及费用。 |
步骤一:首次开通CCE并进行授权
由于CCE在运行中对计算、存储、网络以及监控等各类云服务资源都存在依赖关系,因此当您首次登录CCE控制台时,CCE将自动请求获取当前区域下的云资源权限,从而更好地为您提供服务。如果您在当前区域已完成授权,可忽略本步骤。
- 使用华为账号登录CCE控制台。
- 单击控制台左上角的,选择“区域”,本示例使用区域为“华东-上海一”。
- 在首次登录某个区域的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集群。
- 进入CCE控制台。
- 如果您的账号在当前区域未创建过集群,请在当前页面单击“购买集群”或“购买CCE Autopilot集群”,进入购买页。
- 如果您的账号在当前区域已创建过集群,请在左侧菜单栏选择集群管理,单击右上角“购买集群”,进入购买页。
- 配置集群基础信息,具体的参数示例请参见图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 集群网络信息 参数
示例
参数说明
虚拟私有云
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网关计费说明。
- 单击“下一步:插件选择”,选择创建集群时需要安装的插件。
本示例中,仅选择默认安装插件,即CoreDNS域名解析和Kubernetes Metrics Server插件。
- 单击“下一步:插件配置”,对选择的插件进行配置,默认插件无需配置。
- 单击“下一步:确认配置”,显示集群资源清单,确认无误后,单击“提交”。
创建集群预计需要5-10分钟,请耐心等待。创建成功后,集群管理中对应集群的状态为运行中。
图4 集群运行中
步骤三:部署并访问Nginx工作负载
在集群中创建Nginx工作负载,将应用程序或服务部署到容器环境中,实现资源的高效利用和自动化管理。同时,为该工作负载创建负载均衡类型的服务,使您能够从公网访问Nginx。本节介绍两种方式部署并访问Nginx工作负载,包括控制台方式和kubectl命令行方式。
- 单击新建的集群名称,进入集群控制台。
- 在左侧菜单栏中选择“工作负载”,单击右上角“创建工作负载”,进入创建页。
- 配置工作负载基本信息,具体参数示例请参见图5和表4。
本示例中仅解释必要参数,其他参数保留默认值。关于其他参数的详细说明,请参见创建工作负载,您可以根据工作负载类型选择适合的参考文档。
表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。
- 配置工作负载容器信息,具体参数示例请参见图6和表5。
本示例中仅解释必要参数,其他参数保留默认值。关于其他参数的详细说明,请参见创建工作负载,您可以根据工作负载类型选择适合的参考文档。
- 单击“服务配置”下的,进入创建服务页面,配置工作负载服务信息,具体参数示例请参见图7和表6。
本示例仅解释必要参数,其他参数保留默认值。关于其他参数的详细说明,请参见服务(Service),您可以根据服务类型选择适合的参考文档。
表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将会使用该端口创建监听器,提供外部流量访问入口,可自定义。
- 单击右下角“创建工作负载”。
创建成功后,无状态工作负载列表中对应工作负载的状态为运行中。
图8 工作负载运行中
- 单击Nginx工作负载名称,进入工作负载详情页,获取Nginx的外部访问地址。“访问方式”页签中,“负载均衡公网IP:访问端口”即为外部访问地址。其中,“负载均衡公网IP”为5中ELB实例的公网地址,“访问端口”为5中的“服务端口”。
图9 访问方式
- 在浏览器中输入“负载均衡公网IP:访问端口”,即可成功访问应用。
图10 访问应用
该步骤涉及命令行操作,您可以使用以下两种方式进行相关操作。
- 通过集群内命令行工具进行操作:该命令行工具已经配置kubectl命令,并已连接集群,更多信息请参见通过CloudShell连接集群。
- 通过ECS虚拟机进行操作:您需要购买一台Linux系统的ECS虚拟机,该ECS需与集群处于同一VPC,并绑定弹性公网IP,具体操作请参见快速购买和使用Linux ECS。如果已有满足条件的ECS,则无需购买。此外,您还需要安装kubectl命令,并通过kubectl连接集群。
以第一种方法为例,介绍如何使用kubectl命令行方式创建Nginx工作负载。
- 单击新建的集群名称,进入集群控制台。
- 单击右上角“命令行工具”,进入CloudShell页面。
目前,只有部分区域支持CloudShell连接集群,具体情况请以控制台为准。如果区域不支持,请通过ECS虚拟机进行操作。
图11 CloudShell
- 执行以下命令,创建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保存。
- 执行以下命令,创建工作负载。
kubectl create -f nginx-deployment.yaml
回显如下,表示已经开始创建工作负载。
deployment.apps/nginx created
- 执行以下命令,查看工作负载状态。
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
工作负载已经运行的时间。
- 执行以下命令,创建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。
- 执行以下命令,创建服务。
kubectl create -f nginx-elb-svc.yaml
回显如下,表示服务已创建。
service/nginx created
- 执行以下命令,查看服务。
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
- 在浏览器中输入“外部访问地址:服务端口”,即可成功访问应用。其中外部访问地址为EXTERNAL-IP对应的第一个IP地址,服务端口为8080。
图12 访问应用
后续操作:释放资源
如果您无需继续使用集群,请及时释放资源,避免产生额外的费用。
- 删除集群会删除集群下工作负载和服务,相关业务将无法恢复。
- 集群关联创建的VPC级别的资源(如终端节点、NAT网关和SNAT出网EIP等),删除集群时默认保留,请确认其他集群或者地方没有重用该资源,再进行删除操作。
- 进入CCE控制台,在左侧导航栏中选择“集群管理”。
- 找到需要删除的集群,单击集群卡片右上角的,并单击“删除集群”。
- 在弹出的“删除集群”窗口中,根据页面提示删除相关资源。
- 在确认框中输入“DELETE”,单击“是”,开始执行删除集群操作。
删除集群需要花费1-3分钟,请耐心等候。集群列表中对应集群名称消失,则说明删除集群成功。