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

bainana發表於2020-11-03

場景介紹

本文介紹如何在半小時內,通過阿里雲容器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應用
步驟六:訪問測試網站
步驟七:驗證服務高可用
步驟八:驗證彈性擴縮容
在這裡插入圖片描述

步驟一:開啟體驗

雲產品資源體驗地址:https://developer.aliyun.com/adc/scenario/57f4d9ac091a4b539a261ff2ef657ff0

開啟雲產品資源

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

阿里雲檔案儲存NAS是一個可共享訪問,彈性擴充套件,高可靠,高效能的分散式檔案系統。它可以為容器提供持久化的儲存服務。在接下來的操作裡,您的網頁檔案將會被儲存在NAS檔案系統中,當容器pod被建立後即可直接呼叫NAS裡的檔案,並且在pod被銷燬後,NAS裡的檔案也會繼續留存。
1.使用資源提供的子賬號(可以使用瀏覽器的無痕模式),登入NAS檔案系統控制檯。
2.單擊左側引導欄檔案系統列表,然後單擊檔案系統 ID進入檔案系統詳情頁。
3.單擊掛載使用,檢視掛載點資訊,複製掛載命令。
在這裡插入圖片描述
4.開啟終端工具,在終端中輸入連線命令ssh [username]@[ipaddress]。您需要將其中的username和ipaddress替換為資源提供的的ECS伺服器的公網IP。
例如:

ssh root@123.123.123.123

在這裡插入圖片描述
命令顯示結果如下:
在這裡插入圖片描述
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

步驟三:上傳檔案到NAS

使用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。
    在這裡插入圖片描述
    4.您可以使用步驟二的方式遠端連線到ECS,在/mnt目錄中檢視剛上傳的index.html檔案。
    在這裡插入圖片描述

步驟四:配置NAS掛載資訊

要使用ACK服務掛載使用NAS,需要先配置容器儲存卷PV和儲存宣告PVC資訊,這些資訊將會在您部署NGINX應用的時候用到。
1.配置儲存卷。
進入ACK叢集列表,單擊ACK叢集名稱,進入叢集詳情頁。
單擊左側引導欄中的儲存卷。
單擊儲存卷標籤頁,然後單擊建立。
選擇NAS儲存卷型別,填寫儲存卷名稱,選擇NAS掛載點,最後單擊建立。
操作流程參見如下圖。
圖1:
在這裡插入圖片描述
圖2:
在這裡插入圖片描述
2.配置儲存宣告。
1.單擊左側導航欄中的儲存卷。
2.單擊儲存宣告,然後單擊建立。
3.根據以下資訊配置儲存宣告。
儲存宣告型別:選擇NAS。
名稱:填寫儲存宣告名稱,例如:nas-pvc。
分配模式:選擇已有儲存卷。
已有儲存卷:選擇上一步建立的儲存卷。
總量:此欄對於NAS不具有實際限制意義,保留預設值即可。
在這裡插入圖片描述

步驟五:建立NGINX應用

1.進入叢集詳情頁單擊左側引導欄中的工作負載,在預設的無狀態標籤頁中,單擊使用映象建立。

2.在應用基本資訊頁面中,填寫應用名稱,然後單擊下一步。
在這裡插入圖片描述
3.容器配置。
a. 在容器配置頁面中,單擊選擇映象。
在這裡插入圖片描述
b. 在彈出的對話方塊中,單擊搜尋,選擇Docker映象,填寫nginx,然後單擊搜尋。
c. 在搜尋結果中選擇nginx官方映象,然後單擊確定。
在這裡插入圖片描述
d. 將容器配置頁面拉到最下方,在資料卷欄單擊增加雲端儲存宣告(PersistentVolumeClaim),選擇步驟二建立的儲存宣告作為掛載源,在容器路徑一項填寫/usr/share/nginx/html/。
說明 這項配置會將NAS掛載到容器的/usr/share/nginx/html/路徑,也就是NGINX預設存放index.html的目錄。

