本文介紹如何在半小時內,經過阿里雲容器ACK服務和文件存儲NAS服務搭建一個簡單的彈性、高可用NGINX網站。在完成本文的全部操做後,您將得到一個單網頁的網站,用戶的請求將會被打散到多個容器節點上,而且根據業務負載自動擴縮容,即便某個容器節點宕機也不會影響用戶訪問。另外您還能夠將本地編輯的網頁快速更新到網站上。html
本教程使用到的雲產品以下:nginx
雲服務器ECS瀏覽器
雲服務器(Elastic Compute Service,簡稱ECS)是阿里雲提供的性能卓越、穩定可靠、彈性擴展的IaaS(Infrastructure as a Service)級別雲計算服務。雲服務器ECS免去了您採購IT硬件的前期準備,讓您像使用水、電、自然氣等公共資源同樣便捷、高效地使用服務器,實現計算資源的即開即用和彈性伸縮。阿里雲ECS持續提供創新型服務器,解決多種業務需求,助力您的業務發展。緩存
文件存儲NASbash
阿里雲文件存儲(Network Attached Storage,簡稱 NAS)是面向阿里雲 ECS 實例、E-HPC 和容器服務等計算節點的文件存儲服務。NAS 提供了簡單的可擴展文件存儲以供與 ECS 配合使用,多個ECS實例能夠同時訪問 NAS 文件系統,而且存儲容量會隨着您添加和刪除文件而自動彈性增加和收縮,爲在多個實例或服務器上運行的工做負載和應用程序提供通用數據源。服務器
容器服務Kubernetes版ssh
阿里雲容器服務Kubernetes版ACK(Alibaba Cloud Container Service for Kubernetes)是全球首批經過Kubernetes一致性認證的服務平臺,提供高性能的容器應用管理服務,支持企業級Kubernetes容器化應用的生命週期管理,讓您輕鬆高效地在雲端運行Kubernetes容器化應用。tcp
本教程七個步驟,完成前五個步驟便可實現彈性高可用的NGINX網站,最後兩個步驟驗證網站的彈性和高可用屬性。編輯器
步驟一:建立資源
步驟二:掛載文件系統NAS到ECS服務器
步驟三:上傳文件到NAS
步驟四:配置NAS掛載信息
步驟五:建立NGINX應用
步驟六:訪問測試網站
步驟七:驗證服務高可用
步驟八:驗證彈性擴縮容
分佈式
雲產品資源體驗地址:https://developer.aliyun.com/adc/scenario/57f4d9ac091a4b539a261ff2ef657ff0
開啓雲產品資源
阿里雲文件存儲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
使用ACK集羣搭建NGINX服務後,在您打開網站首頁時,容器就會從NAS文件系統中讀取這一步上傳的網頁文件,返回給瀏覽器。在網站搭建完成後,您能夠經過一樣的方法更新NAS裏的文件。
1.在本地建立index.html文件。
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。
要使用ACK服務掛載使用NAS,須要先配置容器存儲卷PV和存儲聲明PVC信息,這些信息將會在您部署NGINX應用的時候用到。
1.配置存儲卷。
進入ACK集羣列表,單擊ACK集羣名稱,進入集羣詳情頁。
單擊左側引導欄中的存儲卷。
單擊存儲卷標籤頁,而後單擊建立。
選擇NAS存儲卷類型,填寫存儲卷名稱,選擇NAS掛載點,最後單擊建立。
操做流程參見以下圖。
圖1:
圖2:
2.配置存儲聲明。
1.單擊左側導航欄中的存儲卷。
2.單擊存儲聲明,而後單擊建立。
3.根據如下信息配置存儲聲明。
存儲聲明類型:選擇NAS。
名稱:填寫存儲聲明名稱,例如:nas-pvc。
分配模式:選擇已有存儲卷。
已有存儲卷:選擇上一步建立的存儲卷。
總量:此欄對於NAS不具備實際限制意義,保留默認值便可。
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。說明 若是您沒有域名,能夠先隨意填寫一個測試域名。
等待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. 使用瀏覽器打開網站,發現仍然能夠正常訪問。
1.查看容器組初始狀態。
a. 進入ACK控制檯的工做負載頁面,單擊步驟三建立的NGINX服務名稱。
b. 單擊容器組水平伸縮器查看當前副本數和容器組當前當前CPU使用率。
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. 此時,使用瀏覽器打開網站,發現仍然能夠正常訪問。