快速搭建高可用网站服务

本文涉及的产品
轻量应用服务器 2vCPU 4GiB,适用于搭建Web应用/小程序
轻量应用服务器 2vCPU 4GiB,适用于网站搭建
轻量应用服务器 2vCPU 1GiB,适用于搭建电商独立站
简介: 本文介绍如何在半小时内,通过阿里云容器ACK服务和容器网络文件系统CNFS服务搭建一个简单的弹性、高可用NGINX网站。

快速搭建高可用网站服务


1. 创建资源

  1. 在页面中间,单击创建资源,创建所需资源。
  2. 在页面左侧导航栏中,单击云产品资源列表,查看本次实验资源相关信息。

说明:

资源创建过程需要8~10分钟。完成实验资源的创建后,您可以在 云产品资源 列表查看已创建的资源信息,例如:IP地址、子用户名称和子用户密码等。


2. 挂载文件系统NAS到ECS服务器

阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。它可以为容器提供持久化的存储服务。在接下来的操作里,您的网页文件将会被保存在NAS文件系统中,当容器pod被创建后即可直接调用NAS里的文件,并且在pod被销毁后,NAS里的文件也会继续留存。

  1. 双击打开虚拟桌面的Chromium网页浏览器,在RAM用户登录框中点击“下一步”,复制云产品资源列表中子用户密码,粘按CTRL+V把密码粘贴到密码输区,登陆子账户(后续在远程桌面里的粘贴操作均使用CTRL + V快捷键)。

说明:

如果远程桌面浏览器无法打开,可在本机浏览器上【打开新的无痕浏览器】,复制如下链接登录实验提供的RAM子用户。

https://signin.aliyun.com/login.htm?callback=https%3A%2F%2Fecs.console.aliyun.com%2Fserver%2Fregion%2Fcn-shanghai#/main

  1. 复制以下NAS文件系统控制台地址,在FireFox浏览器打开新页签,粘贴并访问NAS文件系统控制台
https://nasnext.console.aliyun.com/
  1. 概览页面中,单击文件系统>文件系统列表

  1. 文件系统列表页面,切换到资源所在地域。

说明 :

参考如下图片切换地域到华北2(北京)。

  1. 文件系统列表页面,单击目标NAS实例文件系统ID

  1. 在文件系统详情页,单击挂载使用

  1. 挂载使用页签, 单击目标挂载点操作列的挂载

  1. 挂载到ECS对话框,ECS实例选择云产品资源列表中的ECS实例,挂载路径设置为/mnt,单击挂载

返回如下页面,待挂载状态为已挂载,表示NAS已成功挂载到ECS上。


3. 上传文件到NAS

使用ACK集群搭建NGINX服务后,在您打开网站首页时,容器就会从NAS文件系统中读取这一步上传的网页文件,返回给浏览器。在网站搭建完成后,您可以通过同样的方法更新NAS里的文件。

1、点击浏览器右侧 ,切换至Web Terminal

2、输入以下命令,创建并上传index.html文件至Nas。

echo "test index page for nginx-nas-demo" > /mnt/index.html

3、 输入以下命令,在/mnt目录中查看刚上传的index.html文件。

ls /mnt
cat /mnt/index.html


4. 使用CNFS托管NAS文件系统

传统的共享文件系统存在缺少容量配额的精确控制、无法恢复误删文件、缺失存储卷容量性能等监控指标、无安全加密及小文件读写延迟等问题。容器网络文件系统CNFS提升NAS文件系统的性能,QoS控制。

要使用ACK服务挂载使用NAS,需要先配置容器存储卷PV和存储声明PVC信息,这些信息将会在您部署NGINX应用的时候用到。

  1. 使用已有的NAS文件系统创建CNFS。

1)点击体验实验室右侧图标,切换到远程桌面操作界面。

2)复制容器服务ACK控制台地址,在FireFox浏览器打开新页签,粘贴并访问容器服务ACK控制台。

https://cs.console.aliyun.com/

3)在集群列表页面中,单击目标集群名称。

4)在集群信息页面中,单击通过CloudShell管理集群

返回如下页面,代表你已打开CloudShell。

5)在在虚拟桌面左下角,单击 图标。

6)在菜单栏中,单击附件>Mousepad

返回如下页面,表示你已成功打开Mousepad。

7)复制如下命令,粘贴到Mousepad。在Mousepad中将命令的parameters.server参数替换成您的NAS的挂载点URL地址,然后复制Mousepad中的所有命令。

注意:

parameters.server参数需要替换成您的NAS的挂载点URL地址。NAS的挂载点URL地址可以通过NAS文件系统控制台>文件系统列表>目标NAS>挂载使用>通过命令行挂载到ECS>挂载NFS文件系统中的sudo mount的参数中查到。

# 当NAS文件系统存在时,加载已创建的NAS文件系统
cat <<EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
  name: cnfs-nas-filesystem
