天天看點

使用ACK和NAS快速搭建彈性NGINX網站

體驗目标

本文介紹如何在半小時内,通過阿裡雲容器ACK服務和檔案存儲NAS服務搭建一個簡單的彈性、高可用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容器化應用。

本教程七個步驟,完成前五個步驟即可實作彈性高可用的NGINX網站,最後兩個步驟驗證網站的彈性和高可用屬性。

步驟一:建立資源

步驟二:挂載檔案系統NAS到ECS伺服器

步驟三:上傳檔案到NAS

步驟四:配置NAS挂載資訊

步驟五:建立NGINX應用

步驟六:通路測試網站

步驟七:驗證服務高可用

步驟八:驗證彈性擴縮容

使用ACK和NAS快速搭建彈性NGINX網站

步驟一:開啟體驗

雲産品資源體驗位址:

https://developer.aliyun.com/adc/scenario/57f4d9ac091a4b539a261ff2ef657ff0

開啟雲産品資源

阿裡雲檔案存儲NAS是一個可共享通路,彈性擴充,高可靠,高性能的分布式檔案系統。它可以為容器提供持久化的存儲服務。在接下來的操作裡,您的網頁檔案将會被儲存在NAS檔案系統中,當容器pod被建立後即可直接調用NAS裡的檔案,并且在pod被銷毀後,NAS裡的檔案也會繼續留存。

1.使用資源提供的子賬号(可以使用浏覽器的無痕模式),登入NAS檔案系統控制台。

2.單擊左側引導欄檔案系統清單,然後單擊檔案系統 ID進入檔案系統詳情頁。

3.單擊挂載使用,檢視挂載點資訊,複制挂載指令。

使用ACK和NAS快速搭建彈性NGINX網站

4.打開終端工具,在終端中輸入連接配接指令ssh [username]@[ipaddress]。您需要将其中的username和ipaddress替換為資源提供的的ECS伺服器的公網IP。

例如:

ssh [email protected]           
使用ACK和NAS快速搭建彈性NGINX網站

指令顯示結果如下:

使用ACK和NAS快速搭建彈性NGINX網站

5.在終端中執行以下指令,挂載NAS到ECS伺服器。

安裝NFS用戶端。

sudo yum install nfs-utils           

執行第3步中複制的挂載指令,挂載NAS到ECS的/mnt目錄。

sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport 3******7.cn-shanghai.nas.aliyuncs.com:/ /mnt           

使用ACK叢集搭建NGINX服務後,在您打開網站首頁時,容器就會從NAS檔案系統中讀取這一步上傳的網頁檔案,傳回給浏覽器。在網站搭建完成後,您可以通過同樣的方法更新NAS裡的檔案。

1.在本地建立index.html檔案。

  • Windows系統:打開文本編輯器,輸入test index page for

    nginx-nas-demo,然後儲存檔案類型為HTML檔案。

  • MacOS或Linux:打開指令行工具,然後執行以下指令即可。
mkdir -p ~/Documents/nginx-nas-demo
echo "test index page for nginx-nas-demo" > ~/Documents/nginx-nas-demo/index.html           

2.下載下傳并安裝SFTP用戶端,例如:FileZilla。

3.上傳index.html檔案到NAS。

  • 輕按兩下運作FileZila。
  • 根據以下資訊,連接配接伺服器。主機:資源提供的ECS公網IP。使用者名:root密碼:資源提供的ECS密碼。端口:22。
  • 在左側目錄樹找到本地建立的index.html檔案,在右側目錄樹輸入/mnt,進入NAS目錄。
  • 将左側區域的index.html拖拽到右側區域,即可将本地檔案上傳到NAS。
使用ACK和NAS快速搭建彈性NGINX網站

4.您可以使用步驟二的方式遠端連接配接到ECS,在/mnt目錄中檢視剛上傳的index.html檔案。

使用ACK和NAS快速搭建彈性NGINX網站