在這裡插入圖片描述
e. 此頁面其他配置使用預設值即可,單擊下一步按鈕繼續。

  • 高階配置。
    a. 在高階配置頁面中,單擊服務(Service)右側的建立。
    在彈出建立服務對話方塊的埠對映中設定以下資訊,然後點選建立。
    名稱:http(http必須全部小寫,否則會建立失敗)。
    服務埠:80。
    容器埠:80。
    協議:TCP。
    在這裡插入圖片描述
    說明 其他選項保持預設值即可。

    b. 單擊路由(Ingress)右側的建立。
    在彈出的建立對話方塊的規則項中配置以下資訊,然後單擊建立。

  • 域名:您的網站域名,例如:foo.bar.com。說明 如果您沒有域名,可以先隨意填寫一個測試域名。

  • 服務:選擇上一步建立的nginx-nas-svc服務。
    在這裡插入圖片描述
    說明 其他選項保持預設值即可。
    此時路由一欄應該顯示域名與對應服務的資訊。路由功能會將使用者請求通過簡單扇出的方法,打散到多個容器節點上進行處理。
    c. 勾選容器組水平伸縮後面的開啟,然後在最小副本數處填寫2,最後單擊最下方的建立按鈕。
    等待建立成功。
    在這裡插入圖片描述

步驟六:訪問測試網站

等待NAS和容器的配置完成後,您就可以使用本地電腦訪問測試網站了。
1.配置辦公電腦的hosts檔案。
說明: 如果您在NGINX應用配置中,使用的是正式網站域名,並且已經通過備案,就可以跳過這個步驟,直接通過瀏覽器開啟網站。如果您使用的是測試域名(例如foo.bar.com),那麼就需要在本地電腦上配置hosts檔案,讓瀏覽器把對域名的請求轉到ACK叢集的IP地址上。
a. 進入ACK控制檯的工作負載頁面。
b. 單擊步驟三建立的NGINX服務名稱。
在這裡插入圖片描述
c. 單擊訪問方式標籤頁,將路由的端點IP地址複製到貼上板,這個IP地址就是公網訪問網站使用的IP地址。
在這裡插入圖片描述
d. 使用管理員許可權開啟本地C:\Windows\System32\drivers\etc\hosts檔案,將端點IP和步驟三種設定的域名加入hosts檔案,然後儲存退出,如下圖所示。
說明:Linux和Mac系統請修改/etc/hosts檔案。

在這裡插入圖片描述
2.使用瀏覽器開啟網站。
在這裡插入圖片描述
說明:如果不能正常訪問,您可以嘗試清空瀏覽器快取,或者使用無痕瀏覽模式訪問。

步驟七:驗證服務高可用

因為部署NGINX應用的時候,選擇了容器組最小副本數為2,所以在一臺容器宿主節點當機的情況下,網站仍然可以由另一臺容器宿主節點提供服務,保證了服務的高可用特性。
1.模擬節點故障。
a. 在叢集詳情頁單擊左側引導欄節點管理進入節點管理頁面。
b. 選擇其中2個節點,然後單擊下面操作欄節點維護在彈出的對話方塊中勾選排空節點,然後單擊確定。
在這裡插入圖片描述
此時,可以看到節點狀態為不可排程。
在這裡插入圖片描述
c. 使用瀏覽器開啟網站,發現仍然可以正常訪問。
在這裡插入圖片描述
2. 恢復節點。
a. 單擊下面操作欄節點上線在彈出的對話方塊單擊確定。
b. 使用瀏覽器開啟網站,發現仍然可以正常訪問。
在這裡插入圖片描述

步驟八:驗證彈性擴容

1.檢視容器組初始狀態。
a. 進入ACK控制檯的工作負載頁面,單擊步驟三建立的NGINX服務名稱。
b. 單擊容器組水平伸縮器檢視當前副本數和容器組當前當前CPU使用率。
在這裡插入圖片描述
2. 模擬容器高負載。
a. 在叢集詳情頁單擊右上方通過 CloudShell 管理叢集,進入CloudShell命令列。
在這裡插入圖片描述
b. 在命令列中,執行以下命令檢視節點。

kubectl get pod

在這裡插入圖片描述
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使用率明顯升高。
在這裡插入圖片描述
等待幾分鐘後再次檢視,發現當前副本數已經變為10。
在這裡插入圖片描述
c. 此時,使用瀏覽器開啟網站,發現仍然可以正常訪問。
在這裡插入圖片描述
4. 解除容器高負載。
a. 進入CloudShell命令列。
b. 在命令列中執行以下命令。

相關文章