Skip to content

Commit 5b9432b

Browse files
committed
added content
1 parent 121a9a9 commit 5b9432b

4 files changed

Lines changed: 169 additions & 56 deletions

File tree

2022/vi/Days/day56.md

Lines changed: 44 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,35 @@
1-
## Cơ sở hạ tầng dưới dạng mã (Iac): Bức Tranh Toàn Cảnh!
1+
---
2+
title: '#90DaysOfDevOps - Bức tranh toàn cảnh: Cơ sở hạ tầng dưới dạng mã (IaC) - Ngày 56'
3+
published: false
4+
description: 90DaysOfDevOps - Bức tranh toàn cảnh: Cơ sở hạ tầng dưới dạng mã (IaC)
5+
tags: 'devops, 90daysofdevops, learning'
6+
cover_image: null
7+
canonical_url: null
8+
id: 1048709
9+
---
210

3-
Ngày nay ở bất kì lĩnh vực nào, chúng ta đang ở trong thời kì phát triển và tận dụng tối đa máy tính, máy móc thay con người xử lý các việc lặp đi lặp lại để bảo đảm giảm thiểu sai sót cá nhân trong mọi công việc
4-
Ví dụ: máy đóng hàng, phân loại hàng, dây chuyền sản xuất nước ngọt v..v. Hay nói riêng lĩnh vực công nghệ thông tin: xây dựng hạ tầng, tự động hóa triển khai ứng dụng
11+
## Bức tranh toàn cảnh: Cơ sở hạ tầng dưới dạng mã (IaC)
512

6-
Vậy? chúng ta - là những lập trình viên xây dựng ra các ứng dựng, hệ thống tự động hóa nói trên như thế nào
7-
Chúng đã xây dựng những kịch bản trong trường hợp rủi ro mất toàn bộ hạ tầng vật lý, ảo hóa, điện toán đám mây?
8-
Mất bao lâu để chúng ta có thể thay thế toàn bộ chúng trong trường hợp nêu trên?
13+
Con người phạm sai lầm và tự động hoá là đường đi đúng đắn!
914

10-
Cơ sở hạ tầng dưới dạng mã ra đời nhằm giúp chúng ta có khả năng trả lời các câu hỏi trên, kiểm tra, thay thế trong trường hợp sự cố, tuy nhiên chúng ta không nên nhầm lẫn chúng với khái niệm sao lưu và phục hồi. Thay vào đó, xét theo khía cạnh về cơ sở hạ tầng và các môi trường phát triển phần mềm, chúng ta có khả năng triển khai, vận hành và thay đổi chúng một cách thân thiện, và dễ dàng nhất.
15+
Bạn đang làm thế nào để xây dựng hế thống của bạn?
1116

12-
TLDR; Chúng ta có khả năng sử dụng mã để xây dựng lại toàn bộ môi trường từ đầu.
17+
Kế hoạch của bạn là gì nếu bạn mất tất cả mọi thứ hôm nay, các máy chủ vật lý, máy ảo, VMs trên điện toán đám mây, Cloud PaaS...?
1318

14-
Nếu còn nhớ ngay từ những ngày đầu tiên chúng ta đã nhắc đến khái niệm DevOps nói chung là một cách để phá vỡ rào cản để cung cấp hệ thống cho môi trường (production) của một hệ thống công nghệ thông tin một cách an toàn và nhanh chóng.
19+
Bạn sẽ mất bao lâu để thay đổi mọi thứ?
1520

16-
Cơ sở hạ tầng dưới dạng mã giúp chúng ta cung cấp các hệ thống này, chúng ta cũng đã nói đến rất nhiều các quy trình, công cụ. IaC mang đến chúng ta những công cụ đơn giản để thực hiện quy trình triển khai hạ tầng như vậy.
21+
Cơ sở hạ tầng dưới dạng mã (Infrastructure as Code - IaC) cung cấp giải pháp để có thể thực hiện được việc này, đồng thời có thể kiểm thử chúng, chúng ta không nên nhầm lẫn điều này với sao lưu và phục hồi, xét về cơ sở hạ tầng và môi trường, các nền tảng của bạn sẽ được xử lý và đối xử như cách bạn nuôi thú cưng và gia xúc.
1722

