共计 6457 个字符,预计需要花费 17 分钟才能阅读完成。
介绍如何在半小时内,通过阿里云容器 ACK 服务和容器网络文件系统 CNFS 服务搭建一个简略的弹性、高可用 NGINX 网站。,11 月 9 日至 11 月 23 日期间,实现部署即可取得“TOMY 多美卡合金车模一辆”。
地址:https://developer.aliyun.com/adc/series/activity/1111
体验指标
本文介绍如何在半小时内,通过阿里云容器 ACK 服务和容器网络文件系统 CNFS 服务搭建一个简略的弹性、高可用 NGINX 网站。在实现本文的所有操作后,您将取得一个单网页的网站,用户的申请将会被打散到多个容器节点上,并且依据业务负载主动扩缩容,即便某个容器节点宕机也不会影响用户拜访。另外您还能够将本地编辑的网页疾速更新到网站上。
背景常识
本教程应用到的云产品如下:
云服务器 ECS
云服务器(Elastic Compute Service,简称 ECS)是阿里云提供的性能卓越、稳固牢靠、弹性扩大的 IaaS(Infrastructure as a Service)级别云计算服务。云服务器 ECS 免去了您洽购 IT 硬件的后期筹备,让您像应用水、电、天然气等公共资源一样便捷、高效地应用服务器,实现计算资源的即开即用和弹性伸缩。阿里云 ECS 继续提供创新型服务器,解决多种业务需要,助力您的业务倒退。
文件存储 NAS
阿里云文件存储(Network Attached Storage,简称 NAS)是面向阿里云 ECS 实例、E-HPC 和容器服务等计算节点的文件存储服务。NAS 提供了简略的可扩大文件存储以供与 ECS 配合应用,多个 ECS 实例能够同时拜访 NAS 文件系统,并且存储容量会随着您增加和删除文件而主动弹性增长和膨胀,为在多个实例或服务器上运行的工作负载和应用程序提供通用数据源。
容器服务 Kubernetes 版
阿里云容器服务 Kubernetes 版 ACK(Alibaba Cloud Container Service for Kubernetes)是寰球首批通过 Kubernetes 一致性认证的服务平台,提供高性能的容器利用治理服务,反对企业级 Kubernetes 容器化利用的生命周期治理,让您轻松高效地在云端运行 Kubernetes 容器化利用。
容器网络文件系统 CNFS
传统的共享文件系统存在短少容量配额的准确管制、无奈复原误删文件、缺失存储卷容量性能等监控指标、无平安加密及小文件读写提早等问题。阿里云容器服务 ACK 推出了容器网络文件系统 CNFS 晋升 NAS 文件系统的性能,QoS 管制。阿里云容器服务应用容器网络文件系统 CNFS(Container Network File System),将阿里云的文件存储形象为一个 K8s 对象(CRD)进行独立治理,包含创立、删除、形容、挂载,监控及扩容等运维操作。
本教程七个步骤,实现前六个步骤即可实现弹性高可用的 NGINX 网站,最初两个步骤验证网站的弹性和高可用属性。
步骤一:创立资源
步骤二:挂载文件系统 NAS 到 ECS 服务器
步骤三:上传文件到 NAS
步骤四:应用 CNFS 托管 NAS 文件系统
步骤五:创立 NGINX 利用
步骤六:拜访测试网站
步骤七:验证服务高可用
步骤八:验证弹性扩缩容
网站整体架构如下图:
体验筹备
体验需应用本人的账户开明以上服务
ECS 资源地址
挂载文件系统 NAS 到 ECS 服务器
阿里云文件存储 NAS 是一个可共享拜访,弹性扩大,高牢靠,高性能的分布式文件系统。它能够为容器提供长久化的存储服务。在接下来的操作里,您的网页文件将会被保留在 NAS 文件系统中,当容器 pod 被创立后即可间接调用 NAS 里的文件,并且在 pod 被销毁后,NAS 里的文件也会持续留存。
1. 双击关上虚构桌面的 Firefox ESR 浏览器,在 RAM 用户登录框中点击“下一步”,复制云产品资源列表中子用户明码,粘按 CTRL+ V 把明码粘贴到明码输区,登陆子账户(后续在远程桌面里的粘贴操作均应用 CTRL + V 快捷键)。
2. 复制以下 NAS 文件系统控制台地址,在 FireFox 浏览器关上新页签,粘贴并拜访 NAS 文件系统控制台。
https://nasnext.console.aliyu…
3. 在概览页面中,单击文件系统 > 文件系统列表。
4. 在文件系统列表页面,切换到资源所在地区。
阐明 :
参考如下图片切换地区到华北 2(北京)。
5. 在文件系统列表页面,单击指标 NAS 实例文件系统 ID。
6. 在文件系统详情页,单击挂载应用。
7. 在挂载应用页签,单击指标挂载点操作列的挂载。
8. 在挂载到 ECS 对话框,ECS 实例抉择云产品资源列表中的 ECS 实例,挂载门路设置为 /mnt,单击挂载。
返回如下页面,待挂载状态为已挂载,示意 NAS 已胜利挂载到 ECS 上。
上传文件到 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
应用 CNFS 托管 NAS 文件系统
传统的共享文件系统存在短少容量配额的准确管制、无奈复原误删文件、缺失存储卷容量性能等监控指标、无平安加密及小文件读写提早等问题。容器网络文件系统 CNFS 晋升 NAS 文件系统的性能,QoS 管制。
要应用 ACK 服务挂载应用 NAS,须要先配置容器存储卷 PV 和存储申明 PVC 信息,这些信息将会在您部署 NGINX 利用的时候用到。
应用已有的 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
2. 复制如下命令,在 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
3. 复制如下命令,在 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
4. 在 CloudShell 上方菜单栏中,单击 图标,敞开 CloudShell。
5. 在切换回容器服务 ACK 控制台页面。在左侧导航栏中,单击存储 > 存储卷。
返回如下页面,示意 PV 创立胜利。
6. 在存储卷页面左侧控制台,单击存储 > 存储类。
返回如下页面,示意 PVC 创立胜利。
7. 点击浏览器右侧,切换至 Web Terminal。
8. 执行如下命令,进入 mnt 目录。
cd /mnt
9. 执行如下命令,查看 mnt 目录。
ls
10. 将如下命令中的 /nas-xxxxx 替换成您的 mnt 目录下的存储卷名称,而后执行,将 index.html 挪动到此目录下。
mv index.html nas-xxxxx
创立 NGINX 利用
1 点击体验实验室右侧图标,切换到远程桌面操作界面。
2 在存储类页面左侧控制台,单击工作负载 > 无状态。
3 在无状态页面,单击应用镜像创立。
4 在利用根本信息页签,设置利用名称为 nginx-nas,单击下一步。
5 在容器配置页签,实现以下配置。
1)在根本配置区域,单击抉择镜像。
2)在镜像抉择对话框中,单击搜寻,抉择 Docker 镜像,在搜寻框中输出 nginx,单击搜寻。
3)在镜像抉择对话框中,单击 nginx 镜像,而后单击确定。
4)在数据卷区域,单击减少云存储申明(PersistentVolumeClaim),挂载源抉择为步骤二中创立的存储申明(即 cnfs-nas-pvc),容器门路设置为 /usr/share/nginx/html/。在配置概述区域,单击下一步。
阐明:
数据卷配置会将 NAS 挂载到容器的 /usr/share/nginx/html/ 门路,也就是 NGINX 默认寄存 index.html 的目录。
6 在高级配置页签,实现以下配置。
1)在拜访设置区域,单击服务(Service)右侧的创立。
2)在创立服务对话框的端口映射配置中,名称设置为 http,服务端口设置为 80,容器端口设置为 80,其余选项放弃默认值,单击创立。
留神:
名称 http 必须全副小写,否则会创立失败。
3)在拜访设置区域,单击路由(Ingress)右侧的创立。
4)在创立对话框的规定配置中,设置域名和名称,其余选项放弃默认值,单击创立。
参数阐明:
域名:您的网站域名,例如:foo.bar.com。
阐明:
如果您没有域名,能够先随便填写一个测试域名即可。
名称:抉择上一步创立的 nginx-nas-svc 服务。
路由创立实现后,您能够看到路由一栏应该显示域名与对应服务的信息。路由性能会将用户申请通过简略扇出的办法,打散到多个容器节点上进行解决。
5)在伸缩配置区域,单击指标伸缩的开启,最小正本数设置为 2,最初单击最下方的创立。
7 在高级配置页签下方,单击创立。
返回如下页面,期待所有利用工作创立状态为胜利,示意您的利用曾经创立实现。
拜访测试网站
期待 NAS 和容器的配置实现后,您就能够应用本地电脑拜访测试网站了。
配置办公电脑的 hosts 文件。
阐明:
如果您在 NGINX 利用配置中,应用的是正式网站域名,并且曾经通过备案,您就能够跳过这个步骤,间接通过浏览器关上网站。如果您应用的是测试域名(例如 foo.bar.com),那么就须要在本地电脑上配置 hosts 文件,让浏览器把对域名的申请转到 ACK 集群的 IP 地址上。
1. 在创立实现页签中,单击查看利用详情。
2)在利用详情页面,单击拜访形式。
3)复制路由的端点 IP 地址到粘贴板,这个 IP 地址就是公网拜访网站应用的 IP 地址。
4)应用管理员权限关上您本地的 C:\Windows\System32\drivers\etc\hosts 文件,将端点 IP 和步骤五中设置的域名(例如 foo.bar.com)退出 hosts 文件,而后保留退出,如下图所示。
阐明:
如果您本地机器是 Linux 和 Mac 零碎,请批改 /etc/hosts 文件。
- 应用浏览器关上网站。
阐明 :
如果您不能失常拜访,您能够尝试清空浏览器缓存,或者应用无痕浏览模式拜访。
验证服务高可用
因为部署 NGINX 利用的时候,抉择了容器组最小正本数为 2,所以在一台容器宿主节点宕机的状况下,网站依然能够由另一台容器宿主节点提供服务,保障了服务的高可用个性。
1、模仿节点故障。
1)切换回容器服务 ACK 控制台页面。在左侧导航栏中,单击节点治理 > 节点。
2)节点页面,抉择任意 2 个节点,而后单击上面操作栏排水 / 设置不可调度。
3)在水 / 设置不可调度对话框中,勾选排空节点,而后单击确定。
此时,能够看到节点状态为不可调度。
4)应用本机浏览器关上网站,发现依然能够失常拜访。
2、复原节点。
1)单击上面操作栏节点上线在弹出的对话框单击确定。
2)应用浏览器关上网站,发现依然能够失常拜访。
验证弹性扩容
- 查看容器组初始状态。
1)在节点页面左侧导航栏中,单击无状态。
2)在无状态页面,单击利用名称。
3)在利用详情页面,单击容器伸缩。
返回如下页面,您能够查看以后正本数和容器组以后以后 CPU 使用率。
- 模仿容器高负载。
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
- 确认主动扩容。
1)在集群详情页面左侧导航栏中,单击无状态。
2)在无状态页面,单击利用名称。
3)在利用详情页面,单击容器伸缩。
4)稍等一点工夫,您能够看到以后 CPU 使用率显著升高。
期待几分钟后再次查看,发现以后正本数曾经变为 10。
c. 此时,应用浏览器关上网站,发现依然能够失常拜访。
- 解除容器高负载。
a. 进入 CloudShell 命令行。
b. 在命令行中执行以下命令。
# 退出容器
exit
# 删除
kubectl delete pod lalala-***pod-name****-kxjbg
- 确认主动缩容。
单击容器组程度伸缩器查看以后正本数和容器组以后以后 CPU 使用率。
能够看到 CPU 使用率和正本数显著降落。