介紹如何在半小時内,通過阿裡雲容器ACK服務和容器網絡檔案系統CNFS服務搭建一個簡單的彈性、高可用NGINX網站。,11 月 9 日至 11 月 23 日期間,完成部署即可獲得“TOMY 多美卡合金車模一輛”。
體驗目标
本文介紹如何在半小時内,通過阿裡雲容器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.aliyun.com/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)在叢集詳情頁面左側導航欄中,單擊無狀态。
4)稍等一點時間,您可以看到目前CPU使用率明顯升高。
等待幾分鐘後再次檢視,發現目前副本數已經變為10。
c. 此時,使用浏覽器打開網站,發現仍然可以正常通路。
- 解除容器高負載。
a. 進入CloudShell指令行。
b. 在指令行中執行以下指令。
# 退出容器
exit
# 删除
kubectl delete pod lalala-***pod-name****-kxjbg
- 确認自動縮容。
單擊容器組水準伸縮器檢視目前副本數和容器組目前目前CPU使用率。
可以看到CPU使用率和副本數明顯下降。