18-
Ở phần này, chúng ta sẽ tập trung vào cơ sở hạ tầng dưới dạng mã (IaC). Các bạn cũng có thể nghe nói đến cơ sở hạ tầng từ mã, cấu hình dạng mã (CaS). Tuy nhiên xét đến mức độ phổ biến chúng ta sẽ hiểu nó là Cơ Sở Hạ Tầng Dưới Dạng Mã (IaC)
23+
TLDR là chúng ta có thể sử dụng mã để xây dựng lại toàn bộ môi trường của mình.
1924

20-
Ở bài viết gốc, tác giả nhắc đến việc sử dụng IaC giống như chúng ta đang chăn nuôi gia súc và vật nuôi trong nhà với sự hài hòa, thân thiện với con người.
25+
Nếu chúng ta còn nhớ ngay từ đầu, chúng ta đã nói về DevOps nói chung là một cách phá vỡ các rào cản để triển khai các hệ thống đến production một cách nhanh chóng và an toàn.
2126

27+
Cơ sở hạ tầng dưới dạng mã (IaC) giúp chúng ta triển khai các hạ tầng hệ thống, chúng ta đã nói rất nhiều về quy trình và các công cụ. IaC mang đến cho chúng ta nhiều công cụ để có thể có thể quen thuộc với việc làm điều này trong quy trình triển khai hệ thống.
28+
29+
Chúng ta sẽ tập trung vào Cơ sở hạ tầng dưới dạng mã trong tuần này. Bạn cũng có thể nghe điều này được đề cập với các khái niệm như Cơ sở hạ tầng từ mã hoặc cấu hình dưới dạng mã. Tôi nghĩ thuật ngữ phổ biến nhất vẫn sẽ là "Cơ sở hạ tầng dưới dạng mã - IaC"
2230
### Tính thân thiện
2331

24-
Cùng xem xét đến các yếu tố ban đầu của DevOps, chúng ta đã nghe nói đến yêu cầu của việc xây dựng một ứng dụng mới, hầu hết trước đây chúng ta sẽ triển khai, chuẩn bị các hệ thống máy chủ một cách thủ công. Các bước này bao gồm:
32+
Nếu chúng ta xem xét về thời trước khi có DevOps, nếu chúng ta yêu cầu xây dựng ứng dụng mới, chúng ta sẽ chuẩn bị phần lớn các máy chủ của mình theo cách thủ công, việc này cũng giống như bạn chăm sóc cho thú cưng của mình.
2533

2634
- Triển khai máy ảo | Trước khi có công nghệ ảo hóa thì sẽ là các máy chủ vật lý và cài đặt hệ điều hành
2735
- Cài đặt, cấu hình mạng
@@ -30,7 +38,7 @@ Cùng xem xét đến các yếu tố ban đầu của DevOps, chúng ta đã ng
3038
- Cấu hình phần mềm
3139
- Cài đặt cơ sở dữ liệu
3240

33-
Đương nhiên là trước đây, tất cả các tác vụ này đều được thực hiện thủ công bởi chuyên viên quản trị hệ thống SysAdmin. Đối với ứng dụng có quy mô lớn hơn, cần nhiều tài nguyên và máy chủ hơn, đương nhiên sẽ cần nhiều công sức hơn để cài đặt chúng. Do vậy chúng sẽ lấy đi rất nhiều công sức của nhân lực lao động (là chính chúng ta) cũng như thời gian, điều mà các doanh nghiệp sẽ phải chi trả trong toàn bộ quá trình xây dựng môi trường công nghệ thông tin ứng dụng này. Đặc biệt là ngay từ đầu nội dung buổi hôm nay tác giả đã chia sẻ, việc gặp rủi ro từ cá nhân đều có thể xẩy ra khiến chi phí để bù lấp sai lầm này có thể sẽ rất lơn, vì vậy tự động hóa sẽ là sự lựa chọn hàng đầu.
41+
Trước đây, tất cả các tác vụ này đều được thực hiện thủ công bởi chuyên viên quản trị hệ thống SysAdmin. Đối với ứng dụng có quy mô lớn hơn, cần nhiều tài nguyên và máy chủ hơn, đương nhiên sẽ cần nhiều công sức hơn để cài đặt chúng. Do vậy chúng sẽ lấy đi rất nhiều công sức của nhân lực lao động (là chính chúng ta) cũng như thời gian, điều mà các doanh nghiệp sẽ phải chi trả trong toàn bộ quá trình xây dựng môi trường công nghệ thông tin ứng dụng này. Đặc biệt là ngay từ đầu nội dung bài viết tôi đã chia sẻ, việc gặp rủi ro từ cá nhân đều có thể xảy ra khiến chi phí để bù lấp sai lầm này có thể sẽ rất lơn, vì vậy tự động hóa sẽ là sự lựa chọn hàng đầu.
3442