spec:
  description: "cnfs"
  type: nas
  reclaimPolicy: Retain
  parameters:
    server: 17f7e4****-hlm35.cn-beijing.nas.aliyuncs.com
EOF

8)CloudShell中,右键粘贴,将Mousepad中的命令粘贴到CloudShell,然后执行。

9)复制如下命令,在CloudShell中,右键粘贴并执行,查看详细信息。

kubectl get cnfs/cnfs-nas-filesystem -o yaml

复制如下命令,在CloudShell中,右键粘贴并执行,通过创建动态PV绑定NAS文件系统。

cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-nas-cnfs
mountOptions:
  - nolock,tcp,noresvport
  - vers=3
parameters:
  volumeAs: subpath
  containerNetworkFileSystem: cnfs-nas-filesystem
  path: "/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
allowVolumeExpansion: true
EOF

复制如下命令,在CloudShell中,右键粘贴并执行,创建存储声明PVC信息

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cnfs-nas-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: alibabacloud-nas-cnfs
  resources:
    requests:
      storage: 70Gi
EOF

CloudShell上方菜单栏中,单击 图标,关闭CloudShell

在切换回容器服务ACK控制台页面。在左侧导航栏中,单击存储>存储卷

返回如下页面,表示PV创建成功。

存储卷页面左侧控制台,单击存储>存储类

返回如下页面,表示PVC创建成功。

7. 点击浏览器右侧,切换至Web Terminal。

8. 执行如下命令,进入mnt目录。

cd /mnt

9. 执行如下命令,查看mnt目录。

ls

10. 将如下命令中的/nas-xxxxx替换成您的mnt目录下的存储卷名称,然后执行,将index.html移动到此目录下。

mv index.html nas-xxxxx


5. 创建NGINX应用

  1. 点击体验实验室右侧图标,切换到远程桌面操作界面。
  2. 在存储类页面左侧控制台,单击工作负载>无状态

无状态页面,单击使用镜像创建

应用基本信息页签,设置应用名称nginx-nas,单击下一步

容器配置页签,完成以下配置。

1)在基本配置区域,单击选择镜像

2)在镜像选择对话框中,单击搜索,选择Docker镜像,在搜索框中输入nginx,单击搜索

3)在镜像选择对话框中,单击nginx镜像,然后单击确定

4)在数据卷区域,单击增加云存储声明(PersistentVolumeClaim)挂载源选择为步骤二中创建的存储声明(即cnfs-nas-pvc),容器路径设置为/usr/share/nginx/html/。在配置概述区域,单击下一步

说明 :

数据卷配置会将NAS挂载到容器的/usr/share/nginx/html/路径,也就是NGINX默认存放index.html的目录。

高级配置页签,完成以下配置。

1)在访问设置区域,单击服务(Service)右侧的创建

2)在创建服务对话框的端口映射配置中,名称设置为http服务端口设置为80容器端口设置为80,其他选项保持默认值,单击创建

注意 :

名称http必须全部小写,否则会创建失败。

3)在访问设置区域,单击路由(Ingress)右侧的创建

4)在创建对话框的规则配置中,设置域名名称,其他选项保持默认值,单击创建

参数说明:

域名:您的网站域名,例如:foo.bar.com。

说明 :

如果您没有域名,可以先随意填写一个测试域名即可。

名称:选择上一步创建的nginx-nas-svc服务

路由创建完成后,您可以看到路由一栏应该显示域名与对应服务的信息。路由功能会将用户请求通过简单扇出的方法,打散到多个容器节点上进行处理。

5)在伸缩配置区域,单击指标伸缩开启最小副本数设置为2,最后单击最下方的创建


返回如下页面,等待所有应用任务创建状态为成功,表示您的应用已经创建完成。


6. 访问测试网站

等待NAS和容器的配置完成后,您就可以使用本地电脑访问测试网站了。

  1. 配置办公电脑的hosts文件。

说明:

如果您在NGINX应用配置中,使用的是正式网站域名,并且已经通过备案,您就可以跳过这个步骤,直接通过浏览器打开网站。如果您使用的是测试域名(例如foo.bar.com),那么就需要在本地电脑上配置hosts文件,让浏览器把对域名的请求转到ACK集群的IP地址上。

创建完成页签中,单击查看应用详情

2)在应用详情页面,单击访问方式

3)复制路由的端点IP地址到粘贴板,这个IP地址就是公网访问网站使用的IP地址。

4)使用管理员权限打开您本地的C:\Windows\System32\drivers\etc\hosts文件,将端点IP和步骤五中设置的域名(例如foo.bar.com)加入hosts文件,然后保存退出,如下图所示。

说明 :

如果您本地机器是Linux和Mac系统,请修改/etc/hosts文件。

2. 使用浏览器打开网站。

说明 :

如果您不能正常访问,您可以尝试清空浏览器缓存,或者使用无痕浏览模式访问。

7. 验证服务高可用

因为部署NGINX应用的时候,选择了容器组最小副本数为2,所以在一台容器宿主节点宕机的情况下,网站仍然可以由另一台容器宿主节点提供服务,保证了服务的高可用特性。