要使用ACK服務挂載使用NAS,需要先配置容器存儲卷PV和存儲聲明PVC資訊,這些資訊将會在您部署NGINX應用的時候用到。

1.配置存儲卷。

進入ACK叢集清單,單擊ACK叢集名稱,進入叢集詳情頁。

單擊左側引導欄中的存儲卷。

單擊存儲卷标簽頁,然後單擊建立。

選擇NAS存儲卷類型,填寫存儲卷名稱,選擇NAS挂載點,最後單擊建立。

操作流程參見如下圖。

圖1:

使用ACK和NAS快速搭建彈性NGINX網站

圖2:

使用ACK和NAS快速搭建彈性NGINX網站

2.配置存儲聲明。

1.單擊左側導航欄中的存儲卷。
2.單擊存儲聲明,然後單擊建立。
3.根據以下資訊配置存儲聲明。           

存儲聲明類型:選擇NAS。

名稱:填寫存儲聲明名稱,例如:nas-pvc。

配置設定模式:選擇已有存儲卷。

已有存儲卷:選擇上一步建立的存儲卷。

總量:此欄對于NAS不具有實際限制意義,保留預設值即可。

使用ACK和NAS快速搭建彈性NGINX網站

1.進入叢集詳情頁單擊左側引導欄中的工作負載,在預設的無狀态标簽頁中,單擊使用鏡像建立。

2.在應用基本資訊頁面中,填寫應用名稱,然後單擊下一步。

使用ACK和NAS快速搭建彈性NGINX網站

3.容器配置。

a.  在容器配置頁面中,單擊選擇鏡像。           
使用ACK和NAS快速搭建彈性NGINX網站
b.  在彈出的對話框中,單擊搜尋,選擇Docker鏡像,填寫nginx,然後單擊搜尋。
c.  在搜尋結果中選擇nginx官方鏡像,然後單擊确定。           
使用ACK和NAS快速搭建彈性NGINX網站
d.  将容器配置頁面拉到最下方,在資料卷欄單擊增加雲存儲聲明(PersistentVolumeClaim),選擇步驟二建立的存儲聲明作為挂載源,在容器路徑一項填寫/usr/share/nginx/html/。           

說明 這項配置會将NAS挂載到容器的/usr/share/nginx/html/路徑,也就是NGINX預設存放index.html的目錄。

使用ACK和NAS快速搭建彈性NGINX網站
e.  此頁面其他配置使用預設值即可,單擊下一步按鈕繼續。           
  • 進階配置。

    a. 在進階配置頁面中,單擊服務(Service)右側的建立。

    在彈出建立服務對話框的端口映射中設定以下資訊,然後點選建立。           

名稱:http(http必須全部小寫,否則會建立失敗)。

服務端口:80。

容器端口:80。

協定:TCP。

使用ACK和NAS快速搭建彈性NGINX網站

說明 其他選項保持預設值即可。

b.  單擊路由(Ingress)右側的建立。
    在彈出的建立對話框的規則項中配置以下資訊,然後單擊建立。
           
  • 域名:您的網站域名,例如:foo.bar.com。說明 如果您沒有域名,可以先随意填寫一個測試域名。
  • 服務:選擇上一步建立的nginx-nas-svc服務。
使用ACK和NAS快速搭建彈性NGINX網站

此時路由一欄應該顯示域名與對應服務的資訊。路由功能會将使用者請求通過簡單扇出的方法,打散到多個容器節點上進行處理。