3543
Quay trở lại nội dung chính, tiếp theo sau khi các bước cài đặt ban đầu hoàn thiện, chúng ta vẫn còn cần tiến hành bảo trì, quản lý và vận hành các hệ thống máy chủ nói trên, bao gồm:
3644

@@ -43,73 +51,78 @@ Quay trở lại nội dung chính, tiếp theo sau khi các bước cài đặt
4351

4452
Các bạn hãy tưởng tượng từng đó công việc sẽ được lặp đi lặp lại cho các môi trường phát triển như: dev, test, production ... độ phức tạp vì vậy cũng tăng lên.
4553

46-
Đó cũng chính là lý do mà IaC giải quyết được các vấn đề này, việc triển khai lúc này cũng giống như việc chúng ta nuôi dưỡng một vật nuôi trong gia đình, chúng ta có thể đặt tên cho chúng, nuôi dưỡng chúng và sống cùng chúng ta, gọi là vòng đời của một phần mềm (SDLC)
54+
Đây là lúc cơ sở hạ tầng dưới dạng mã xuất hiện, ở trên đã có nhiều việc chúng ta chăm sóc những máy chủ này như những thú cưng, mọi người thậm chí còn còn gọi các máy chủ của mình với tên gọi như thú cưng hoặc ít nhất là đặt tên cho chúngchúng sẽ ở đó một thời gian họ hi vọng chúng sẽ trở thành một phần của "gia đình" trong một thời gian.
4755

48-
Với IaC, chúng ta tự động hóa tất cả các bước nêu trên từ đầu đến cuối. IaC chính là khái niệm và một số các công cụ chúng ta quan tâm để khởi tạo tự động hạ tầng, trong trường hợp xấu, rủi ro xẩy ra và ảnh hưởng đến hệ thống máy chủ, chúng ta hoàn toàn có thể loại bỏ nó và khởi tạo một máy chủ khác để thay thế nó. Cũng chính vì nó được tự động hóa hoàn toàn nên khi máy chủ mới được khởi tạo nó sẽ giống chính xác hoàn toàn với các đoạn mã mà chúng ta viết. **Câu này khó quá** `At this point we don't care what they are called they are there in the field serving their purpose until they are no longer in the field and we have another to replace it either because of a failure or because we updated part or all of our application.`
56+
Với cơ sở hạ tầng dưới dạng mã IaC, chúng ta có thể tự động hoá tất các tác vụ này từ đầu đến cuối. Cơ sở hạ tầng dưới dạng mã một khái niệm và một số cung cụ thực hiện việc cung cấp cơ sở hạ tầng một cách tự động, và nếu có điều gì đó xảy ra với máy chủ, bạn sẽ vứt bỏ nó và khởi động lại một cái mới. Quá trình này được tự động hoá và máy chủ sẽ được tại chính xác như những gì được cấu hình trong mã. Tại thời điểm này, chúng ta không quan tâm chúng được gọi là gì, chúng ở đó phục vụ mục đích của chúng ta cho đến khi không còn ở đó nữa và chúng ta sẽ có cái khác để thay thế, có thể do bị lỗi hoặc vì chúng ta đã cập nhật một phần hoặc toàn bộ ứng dụng của mình.
4957

5058
IaC được sử dụng ở hầu hết mọi nền tảng, công nghệ ảo hóa, công nghệ điện toán đám mấy và công nghệ ứng dụng khai thác lợi ích của điện toán đám mây (Cloud Native) như Kubernetes hay containers.
5159

5260
## Khởi tạo cơ sở hạ tầng
53-
Thay vì việc nhắc đến `chef`, `puppet``ansible` ngay từ đầu là những công cụ vô cùng phù hợp để giải quyết yêu cầu khởi tạo, cài đặt ứng dụng và quản lý chúng.
5461

