Nhóm thực hiện sau khi được hướng dẫn và tìm hiểu, quyết định sử dụng côngnghệ Infrastructure as Code nhằm tạo ra một hệ thống mạng đơn giản giúp rút ngănthời gian triển khai cũng như hạ
Trang 1ĐẠI HỌC QUOC GIA TP HO CHÍ MINH
TRUONG DAI HOC CONG NGHE THONG TIN KHOA MANG MAY TINH VA TRUYEN THONG
VUU KHANH DUY
NGUYEN MINH TUAN HAI
KHOA LUAN TOT NGHIEP
dụng Terraform
Automatically deploying cloud infrastructure using Terraform
KY SU NGANH TRUYEN THONG VA MANG MAY TINH
TP HO CHi MINH, 2021
Trang 2ĐẠI HỌC QUOC GIA TP HO CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA MẠNG MÁY TÍNH VÀ TRUYÈN THÔNG
VƯU KHÁNH DUY- 17520409
NGUYEN MINH TUẦN HAI -17520427
KHOA LUAN TOT NGHIEP
Tự động triển khai cơ sở hạ tang điện toán đám mây sử
dụng Terraform
Automatically deploying cloud infrastructure using Terraform
KY SU NGANH TRUYEN THONG VA MANG MAY TINH
GIANG VIEN HUONG DAN
ThS.ĐỖ THI HUONG LAN
TP HO CHI MINH, 2021
Trang 3THÔNG TIN HỘI ĐÒNG CHÁM KHÓA LUẬN TÓT NGHIỆP
Hội đồng cham khóa luận tốt nghiệp, thành lập theo Quyết định số
TigầYy của Hiệu trưởng Trường Đại học Công nghệ Thông tin.
Trang 4LỜI CÁM ƠN
Thành công không chỉ một cá nhân tạo ra mà còn gắn liền với sự hỗ trợ, giúp
đỡ đến từ nhiều người khác Trong suốt thời gian học tập tại giảng đường đại học
em đã nhận được nhiều sự quan tâm, giúp đỡ của quý thầy cô, gia đình và bạn bè
Em xin gửi lời cảm ơn đến quý thầy cô Khoa Mạng máy tỉnh & Truyền
thông — Trường Dai Học Công Nghệ Thông Tin ĐHQG TP.HCM đã nhiệt tinh
trong việc truyền đạt vốn kiến thức quý báu giúp đỡ em rất nhiều trong thời gian
học tập tại trường Em xin chân thành cảm ơn cô ThS Đỗ Thị Hương Lan đã tận
tâm, chỉ bảo chúng em qua những buổi nói chuyện, thảo luận về lĩnh vực đề tàitrong lĩnh vực đề tài khóa luận tốt nghiệp Một lần nữa, chúng em xin chân thànhcảm cô Mặc dù khóa luận không tránh khỏi thiếu sót, rất mong nhận được những ýkiến đóng góp quý báu của quý thầy cô giúp bài khóa luận hoàn luận thiện hơn
Lời sau cùng, chúng em xin kính chúc quý thầy cô trong khoa Mạng MáyTính và Truyền Thông sức khỏe, niềm tin, vững bước dìu dắt chúng em trưởng
thành.
Trân trọng, ngày tháng năm
Trang 52.1 Infrastructure AS COde c<ccct HH HH1 ưe 6
2.2 Cách thức hoạt động chung của laC -. -csxserrerrrrerrrrerrrrirrrrrrrrrrrie 6
3.1.1 _ Liên kết với nhà cung cấp dịch vụ «-ee eccerrcceere 13
3.1.2 Định nghĩa tài nguyên xây dựng -«-ccsrrrerrrrrrrrrrerrrree 14
3.1.3 Tạo cơ sở hạ tầng 16
Trang 6SN 005 | 0) ÖỞ44.,,,,,, ,ÔỎ 17
3.1.1 Kếtnối SSH ecccecerrrrirrrrrrrrrrrrrrrrrrrrrrrrrrrrree 17
3.1.2 Triển khai ứng dung với ansible-playbook và inventory 19
3.1.2.1 Ansible-playboO -ccccsccccesreerreetrteerrrrrrrtrrrrrrrrrrrrsrrrrrrrreee 19 3.1.2.2 Ansible Inventory HOSES -cscccceekirekrirkriririiireree 21
3.2 DOCK€V Ă SH HH HH 22
3.2.1 Tạo image từ dOCK€rfIÏe -c+cxerxseretrrerteeretrrerrrretrkrrrrre 22
3.2.2 Chay ứng dụng với docker-COINDOS€ -« c-cccsseerreseresrrresrre 23
3.3 Gan tên miền Freenom -‹ e+++eceetreceetEtreeertrrrerrrtrrrarrrrrirsrrrrrrrere 24
4.2 Triển khai trên chỉ tiẾt ce-erieerierieriirrrrrirririrriirirrrrrre 30
4.2.1 Xây dựng cơ sở hạ tang và trién khai WordPress tự động 30
Trang 74.2.3 Giám sát hệ thống -cccrkiieiriirrrriiiirrrrriie 54
` KOt an ốẽ 56
"nh 56
“#9 ‹< ẽ ẽ 57
Chương 5 TRÌNH BAY, ĐÁNH GIA BAN LUẬN VE KET QUÁ 59
5.1 Kết quả đạt QUOC c 55+c+rerrrtxritErirtkrittrirtiiiiririiiiriiriirirrree 59
“U20 sẽ ốốẽẽẽẽẽẽ 59
Chương 6 HUONG PHAT TRIN s2 se cssssessesssessessee 60
6.1 Tự động hóa quá trình đăng ký tên miền Freenom - - 60
6.1.1 _ Tình hình hiện tại -c-c-ccckceEkiisEirEiiiiiiierree 60
6.1.2 Hướng phát triển về sau cccccccccreeerrrrrrreerrrrrrrrrerree 606.2 Mở rộng môi trường triển khai cơ sở hạ tầng -sercccce+ 60
6.2.1 _ Tình hình hiện tại -.ccEriskkiriiiiiiiiiiiree 60
6.2.2 Hướng phát triển về sau -cccccccccvveeeseserrreesssrrrrrreesee 60
6.3 Tối ưu hóa triển khai Docker trên AWS -c-eciceccerrreccerrrrererte 61
6.3.1 _ Tình hình hiện tại -+ccecrrirrtriirtkrirrrriiriirriiiirrree 61
6.3.2 Hướng phát triển về sau s-eccerreeeerreeerrrerrrrererre 61
TÀI LIEU THAM KHAO -°- 2 5£ s52 5< s£EseES2ESsEEseEseEssEssersersrssre 62
Trang 9Hình 4-3 Sơ đồ chỉ tiết hệ thống triển khai trên AWS -cc-ccccee 30 Hình 4-4 Sơ đồ chỉ tiết hệ thống triển khai trên Openstack - - 41Hình 0-1: Yêu cầu cơ bản của Linux khi cài đặt AWS CLI 2 ccccs5 67
Trang 10DANH MỤC BANG
Bảng 1 So sánh Ansible và các công cụ cấu hình khác - 11
Bảng 2 Các tài nguyên sử dụng trong khóa luận -c-cee-rrxeeree 15 Bảng 3 Các thư mục trong một Ansible roÌe -.ce ccxessxrxeertrrresrrrrrerree 20
Bảng 4 Danh sách tệp tf xây dựng ha tầng AWS -.cccceccrrrrcrrrrrrree 33
Bảng 5 Danh sách tệp tf xây dựng hạ tầng OpenStack - - - 44
Bảng 6 Danh sách các ÏOlÏe -«+ccx+tkkrtEkHHHHH HH HH 49
Bang 7 Bang so sánh thời gian xây dựng hạ tầng - -c-ccccccccrccee 59
Trang 11DANH MỤC TỪ VIET TAT
AWS: Amazon Web Services
laC: Infrastructure as Code
NAT: Network Address Translation
Trang 12TOM TAT KHÓA LUẬN
Tên đề tài: Tự động triển khai cơ sở hạ tầng điện toán đám mây sử dụng
Terraform (Automatically deploying cloud infrastructure using Terraform)
Việc quan lý các web applications khá phức tạp, vi du như quan lý load balancer,
web servers, database servers, Có thé sẽ phải mat hàng giờ dé xây dựng va quản
lý những hệ thống này
Nhóm thực hiện sau khi được hướng dẫn và tìm hiểu, quyết định sử dụng côngnghệ Infrastructure as Code nhằm tạo ra một hệ thống mạng đơn giản giúp rút ngănthời gian triển khai cũng như hạn chế / giảm thiểu “human error” trong quá trìnhtriển khai và quản lý cơ sở hạ tầng
Đề tài của nhóm thực hiện triển khai ứng dụng WordPress trên một hệ thống cơ
sở hạ tầng đơn giản của AWS và OpenStack, xây dựng bằng Terraform
Kết quả thu được của nhóm thực hiện là xây dựng được cơ sở hạ tầng, triển khaithành công ứng dụng, so sánh sự khác biệt giữa triên khai cơ sở hạ tầng cloud
truyền thống và tự động, nhận ra được một số hạn chế và nêu ra các hướng phát
Chuong 2 TONG QUAN
Giới thiệu về Infrastructure as code và các thành phan liên quan sử
dụng trong khóa luận.
Chương 3 _ PHƯƠNG PHÁP THỰC HIEN
Mô tả sơ bộ hoạt động của các ứng dụng trong mô hình triển khai của
nhóm thực hiện.
Trang 13Chương 4 TRIEN KHAI MÔ HÌNH THUC TE
Phân tích mô hình và quá trình triển khai hệ thống
Chương 5 TRINH BAY, ĐÁNH GIA BAN LUẬN VE KET QUA
Trinh bày kết qua dat được, đánh giá kết qua.
Chương 6 HƯỚNG PHÁT TRIEN
Phân tích một số hướng phát triển tiếp theo có thê thực hiện
PHU LUC HUONG DAN CÀI ĐẶT MOT SO PHAN MEM CAN THIẾT
Huong dan cai dat OpenStack, tao tai khoan AWS, cai dat AWS CLI,
tao tai khoan Freenom.
Trang 14Chương 1 MỞ DAU1.1 Lý do chọn đề tài, mục đích
1.1.1 Lý do chọn đề tài
Quản lý các ứng dụng mạng khá là phức tạp, ví dụ phải quản lý load balancer,
web servers, database servers, có thé sẽ phải mat hàng giờ dé xây dựng và quản lýnhững hệ thống này
Xây dựng ứng dụng mạng cần có máy chủ làm host triển khai Tuy nhiên khôngphải ai cũng có khả năng tự xây dựng 1 hệ thống máy chủ vật lý để triển khai ứngdụng Hiện nay, rất nhiều doanh nghiệp đã chuyền từ hệ thống máy chủ vật lý lên hệ
thống đám mây Điều này đã mang lại rất nhiều sự thay đổi cũng nhưng lợi ích:
giảm chỉ phí vận hành, mở rộng hệ thông khi cần thiết; bảo mật dữ liệu được đảm
bảo bởi các nhà cung cấp dịch vụ điện toán đám mây; hạn chế rủi ro mất đữ liệu sovới hệ thống máy chủ vật lý Do đó nhóm thực hiện quyết định chọn đề tài xâydựng triển khai hệ thong điên toán dam mây
1.1.2 Mục dich
Để rút ngắn thời gian triển khai cũng như hạn chế / giảm thiểu “human error”trong quá trình triển khai và quản lý cơ sở hạ tầng, nhóm thực hiện sau khi đượchướng dẫn và tìm hiểu, quyết định sử dụng công nghệ Infrastructure as Code trongkhóa luận tốt nghiệp
Infrastructure as code (IaC) là một mô hình thiết lập và triển khai công nghệ.Trong đó các developer hoặc nhóm vận hành tự động quản lý và cung cấp các góicông nghệ cho ứng dụng thông qua phần mềm Thay vì sử dụng quy trình thủ công
dé cấu hình các thiết bi phần cứng và hệ điều hành rời rac
Nếu đang xử lý một cơ sở hạ tầng hiện đại, phức tạp Đề không tốn quá nhiều thời
gian dé tương tác với nhà cung cấp đám mây theo cách thủ công thì IaC là sự lựa
chọn hoàn hảo IaC thường được viết bằng Terraform Đây là một công cụ laC
Trang 15open-source Với tính năng linh hoạt Terraform có thê làm việc với nhiêu hãng và
nên tảng cung cấp dịch vụ hạ tầng khác nhau
Mục đích của nhóm thực hiện là xây dựng một hệ thong mô hình mẫu, thé hiện
được ưu điểm của Terraform giúp giảm thiêu lỗi trong quá trình triển khai Đồng
thời triển khai ứng dụng WordPress lên hệ thống cơ sở hạ tầng đã tạo của AWS và
OpenStack.
Trang 161.2 Đối tượng và phạm vi nghiên cứu
Đối tượng đề tài hướng tới là xây dựng một cơ sở hạ tầng cấu hình dựa trên
Terraform và nền tảng đám mây AWS, OpenStack, giúp User quản lý được các máy
tính ảo tạo bằng Terraform trên một máy tính local
Vê phạm vi nghiên cứu, nhóm thực hiện tìm hiệu các nội dung có liên quan tới khóa luận như :
e_ Terraform đóng vai trò gì, hỗ trợ điều gì, kết hợp với việc gì trong quá
trình triển khai một ứng dụng web
e Cách triển khai máy ảo trên nền tảng đám mây thông qua Terraform
-laC
e Hệ thống Amazon Web Services và OpenStack
e Tạo tài nguyên triển khai ứng dụng trên cloud
e Một số công nghệ khác sử dụng trong khóa luận như Docker,
Docker-compose, Git, Ansible, Zabbix
` Terraform Bang aws
openstack; ~~”
Trang 17Chương 2 TỎNG QUAN
2.1 Infrastructure as code
Infrastructure as code là một cách tiếp cận dé tự động hóa cơ sở hạ tang dựa trên
các phương pháp thực tiễn từ phát triển phần mềm Sử dụng các quy trình nhấtquán, có thé lặp lại dé cung cấp và thay đôi hệ thống thông qua các quy trình khôngcần giám sát bao gồm xác nhận kỹ lưỡng [1]
Là công cụ hiện đại có thể coi cơ sở hạ tầng như thể nó là phần mềm và dữ liệu,cho phép mọi người áp dụng các công cụ phát triển phần mềm như hệ thống kiểmsoát phiên ban (VCS), thư viện kiểm thử tự động và điều phối triển khai dé quản lý
cơ sở hạ tầng Nó cũng mở ra cánh cửa dé khai thác các thực tiễn phát triển như
phát triển testdriven (TDD), tích hợp liên tục (CD và phân phối liên tục (CD).
2.2 Cách thức hoạt động chung của laC
Về cơ ban, cách thức hoạt động chung của IaC gồm 3 bước:
e Quản trị viên xác định các thông số câu hình hệ thống bằng một ngôn
ngữ.
e Các tệp hướng dan được gửi đến một máy chủ chính (server), một
API quản lý (management API) hoặc một kho lưu trữ mã (github).
e Nền tang IaC theo hướng dẫn của nhà phát triển xây dựng và cấu hình
hệ điều hành và thậm chí toàn bộ ứng dụng phần mềm có sẵn ngay lập tức theo yêu
cầu Điện toán đám mây có thể không liên quan đến rất nhiều công nghệ mới,
nhưng nó đại diện cho một phương thức mới để quản lý CNTT Ví dụ, khả năng mở
Trang 18rộng và tiết kiệm chi phí có thé đạt được ở mức độ lớn nhất từ Điện toán đám mây
[2].
Điện toán dam mây được so sánh với các kiến trúc hướng dịch vụ (SOA), Điện
toán lưới(Grid computing), Điện toán tiện ich(Utility computing) và Điện toán
cụm(Cluster computing) Điện toán đám mây và SOA được duy trì độc lập Các
dịch vụ nền tảng và lưu trữ của Điện toán đám mây mang lại giá trị b6 sung cho
những nỗ lực của SOA Với các công nghệ như Grid computing, tài nguyên máy
tính có thé được cung cấp như một tiện ích Trong khi đó, Điện toán dam mây tiếnmột bước xa hơn với tài nguyên theo yêu cầu dự phòng Nó cũng loại bỏ sự cần
thiết của việc cung cấp quá mức cần thiết khi đáp ứng nhu cầu của khách hàng Tính
toán chi phí ứng dụng phải trả cho việc sử dung tài nguyên, tương tự như cách
chúng ta trả tiền cho một dịch vụ công cộng (chăng hạn như điện, nước, xăng, v.v.)
Điện toán cum(Cluster computing) là một hình thức chi phí rẻ hon dé xử lý cácứng dụng có thê chạy song song Người dùng truy cập các dịch vụ đám mây như tàinguyên máy tính và trung tâm di liệu thông qua Internet Người dùng cần có tàikhoản với nhà cung cấp dịch vụ đám mây (Cloud Service Provider - CSP) dé bảomật và thanh toán chỉ phí sử dụng Các tài nguyên cần thiết được chỉ định bởi người
dùng CSP cung cấp tài nguyên dưới dạng máy ảo trực tiếp cho tài khoản người
dùng.
Dịch vụ này tạo điều kiện cho người dùng linh hoạt hơn trong việc xây dựng ứng
dụng của riêng họ trên các tài nguyên được lưu trữ từ xa VỀ cơ bản, người dùngthuê hệ điều hành, CPU, bộ nhớ, lưu trữ và tài nguyên mạng từ CSP để cải thiệntính đàn hồi và khả năng mở rộng hệ thống theo nhu cầu của người dùng
2.3.2 Opensource cloud va Enterprise cloud
Opensource cloud — Điện toán đám mây mã nguồn mở là bat kỳ dịch vụ điện toán
đám mây hoặc giải pháp mà được xây dựng sử dụng phần mềm và công nghệ mãnguồn mở Bao gồm bắt kỳ tổ chức phi lợi nhuận, nhà cung cấp dịch vụ mô hình
Trang 19điện toán dam mây riêng hoặc hybrid, laaS, PaaS hoặc XaaS xây dựng và vận hành
hoàn toàn trên công nghệ mã nguôn mở [3]
Enterprise cloud - Điện toán đám mây doanh nghiệp cung cấp các dịch vụ đám
mây điện toán dành riêng cho các doanh nghiệp Với dịch vụ bảo mật được cập nhật
liên tục.
2.3.3 AWS
“Amazon Web Services (AWS) là nên tảng đám mây toàn diện và được sử dụngrộng rãi nhất, cung cấp trên 200 dịch vu day đủ tính năng từ các trung tâm dữ liệutrên toàn thé giới AWS là nên tang đám mây có day đủ chức năng, cộng dongkhách hàng và đối tác lớn, đồng thời có độ bảo mật cao và tốc độ đổi mới nhanh.AWS là Enterprise cloud dién hinh” [4]
AWS là nên tảng điện toán đám mây có nhiêu dịch vụ ho trợ các doanh nghiệp, cá
nhân mong muôn xây dựng hệ thông máy tính lớn, nhỏ với nhiêu mức giá và câu hình linh hoạt.
Nhờ ưu điểm như trên, AWS được xem là “con gà đẻ trứng vàng” của Amazon vìluôn dem lại nguồn thu lớn [5], chiếm thị phần lớn nhất trên thị trường điện toán
đám mây, trên cả Microsoft Azure va Google Cloud Tính tới quý 2 năm 2021, thi
phần của AWS là 32%, Microsoft Azure 19% và Google Cloud 7% [6]
Công nghệ cua AWS luôn được cập nhật va phat triển, hiện AWS có hệ thốngmáy chủ tại 81 vùng trên 25 khu vực dia lý trên khắp thế giới [4]
2.3.4 OpenStack
“OpenStack là một phân mêm mã nguồn mở giúp xây dựng quản lý và kiểm soát
hệ thống điện toán dam mây được phát triển bởi cộng đồng mạng, tắt cả các tiễn
trình quản lý và kiểm soát sử dung API với các cơ chế xác thực chung” [7]
OpenStack hỗ trợ quản lý bằng giao diện web, quản trị viên có thê kiểm soát đồng
thời cung cấp cho người dùng quyên sử dụng tài nguyên thông qua giao diện web
Trang 20OpenStack triển khai cơ sở hạ tầng như một dịch vụ (Infrastructure-as-a-Service),
hỗ trợ triển khai cả public cloud và private cloud Theo chu kỳ 6 tháng OpenStack
sẽ ra mắt một phiên bản mới [8]
2.3.5 Azure
“Microsoft Azure là bộ dịch vụ đám mây không ngừng mở rộng nhằm giúp doanh
nghiệp vượt qua những thách thức trong kinh doanh Azure giúp xây dựng, quản lý
và triển khai các ứng dụng trên mạng rộng khắp toàn cầu” [9]
Azure là nền tảng điện toán đám mây của Microsoft, có nhiều trung tâm dữ liệu
trên khắp thé giới, cuỗi quý 2 năm 2021, thi phần của Azure là 19% [6] Hiện Azurecung cấp hơn 200 dịch vụ, được chia thành 18 loại Các danh mục này bao gồm:máy tính, mạng, lưu trữ, IoT, di chuyên, đi động, phân tích, container, trí tuệ nhântạo và machine learning, tích hợp, công cụ quan lý, công cụ nhà phát triển, bảo mật,
cơ sở dir liệu, DevOps, nhận dang media và web service [9].
Terraform sử dụng các tệp cau hình mô tả các thành phan tài nguyên xây dựng cơ
sở hạ tầng Terraform sẽ tạo ra bản kế hoạch xây dựng hệ thống, sau đó thực thitheo bản kế hoạch đó xây dựng cơ sở hạ tầng
Terraform có thé quản lý các thành phan của cơ sở hạ tang như phiên bản máytính ảo, bộ nhớ lưu trữ, hệ thông mạng và nhiều thành phần khác
Terraform sẽ lưu trạng thái cơ sở hạ tầng vào terraform.tfstate Mặc địnhterraform.tfstate được lưu ở máy tính local, tuy nhiên cũng có thể lưu
terraform.tfstate trên Terraform Cloud, HashiCorp Consul, Amazon S3, Blob
Storage, Google Cloud Storage, Alibaba Cloud OSS để chia sẻ trong nhóm thực
9
Trang 21hiện, việc lưu terraform.tfstate trên các bộ dữ liệu chung gọi là remote state Việc
chia sẻ terraform.tfstate ở chế độ remote state mang lại nhiều lợi ích trong quá trình
làm việc nhóm [11]
Các nhà cung cấp dịch vụ lớn như AWS, OpenStack, Microsoft Azure đều xây
dựng bộ công cụ laC riêng:
e CloudFormation - AWS
e Heat - OpenStack
e AzureARM - Microsoft Azure
Tuy nhiên các công cụ trên hoạt đông giới hạn trong nền tảng của nhà cung cấp
dịch vụ tạo ra công cụ đó (trường hợp đặc biệt: template của Heat — OpenStack tương thích với CloudFormation - AWS [12]).
Điểm khác biệt và lợi thế của Terraform là khả năng tương thích với nhiều nhà
cung cấp dịch vụ điện toán đám mây Do đó, nhóm thực hiện quyết đỉnh sử dụng
Terraform trong đề tài khóa luận
2.5 Ansible
Ansible là một công cụ hỗ trợ tự động hóa các công việc cung cấp tài nguyên diện
toán đám mây, quản lý cấu hình hệ thống, triển khai ứng dụng, điều phối dịch vụ
trong hệ thống và nhiều việc khác [13]
Ansible sử dụng kiến trúc agentless - tiện dụng khi không cần cài đặt và bào tri
các agent trên các node Ansible có 2 loại server là control machine và node, control
machine quản lý các node có trong hệ thống, cũng như lưu các thông tin các node,playbook và script dùng trong triển khai ứng dụng trên các node sử dụng giao thức
Trang 22lý vê Ruby DSL) về Puppet DSL)
Bang 1 So sanh Ansible va cac cong cu cau hinh khac
Vi uu diém dé trién khai, tim hiéu va ứng dụng nên nhóm thực hiện chon Ansible
trong khóa luận tốt nghiệp
2.6 Docker
“Docker là một ứng dụng mã nguồn mở dùng trong phát triển, vận chuyển và
chạy các ứng dụng Docker cho phép các ứng dụng hoạt động tách biệt khỏi hệ
thong hạ tang phan cứng dé phân phối ứng dụng nhanh chóng Docker có thể quản
lý cơ sở hạ tang dang sử dụng như cách quản lý các ứng dụng phan mém Tận dụng
cách hoạt động cua Docker đề vận chuyển, thử nghiệm và triển khai ứng dụng một
cách nhanh chóng, có thé hạn chế độ trễ giữa việc viết code và chạy code khi phát
triển ứng dụng” [14]
Docker khá giống virtual machine nhưng triển khai sử dụng docker container sẽgiảm nhẹ gánh nặng lên hệ thống máy chủ hơn sử dụng máy tính ảo Docker xâydựng dựa trên cơ sở các image, ta có thé sử dụng các image sẵn có tại docker hubhoặc tự xây dựng image theo nhu cầu của bản thân, tải lên docker hub chia sẻ vớicộng đồng mạng hoặc sử dụng cho dự án cá nhân
Hiện nay Docker phát triển, phổ biến nhanh chóng do các yếu tố:
e Tính dé ứng dụng
e Tốc độ cao
e Môi trường chạy và khả năng mở rộng
Việc chuyển sang microservices đang ngày càng phô biến, docker dần trở thành 1
phân quan trọng của nhiêu công cụ Devops.
11
Trang 232.7 Zabbix
“Zabbix la phan mềm mã nguôn mở dùng để giám sát hệ thống mang va ứng
dụng Nó là phần mêm sử dụng các tham số của một mạng, tình trạng và tính toànvẹn của Server cũng như các thiết bị mạng Zabbix tiện lợi ở việc có thể gửi thông
báo qua Telegram, Gmail, SMS, Ngoài ra Zabbix cung cấp báo cáo và dữ liệu
A
chính xác dựa trên cơ sở đữ liệu” [15].
Tất cả các số liệu thống kê hay cấu hình đều được hiển thị thông qua giao diệnweb giúp dé dang theo déi được tình trang của hệ thống và dịch vụ
Zabbix bao gồm các thành phan:
La thành phan cài đặt trên đối tượng được quan lý nhằm giám sát tài
nguyên hệ thống và dịch vụ đang hoạt động.
Ngoài ra có nhiều ứng dụng theo dõi hệ thống khác như Prometheus, Grafana.Trong thực tế cả hai thường được sử dụng chung hỗ trợ nhau Prometheus lưu trữ
dữ liệu theo mốc thời gian, lấy các metric về qua HTTP, Grafana hiển thị dữ liệucủa Prometheus trên dashboard sử dụng nhiều loại biểu đồ khác nhau
Zabbix ra đời sớm hơn Prometheus và thích hợp hơn cho các mô hình quy mô
nhỏ, Grafana thường được sử dụng nhiều trong việc thé hiện dữ liệu ở dạng biểu đồ
hơn là thu thập dữ liệu hệ thống, vì vậy nhóm thực hiện sử dụng Zabbix trong khóa
luận.
12
Trang 24Chương 3 PHƯƠNG PHÁP THỰC HIEN
Phương pháp thực hiện sẽ giải thích sơ bộ cách hoạt động của các ứng dụng sử dụng trong khóa luận của nhóm thực hiện.
3.1 Terraform
‘Ww Terraform
© openstack 27⁄2 of
3 TT
Infrastructure as wus h fet
Hinh 3-1 Trién khai ha tang bang Terraform
3.1.1 Liên kết với nhà cung cấp dịch vụ
Dé tao cơ sở hạ tang trên AWS và OpenStack, cần cung cấp tài khoản có quyềntruy cập Ta có thể cung cấp trực tiếp trong block “provider”, nội dung trong
provider AWS va OpenStack có thé khác nhau nhưng cùng làm chung 1 nhiệm vụ:
cấp phép quyền truy cập sử dụng tài nguyên
provider "aws" {
"default"
profile
region = <AWS_region>
access key = <AWS access key>
secret_key = <AWS5 secret ke>
}
provider "openstack" {
user nam = <openstack user name>
tenant _name = <openstack tenant _name>
13
Trang 25password = <openstack_password>
}
Trong mô hình triển khai của nhóm thực hiện, các giá trị tài khoản, mật khẩu sẽ
được lưu trong secret.tfvars, file secret.tfvars được gọi đến khi triển khai hệ thống
giúp bảo mật tài khoản của nhóm thực hiện trong quá trình lưu trữ source code trên Github.
provider "aws" {
profile = "default"
region = "ap-southeast-1"
access key = var.aws access key
secret key = var.aws secret key
}
provider "openstack" {
password = var.openstack_ password
}
Ngoài ra với AWS, có thé sử dụng AWS CLI thay thé cách cung cấp tài khoảntrực tiếp trong source code
3.1.2 Định nghĩa tài nguyên xây dựng
Sử dụng ngôn ngữ HashiCorp Language định nghĩa các tai nguyên sẽ được tạo
trên AWS và OpenStack sử dụng Terraform Tất cả được định nghĩa trước trong cáctệp tf Ở bảng dưới là một số tài nguyên sẽ sử dụng trong khóa luận
14
Trang 26Bảng 2 Các tài nguyên sử dụng trong khóa luận
Dịch vụ Tài nguyên Mô tả
Máy tính ảo chạy trên hệ thong cùa AWS, có
aws_instance CPU, bộ nhớ dữ liệu xác định trước khi
tạo(có khả năng mở rộng nếu cần thiết)
Virtual Private Cloud của AWS, một mang
aws_vpc ;
ảo cô lập theo logic xác định.
Internet Gateway của AWS, cung cấp diém
aws_internet_gateway | truy cập ra internet từ mạng ảo Virtual
Private Cloud cho máy tính ảo
aws_ subnet Tao subnet chia mang phân bố các địa chỉ IP
Bảng định tuyến của AWS, bao gồm các rule
aws_route_table giúp xác định đường di của lưu lượng mạng
AWS ra vào
aws_route_table_asso ciation
aws_security_group
Lớp bao mật cho các máy tinh ảo, hoạt động
như một tường lửa aws_eip Tao dia chi Elastic IP
aws_lb_target_group Tao Taget Group su dung cho Load Balancer
aws_lb Load Balancer cua AWS
aws_lb_listener Listener kiêm tra kết nôi tới các máy tính ảo
aws_lb_target_øroup _attachment
Liên kêt các máy tính ảo với Load Balancer
15
Trang 27openstack_blockstora | Quản lý tài nguyên bộ lưu trữ dữ liệu V2
ge_volume_v2 trong OpenStack
openstack_compute_v | Lién kết bộ lưu trữ dữ liệu với máy tính ảo
olume_attach_ v2 sử dụng OpenStack Compute (Nova) v2 API
Ngoài ra các tài nguyên trên, nhóm thực hiện còn sử dung một số tài nguyên khác
như "local_ file", "null_resource", ví dụ trong inventory.tf sử dụng các tài nguyên vừa nêu copy các file từ máy tính local lên máy tính ảo và chạy lệnh WordPress từ
Code webservices Cres |
ĐỀ tạo co sở ha tầng, đầu tiên tải code mã nguồn xây dựng cơ sở hạ tầng về từ thưmục Github của nhóm thực hiện sau khi tải mã nguồn về, khởi tạo thư mụcTerraform tai thư mục chứa các tập tin ƒf bang lệnh:
terraform init
Khi chạy terraform init, Terraform đọc các tệp cấu hình trong thư mục làm
việc đê xác định plugin nào cân thiết, tìm kiêm các plugin đã cài đặt ở một sô vi trí,
đôi khi tải xuống các plugin bổ sung, quyết định sử dụng phiên ban plugin nào và
16
Trang 28ghi tệp khóa để đảm bảo Terraform sẽ sử dụng các phiên bản plugin tương tự trongthư mục này cho đến khi chạy lại terraform init.
Lệnh terraform plan tạo bản mô tả hệ thống trước khi triển khai xây dựng cơ
sở hạ tầng, liệt kê thông tin các máy tính ảo, hệ thông mạng, bộ lưu trữ dữ liệu vànhiều thông tin khác
Lệnh terraform apply thực hiện các hành động được dé xuất trong kế hoạch
xây dựng trong Terraform Plan.
Trong trường hợp mặc định, không có tệp kế hoạch được lưu, terraformapply sẽ tạo tự tạo kế hoạch (plan), sau đó xây dựng cơ sở hạ tầng
Terraform sử dụng tài khoản AWS và OpenStack được cung cấp trước đó, xâydựng hạ tầng theo câu hình đã định nghĩa trước bằng code Terraform sẽ lưu trạngthái cơ sở hạ tầng vừa tạo vào terraform.tfstate Mặc định terraform.tfstate được lưu
ở thư mục trên máy tính local, tuy nhiên cũng có thể lưu terraform.tfstate Terraform
Cloud, HashiCorp Consul, Amazon S3, Blob Storage, Google Cloud Storage,
Alibaba Cloud OSS [11] dé chia sẻ giữa các thành viên trong nhóm thực hiện,
việc lưu terraform.tfstate trên các bộ dữ liệu chung gọi là remote state Việc chia sẻ
terraform.tfstate ở chế độ remote state mang lại nhiều lợi ích trong quá trình làm
playbook (kịch bản) được giao.
Trong kịch ban của nhóm thực hiện, khi Terraform tạo cơ sở hạ tầng sé sao chép
khóa id_rsa.pub tại máy tinh local lên máy tính ảo, cho phép nhóm thực hiện truy
cập SSH đến máy tính ảo
17
Trang 29provisioner "file" {
connection {
user = var.ssh user name
private key = file(var.ssh key file)
host =
©penstack_compute_instance_v2.zbx.network.0.fixed 1p v4
}
source = ",/key/id rsa.pub"
destination = "~/id rsa.pub"
on failure = continue
18
Trang 303.1.2 Triển khai ứng dụng với ansible-playbook và inventory
Trong kịch bản của nhóm thực hiện Ansible-playbook sẽ gọi đến các roles đã viếttrước dé cài đặt và triển khai WordPress trên máy tính ảo đã xây dựng trước đó
- name: Setup LEMP
Trang 31— lemp
- firewalld
- import source
- add_ssl
Cần khai báo trong ansible.cfg đường dan tới các roles dé Ansible có thé nhận
biết được sự có mặt của các roles và có thé thuc thi:
Trang 32Files Chứa các file được sử dung bởi role
Meta Thư mục chứa các meta data của role
3.1.2.2 Ansible Inventory Hosts
Inventory gồm danh sách các node được quản lý, ngoài ra Inventory cũng đượcgọi là Hostfile Inventory chứa thông tin cụ thể của các node(địa chỉ IP), có thé tao
va phân chia các node vào các nhóm khác nhau hỗ trợ việc quản lý hay mở rộngquy mô hệ thống [17]
Trong kịch ban của nhóm thực hiện, file hosts của Ansible được tao trước đó
trong inventory.tf sẽ khai báo các host_group dé dé dàng gọi đến các khối server
[webserver]
server-l ansible host=<IP_1> ansible user=root
ansible port=2309 ansible ssh _common_args=!-o
StrictHostKeyChecking=no'
server-2 ansible host=<IP_ 2> ansible user=root
ansible port=2309 ansible ssh_common_args='-o
StrictHostKeyChecking=no'
Có 2 node là 2 máy tinh ảo xây dung bang Terraform trên OpenStack sử dung tài
khoản root và port 2309 đề kết nối SSH triển khai ứng dụng
21
Trang 33Hình 3-3 Triển khai ứng dung bang Docker Docker-compose
Trong Docker, mọi thứ đều dựa trên “image” “Image” là sự kết hợp của hệ thống
tệp và các tham sô.
Docker cũng cung cấp khả năng tạo image docker riêng dùng cho mục đích cá
nhân và nó có thể được thực hiện với sự trợ giúp của Dockerfile Dockerfile là mộttệp văn bản cấu hình đơn giản hỗ trợ hướng dẫn hệ thống cách tạo image theo nhucầu sử dụng
3.2.1 Tạo image từ dockerfile
Ví dụ một tệp Dockerfile đơn giản:
FROM nginx:1.18.0
RUN apt-get update -y
ADD /conf.d/demo.conf /etc/nginx/conf.d/demo.conf
EXPOSE T 80 443
Chạy lệnh “docker build” sẽ cho ra 1 image của hệ điều hành linux, đã cập nhật
hệ thống, bao gồm dich vụ nginx, copy tệp conf.d/demo.conf vào/etc/nginx/conf.d/demo.conf của image, đồng thời mở các port 80, 443
22
Trang 343.2.2 Chạy ứng dụng với docker-compose
Tao một tệp có tên là docker-compose.yaml với nội dung như sau:
Nội dung trên định nghĩa service nginx nginx sử dung image xây dung từ
Dockerfile trong thư mục /nginx, sau đó liên kết port 80, 443 của container với
port 80, 443 của máy tính.
23
Trang 35Docker Compose được sử dụng dé chay nhiéu vùng chứa như một dịch vu duy
nhất Chạy tệp Docker Compose băng lệnh sau:
docker-compose up -d
Lệnh này sẽ lấy tệp “docker-compose.yml” trong thư mục hiện tai và bat đầu xâydựng các container Sau khi thực thi, tất cả các image sẽ bat đầu tải xuống va cácconfainer sẽ hoạt động ở chế chế độ tách biệt (detached mode), sau khi các
container được tao va bat dau chạy, trên màn hình sẽ in ra tên các container va
trạng thái của chúng.
Trong kịch bản của nhóm thực hiện
3.3 Gán tên miên Freenom
Có nhiều dịch vụ hỗ trợ gán tên miền như Route53 là một dịch vụ trỏ tên miềncủa AWS, tuy nhiên cần phải trả phí cho tên miền đăng ký trên AWS vì vậy nhómthực hiện chọn Freenom do Freenom là nhà cung cấp tên miền miễn phí, tên miền
có thé đăng ky sử dụng dến 12 tháng
24
Trang 36Truy cập trang web J/fps:/www.freenom.com/ và đăng nhập.
Domain Registration Date '$ Expiry date @ Status @ Type
isphone.ga 2021-05-01 2021-08-01 Free Manage Domain #
55 FP 10 = 3 Records Found, Page 1 of
25
Trang 37Chọn “Manage Frenom DNS” -> trỏ tên miền tới địa public IP của instance
Trong kịch bản của nhóm thực hiện, trên OpenStack cài Zabbix-agent giám sát
các thông tin chính của hệ thong máy tính ảo(như bộ lưu trữ, RAM, CPU)
26
Trang 38Zabbix được cài trên Nginx Reverse Proxy, theo dõi hai máy tính ảo Host 1 va
Host 2.
Dé tiện lợi cho việc cài đặt Zabbix, nhóm thực hiện gom các dòng lệnh thành file
script dé tu động hóa việc triển khai bằng Terraform, script sẽ được chạy khi
Terraform sử dụng provisioner, script sẽ được copy lên máy tính ảo và chạy tự
động Nội dung script bao gồm việc cập nhật hệ thống và cài đặt Zabbix server,Mariadb server, thay đổi các biến để khởi động sau khi cài đặt Kèm theo đó sẽ càiđặt nginx để cấu hình proxy pass cho zabbix và load balancing cho các instanceđược cài đặt bằng terraform
27
Trang 39Chương 4 TRIEN KHAI MÔ HÌNH THỰC TE
4.1 Mô hình
4.1.1 Mô hình tổng quan
Máy local: Tải source code từ Github, được cai đặt các ứng dụng cần thiết:
Ansible, Terraform Sử dụng Terraform và Ansible xây dựng hệ thống cơ sở hạ tầng
và triển khai ứng dụng mạng trên cơ sở hạ tầng đã tạo Bất kỳ máy tính nào với kếtnối internet cũng có thé trở thành máy tính local trong mô hình của nhóm thực hiện
Máy chủ Amazon Web Services: Cung cấp tài nguyên xây dựng cơ sở hạ tầng vàtriển khai ứng dụng WordPress sử dụng Docker
Máy chủ OpenStack: Cung cấp tài nguyên xây dựng cơ sở hạ tầng và triển khaiứng dụng WordPress sử dụng Ansible, triển khai Zabbix
28
Trang 40volume zbx Load Balancer
Trên nền tang AWS, 1 VPC được tạo ra và trong đó có 2 máy tính ảo thuộc 1
subnet (public subnet), 1 load balancer target proup sẽ trỏ tới 2 máy tính ảo, mang
có thê kết nối Internet qua internet gateway
Trên OpenStack, 3 máy tính ảo nằm trong 1 security group, mỗi máy ảo đều đượcliên kết tới volume cần thiết
4.1.3 Mục tiêu
Mục tiêu dựa trên sơ đồ triển khai cơ bản:
e Tai máy tinh local sử dụng Terraform tao cơ sở hạ tầng theo code đã viết
trước cho cả 2 môi trường OpenStack và AWS.
e Trên AWS, máy tính ảo (instance) tạo ra bằng Terraform triển khai ứng
dung Wordpress tự sử dụng Docker và Terraform.
e Trên OpenStack, máy tính ảo (instance) tao ra bằng Terraform triển khai
ứng dụng Wordpress sử dụng Ansible và Terraform.
29