部署无状态工作负载(Nginx)
您可以使用镜像快速创建一个可公网访问的单实例工作负载。本章节将指导您基于云容器引擎CCE快速部署Nginx容器应用,并管理该容器应用的全生命周期,以期让您具备将云容器引擎应用到实际项目中的能力。
前提条件
您需要创建一个至少包含一个4核8G节点的集群,且该节点已绑定弹性IP。
集群是运行工作负载的逻辑分组,包含一组云服务器资源,每台云服务器即集群中的一个节点。
创建集群的方法,请参见快速创建Kubernetes集群。
Nginx应用概述
Nginx是一款轻量级的Web服务器,您可通过CCE快速搭建nginx web服务器。
本章节将以创建Nginx应用为例,来创建一个工作负载,预计需要5分钟。
本章节执行完成后,可成功访问Nginx的网页,如下图。
![点击放大](https://support.huaweicloud.com/qs-cce/zh-cn_image_0107014188.png)
通过控制台创建Nginx
本章节将指导您通过容器镜像创建您的第一个容器工作负载。
- 登录CCE控制台。
- 单击集群进入集群控制台。
- 在左侧菜单栏选择“工作负载”,单击右上角“创建负载”。
- 填写以下参数,其它保持默认。
基本信息
- 负载类型:选择无状态负载。
- 负载名称:nginx。
- 命名空间:default。
- 实例数量:请设置为1。
容器配置
在“容器信息 > 基本信息”中单击“选择镜像”,在弹出的窗口中选择“镜像中心”,并搜索“nginx”,选择nginx镜像。
图2 选择nginx镜像服务配置
单击服务配置下的加号,创建服务(Service),用于从外部访问负载。本例将创建一个负载均衡类型的Service,请在右侧弹窗中配置如下参数。
- Service名称:输入应用发布的可被外部访问的名称,设置为:nginx。
- 访问类型:选择“负载均衡 ( LoadBalancer )”。
- 服务亲和:保持默认。
- 负载均衡器:如果已有负载均衡(ELB)实例,可以选择已有ELB,如果没有可选择“自动创建”,创建一个公网类型负载均衡器。
- 端口配置:
- 对外协议:TCP。
- 服务端口:本例中设置为8080,ELB将会使用该端口创建监听器,提供外部流量访问入口。
- 容器端口:容器中应用启动监听的端口,nginx镜像请设置为80。如需使用其他应用,该容器端口需和应用对外提供的监听端口一致。
图3 创建服务 - 单击右下角“创建工作负载”。
等待工作负载创建成功。
创建成功后在无状态负载下会显示一个运行中的工作负载。
图4 创建工作负载成功 - 获取Nginx的外部访问地址。
单击Nginx工作负载名称,进入工作负载详情页。在“访问方式”页签下可以看到nginx的IP地址,其中公网地址就是外部访问地址。图5 获取外部访问地址
- 在浏览器中输入“外部访问地址:服务端口”,即可成功访问应用,如下图所示。其中“服务端口”为端口配置步骤中进行设置。
图6 访问nginx应用
通过kubectl创建Nginx
本步骤指导您通过kubectl创建一个无状态工作负载(Deployment),并通过负载均衡类型Service将负载公开,使得其能从外网访问。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建一个名为nginx-deployment.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
- 创建deployment。
kubectl create -f nginx-deployment.yaml
回显如下表示已开始创建deployment。
deployment "nginx" created
查看deployment状态。
kubectl get deployment
deployment状态显示为Running,表示deployment已创建成功。
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 4m5s
参数解析:
- NAME:工作负载名称。
- READY:表示工作负载的可用状态,显示为“可用Pod个数/期望Pod个数”。
- UP-TO-DATE:指当前已经完成更新的副本数。
- AVAILABLE:可用的Pod个数。
- AGE:已经运行的时间。
- 创建一个名为nginx-elb-svc.yaml的描述文件。将selector修改为nginx-deployment.yaml示例应用文件中matchLabels的值(本示例为app: nginx),从而将该服务关联至后端应用。
下面示例中参数详细描述清参见负载均衡(LoadBalancer)。
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: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer
- 创建服务。
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 3d nginx LoadBalancer 10.247.130.196 **.**.**.** 80:31540/TCP 51s
- 在浏览器中输入访问地址,例如输入**.**.**.**:80。**.**.**.**为负载均衡实例IP地址,80为对应界面上的访问端口。
可成功访问nginx。
图7 通过负载均衡访问nginx