55-
Ở các tác vụ về việc khởi tạo cơ sở hạ tầng dưới đây, IaC không hoàn toàn hỗ trợ được hết các tác vụ này. Tuy nhiên với Terraform (quan điểm cá nhân mình đánh giá đây không phải ngôn ngữ lập trình mà là dạng khai báo), đây là công cụ cho phép chúng ta thực hiện tốt và đầy đủ 2 yếu tố được nêu ở phía dưới, nó cho phép chúng ta khởi tạo hạ tầng từ số 0, chúng ta định nghĩa hạ tầng bằng các đoạn mã với các tham số mà chúng ta đã lên kịch bản rồi triển khai nó (deploy). IaC cũng cho phép chúng ta quản lý hạ tầng và cũng có thể triển khai ứng dụng, tuy nhiên hạn chế của nó là không theo dõi được trạng thái hiện tại của ứng dụng sau khi chúng ta triển khai, về việc này ở nội dung bài sau chúng ta sẽ đề cập đến một công cụ khác là Ansile - một công cụ quản lý cấu hình.
62+
Không phải các công cụ IaC sẽ bao gồm tất cả những điều bên dưới, bạn sẽ thấy rằng công cụ chúng ta tìm hiểu ở phần này chỉ thực sự bao gồm 2 lĩnh vực đầu tiên trong danh sách dưới đây. Terraform là công cụ mà chúng ta sẽ cho phép chúng ta bắt đầu từ số không, định nghĩa trong code xem cơ sở hạ tầng của chúng ta sẽ trông như thế nào và sau đó triển khai nó, nó cũng cho phép chúng ta quản lý cơ sở hạ tầng đó và ban đầu cũng có thể triển khai một ứng dụng nhưng sau đó, nó sẽ không quản lý ứng dụng nữa, đây là nơi mà phần tiếp theo sẽ xuất hiện và một công cụ quản lý cấu hình như Ansible sẽ đáp ứng được nhu cầu này một cách tốt hơn.
63+
64+
Các công cụ như `chef`, `puppet``ansible` ngay từ đầu là những công cụ vô cùng phù hợp để giải quyết yêu cầu khởi tạo, cài đặt ứng dụng và quản lý chúng.
5665

5766
Vậy các công việc khởi tạo, cài đặt cấu hình một phần mềm sẽ gồm những gì?
5867

59-
- Khởi tạo máy chủ đồng loạt
68+
- Khởi tạo máy chủ mới
6069
- Cấu hình mạng máy tính
6170
- Cấu hình bộ cân bằng tải ứng dụng
6271
- Cấu hình ở mức hạ tầng
6372

6473
### Cấu hình cơ sở hạ tầng
74+
6575
- Cài đặt các ứng dụng, phần mềm theo yêu cầu lên máy chủ (các phần mềm để chạy được ứng dụng ví dụ: python, go...)
6676
- Chuẩn bị hàng loạt máy chủ để triển khai ứng dụng (lặp lại các bước trên trên rất nhiều máy chủ)
6777

6878
### Triển khai phần mềm
6979

7080
Sau khi hạ tầng máy chủ đã sẵn sàng chúng ta sẽ triển khai ứng dụng lên các máy chủ này, việc này bao gồm các bước sau:
81+
7182
- Triển khai, quản lý ứng dụng (bao gồm ứng dụng, thư viện hỗ trợ)
7283
- Bảo trì
7384
- Cập nhật phần mềm (cũng có thể là các thư viện phụ thuộc)
7485
- Định lại cấu hình trong trường hợp cần thiết
7586

7687
### Sự khác nhau giữa các công cụ IaC
7788

78-
Khai báo và trình tự thực hiện
79-
Declarative vs procedural
89+
Khai báo và trình tự thực hiện (Declarative vs procedural)
8090

8191
Trình tự thực hiện
92+
8293
- Các bước trong IaC được làm tuần tự, theo từng bước
8394
- Khởi tạo máy chủ, thêm máy chủ vào hệ thống và thay đổi cấu hình
8495

8596
Khai báo
86-
- Khai báo kết quả mong muốn (eg: tạo 1 hoặc nhiều máy chủ cùng lúc)
87-
- Ví dụ: Khởi tạo 2 máy chủ, hoặc 2 bucket
8897