1、模拟节点故障。

1)切换回容器服务ACK控制台页面。在左侧导航栏中,单击节点管理>节点

2)节点页面,选择任意2个节点,然后单击下面操作栏排水/设置不可调度

3)在水/设置不可调度对话框中,勾选排空节点,然后单击确定

此时,可以看到节点状态为不可调度

4)使用本机浏览器打开网站,发现仍然可以正常访问。

2、 恢复节点。

1)单击下面操作栏节点上线在弹出的对话框单击确定

2)使用浏览器打开网站,发现仍然可以正常访问。

8. 验证弹性扩容

1. 查看容器组初始状态。

1)在节点页面左侧导航栏中,单击无状态

2)在无状态页面,单击应用名称。

3)在应用详情页面,单击容器伸缩

返回如下页面,您可以查看当前副本数和容器组当前当前CPU使用率。

2. 模拟容器高负载。

1)在容器伸缩页签的左侧导航栏中,单击集群信息

2)在集群详情页面,单击通过CloudShell管理集群

3)复制如下命令,在CloudShell中,右键粘贴并执行,执行以下命令查看节点。

kubectl get pod

4)复制如下命令,在CloudShell中,右键粘贴并执行,进入容器

kubectl exec -it lalala-***pod-name****-kxjbg bash

5)复制如下命令,在CloudShell中,右键粘贴并执行,模拟容器高负载。

fulload() { dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null & }; fulload; read

3. 确认自动扩容。

1)在集群详情页面左侧导航栏中,单击无状态

2)在无状态页面,单击应用名称。

3)在应用详情页面,单击容器伸缩

4)稍等一点时间,您可以看到当前CPU使用率明显升高。

等待几分钟后再次查看,发现当前副本数已经变为10。

c. 此时,使用浏览器打开网站,发现仍然可以正常访问。

4. 解除容器高负载。

a. 进入CloudShell命令行

b. 在命令行中执行以下命令。

# 退出容器
exit
# 删除
kubectl delete pod lalala-***pod-name****-kxjbg

5. 确认自动缩容。

单击容器组水平伸缩器查看当前副本数和容器组当前当前CPU使用率。

可以看到CPU使用率和副本数明显下降。


实验链接https://developer.aliyun.com/adc/scenario/57f4d9ac091a4b539a261ff2ef657ff0

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
SQL 数据可视化 BI
Quick BI产品测评:从数据连接到智能分析的全流程体验
瓴羊智能商业分析-Quick BI是阿里云旗下的云端智能BI平台,连续五年入选Gartner ABI魔力象限。它提供从数据接入到决策的全链路服务,支持零代码操作、40+可视化组件与OLAP分析,实现跨终端呈现。其创新点包括云原生架构、企业级安全体系及智能决策引擎,适用于零售、金融等行业。评测中,通过免费试用与官方文档,体验了数据准备、仪表板搭建及智能小Q功能,发现智能化能力强大但部分文档需更新优化。
648 67
|
人工智能 测试技术 API
AI计算机视觉笔记二十 九:yolov10竹签模型,自动数竹签
本文介绍了如何在AutoDL平台上搭建YOLOv10环境并进行竹签检测与计数。首先从官网下载YOLOv10源码并创建虚拟环境,安装依赖库。接着通过官方模型测试环境是否正常工作。然后下载自定义数据集并配置`mycoco128.yaml`文件,使用`yolo detect train`命令或Python代码进行训练。最后,通过命令行或API调用测试训练结果,并展示竹签计数功能。如需转载,请注明原文出处。
|
开发工具 数据安全/隐私保护 git
git: 修改gitlab仓库提交地址
git: 修改gitlab仓库提交地址
688 0
|
监控 安全 Java
手把手带你实战 AGP 7.x ASM 字节码插桩
本文介绍了如何使用 AGP 7.0 推荐的 Transform Action API 来实现 ASM 插桩。
1763 0
手把手带你实战 AGP 7.x ASM 字节码插桩
|
人工智能 安全 Java
HarmonyOS鸿蒙操作系统架构
HarmonyOS鸿蒙操作系统架构
826 1
|
iOS开发
Flutter - 底部导航详解与案例示范
Flutter - 底部导航详解与案例示范
466 0
|
小程序 前端开发 Java
基于微信小程序的鲜花预定系统的设计与实现
基于微信小程序的鲜花预定系统的设计与实现
547 0
|
存储 机器学习/深度学习 缓存
一文入门推荐系统——推荐系统实践读书笔记(下)
一文入门推荐系统——推荐系统实践读书笔记(下)
|
安全 网络协议 网络安全
网络扫描与网络监听
网络扫描与网络监听
423 0
|
前端开发 JavaScript Java
Java 获取远程excel内容-修改excel内容
讲述Java获取远程excel内容,并修改excel中指定列内容并返回新的excel

热门文章

最新文章