c.  勾選容器組水準伸縮後面的開啟,然後在最小副![本數處填寫2,最後單擊最下方的建立按鈕。](https://img-blog.csdnimg.cn/20201103152725698.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dhbmd5aWtlamk=,size_16,color_FFFFFF,t_70#pic_center)           

等待建立成功。

使用ACK和NAS快速搭建彈性NGINX網站

等待NAS和容器的配置完成後,您就可以使用本地電腦通路測試網站了。

1.配置辦公電腦的hosts檔案。

說明: 如果您在NGINX應用配置中,使用的是正式網站域名,并且已經通過備案,就可以跳過這個步驟,直接通過浏覽器打開網站。如果您使用的是測試域名(例如foo.bar.com),那麼就需要在本地電腦上配置hosts檔案,讓浏覽器把對域名的請求轉到ACK叢集的IP位址上。

a.  進入ACK控制台的工作負載頁面。
b.  單擊步驟三建立的NGINX服務名稱。           
使用ACK和NAS快速搭建彈性NGINX網站
c.  單擊通路方式标簽頁,将路由的端點IP位址複制到粘貼闆,這個IP位址就是公網通路網站使用的IP位址。           
使用ACK和NAS快速搭建彈性NGINX網站
d.  使用管理者權限打開本地C:\Windows\System32\drivers\etc\hosts檔案,将端點IP和步驟三種設定的域名加入hosts檔案,然後儲存退出,如下圖所示。           

說明:Linux和Mac系統請修改/etc/hosts檔案。

使用ACK和NAS快速搭建彈性NGINX網站

2.使用浏覽器打開網站。

使用ACK和NAS快速搭建彈性NGINX網站

說明:如果不能正常通路,您可以嘗試清空浏覽器緩存,或者使用無痕浏覽模式通路。

因為部署NGINX應用的時候,選擇了容器組最小副本數為2,是以在一台容器宿主節點當機的情況下,網站仍然可以由另一台容器宿主節點提供服務,保證了服務的高可用特性。

1.模拟節點故障。

a.  在叢集詳情頁單擊左側引導欄節點管理進入節點管理頁面。
b.  選擇其中2個節點,然後單擊下面操作欄節點維護在彈出的對話框中勾選排空節點,然後單擊确定。           
使用ACK和NAS快速搭建彈性NGINX網站

此時,可以看到節點狀态為不可排程。

使用ACK和NAS快速搭建彈性NGINX網站
c.  使用浏覽器打開網站,發現仍然可以正常通路。           
使用ACK和NAS快速搭建彈性NGINX網站
  1. 恢複節點。

    a. 單擊下面操作欄節點上線在彈出的對話框單擊确定。

    b. 使用浏覽器打開網站,發現仍然可以正常通路。

使用ACK和NAS快速搭建彈性NGINX網站

步驟八:驗證彈性擴容

1.檢視容器組初始狀态。

a.  進入ACK控制台的工作負載頁面,單擊步驟三建立的NGINX服務名稱。
b.  單擊容器組水準伸縮器檢視目前副本數和容器組目前目前CPU使用率。           
使用ACK和NAS快速搭建彈性NGINX網站
  1. 模拟容器高負載。

    a. 在叢集詳情頁單擊右上方通過 CloudShell 管理叢集,進入CloudShell指令行。

使用ACK和NAS快速搭建彈性NGINX網站
b.   在指令行中,執行以下指令檢視節點。
           
kubectl get pod
           
使用ACK和NAS快速搭建彈性NGINX網站
c.  執行以下指令,進入容器。           
kubectl exec -it lalala-***pod-name****-kxjbg bash
           
d.  執行以下指令,模拟容器高負載。           
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.确認自動擴容。

a.  進入ACK控制台的工作負載頁面,單擊步驟三建立的NGINX服務名稱。
b.  單擊容器組水準伸縮器檢視目前副本數和容器組目前CPU使用率。           

稍等一點時間可以看到目前CPU使用率明顯升高。

使用ACK和NAS快速搭建彈性NGINX網站

等待幾分鐘後再次檢視,發現目前副本數已經變為10。

使用ACK和NAS快速搭建彈性NGINX網站
c.  此時,使用浏覽器打開網站,發現仍然可以正常通路。           
使用ACK和NAS快速搭建彈性NGINX網站
  1. 解除容器高負載。

    a. 進入CloudShell指令行。

    b. 在指令行中執行以下指令。

繼續閱讀