89-
Tính bất biến và tính khả biến (có thể và không thể thay đổi)
90-
Tác giả so sánh tính khả biến với các con thú cưng, tính bất biến với các loại gia súc
98+
- Khai báo kết quả mong muốn (VD: tạo 1 hoặc nhiều máy chủ cùng lúc)
99+
- Ví dụ: Khởi tạo 2 máy chủ, hoặc 2 buckets
100+
101+
Tính bất biến (gia súc) và tính khả biến (thú cưng)
91102

92103
Khả biến
93104
- Có thể thay đổi cấu hình thay vì ghi đè hoặc thay thế (ví dụ: thay đổi tên của máy chủ Windows, đổi tagging của s3 bucket)
94105
- Vì có tính khả biến nên vòng đời sẽ lâu hơn.
95106

96107
Bất biến
97-
- Khi muốn thay đổi chúng ta buộc phải thay thế mới
108+
- Khi muốn thay đổi chúng ta thay thế mới
98109
- Vòng đời ngắn hơn.
99110

100-
Mỗi tài nguyên trong hệ thống đều có thể có một hoặc nhiều tính khả biến và bất biến
111+
Mỗi tài nguyên trong hệ thống đều có thể có một hoặc nhiều tính khả biến và bất biến.
112+
101113
Lấy ví dụ như sau:
102114
- 01 AWS S3 bucket khi đã đặt tên (bucket name) sẽ bắt buộc là duy nhất và không thể thay đổi được tuy nhiên ta hoàn toàn có thể thay đổi nhãn (tag) của chúng mà không cần phải tạo mới bucket
103115
- Ví dụ thứ 2, với một container image, chúng ta sẽ cần nó là bất biến, nghĩa là khi muốn cập nhật mã nguồn chúng ta bắt buộc phải tạo container image mới
104116

105117
Với các ví dụ trên, có rất nhiều lựa chọn cho IaC, tuy nhiên không có công cụ IaC nào có thể định nghĩa cũng như giải quyết được hết các tính chất này, thay vào đó chúng ta phải hiểu được tính chất của từng tài nguyên (resource, infra - hạ tầng)
106118

107-
Cũng trong seri này, chúng ta sẽ bắt đầu thực hành với Terraform, công cụ được coi là thích hợp nhất ở thời điểm hiện tại để giúp chúng ta thấy được lợi ích mà IaC mang lại. Việc thực hành cũng là cách tốt nhất để nâng cao khả năng, kỹ năng lập trình.
119+
Cũng trong series này, chúng ta sẽ bắt đầu thực hành với Terraform, công cụ được coi là thích hợp nhất ở thời điểm hiện tại để giúp chúng ta thấy được lợi ích mà IaC mang lại. Việc thực hành cũng là cách tốt nhất để nâng cao khả năng, kỹ năng lập trình.
108120

109121
Tiếp theo, bắt đầu với lý thuyết về Terraform ở mức độ cơ bản (101) sau đó chúng ta sẽ bắt đầu thực hành
110122

111123
## Tài liệu Tham khảo
112-
Tác giả đã liệt kê ra rất nhiều nội dung bên dưới đây để chúng ta có thể bắt đầu học và tham khảo, với các nội dung này phần nào có thể giúp chúng ta nhanh chóng nắm được khái niệm và các lý thuyết xung quanh IaC
124+
125+
Tôi đã liệt kê ra rất nhiều nội dung bên dưới đây để chúng ta có thể bắt đầu học và tham khảo, với các nội dung này phần nào có thể giúp chúng ta nhanh chóng nắm được khái niệm và các lý thuyết xung quanh IaC
113126

114127
- [What is Infrastructure as Code? Difference of Infrastructure as Code Tools](https://www.youtube.com/watch?v=POPP2WTJ8es)
115128
- [Terraform Tutorial | Terraform Course Overview 2021](https://www.youtube.com/watch?v=m3cKkYXl-8o)
@@ -122,4 +135,5 @@ Tác giả đã liệt kê ra rất nhiều nội dung bên dưới đây để
122135
- [Terraform Tutorial - The Best Project Ideas](https://www.youtube.com/watch?v=oA-pPa0vfks)
123136
- [Awesome Terraform](https://github.com/shuaibiyy/awesome-terraform)
124137

125-
Hẹn gặp lại các bạn ở ngày tiếp theo [Day 57](day57.md)
138+
Hẹn gặp lại các bạn ở ngày [ngày 57](day57.md)
139+

0 commit comments

Comments
 (0)