Làm hạ tầng giống như làm lập trình (nôm na của câu “Infrastructure As Code”) mà trong các tài liệu về Ansible hay PR. Vậy:
Ansible dùng để làm gì? Ansible phù hợp với ai? Ansible – có gì khó? Ansible – nên tiếp cận như thế nào?
Đó là hàng loạt các câu hỏi ban đầu khi tôi biết đến từ khóa Ansible từ vài năm trước. Cho đến tận bây giờ tôi mới bắt đầu quay lại làm chi tiết về nó với mục tiêu ứng dụng nó vào trong công việc của team hiện nay.
Gần đây, khi công việc tại team Onet bắt đầu nhiều lên, việc cần xử lý các hệ thống cũ & làm cho hệ thống sắp triển khai ít tốn công sức, chuẩn hóa & chính xác hơn thì tôi mới bắt đầu có điều kiện để quay lại tìm hiểu và ghi chép về ansible một cách đầy đủ để chia sẻ và phổ biến cho nhân sự trong team.
Cụ thể trong chuỗi bài viết này tôi sẽ đi lần lượt từng các vấn đề về ansible mà tôi có tìm hiểu được, chúng sẽ được chia sẻ thành các bài viết nối tiếp nhau và phân tích để đưa vào thực tế nhanh nhất.
Bài mở màn theo thói quen là tôi tổng hợp lại các lợi ích, lưu ý khi tìm hiểu về ansible để người đọc có thể nắm bắt được ý tưởng chính, các điểm mấu chốt và cùng thực hành để ứng dụng nhanh nhất.
1. Ansible được dùng khi nào?
Câu hỏi đầu tiên mà tôi đưa ra với tôi và chính team là “Ansible được dùng khi nào?” Có phải khi người khác nói về nói rất hay, rất tiện …. hay nó là xu hướng hoặc là trào lưu hay không?
Đối với tôi chắc chắn là khi lựa chọn ansible thì sẽ có ngữ cảnh áp dụng chứ không phải chạy theo mốt, theo xu hướng, theo trào lưu.
Hạ tầng hiện tại mà team tôi quản lý thì tính theo con số hàng trăm thiết bị (vật lý – không tính ảo hóa) và cả vài chục nhân sự triển khai, quản lý rồi nên mục tiêu của tôi cũng như anh/em là làm thế nào để quản lý hiệu quả, chính xác và giảm thiểu các rủi ro khi triển khai, khi vận hành. Đặc biệt là tái sự dụng kiến thức, công cụ và tiết kiệm được thời gian của nhau (của tôi cũng như nhân sự trong team của tôi). Như vậy chốt lại tôi sẽ ứng dụng ansible khi tôi cần các việc dưới đây (khi bạn muốn cũng được):
- Đảm bảo việc quản lý cấu hình của thiết bị, ứng dụng một cách hiệu quả, tức là quản lý đơn giản, kiểm soát được các cấu hình đúng và đủ hay chưa, chúng chạy có chính xác hay không.
- Tiết kiệm được công sức & thời gian khi phải triển khai đi triển khai lại.
- Tái sử dụng được các bước triển khai trước đó (các bước lặp đi lặp lại khi cài đặt, cấu hình máy chủ, cấu hình ứng dụng)
- Tự động hóa và áp dụng hàng loạt các việc trên hoàng loạt các server, hàng loạt các ứng dụng với thời gian ngắn nhất.
- Ngoài ra mục tiêu phụ là không để (tôi) – team tôi lạc hậu và theo kịp các stack về công nghệ hiện nay cùng với các công ty bạn. Cho nhân sự của team tôi khi đi đâu đó thì cũng tự tin vì những kiến thức đã có khi làm việc cùng team với tôi.
- Ansible sẽ không phù hợp theo quan điểm cá nhân của tôi khi mà bạn chưa vững về các ứng dụng sẽ được bạn sử dụng ansible để quản lý. Do vậy, muốn làm được Ansible để tự động hóa việc triển khai, quản lý cấu hình cho ứng dụng nào đó thì hãy nắm chắc chắn về ứng dụng đó trước khi áp dụng.
Lưu ý: Tôi biết tới ansible từ thời nó ra đời cùng với salt-stack, biết nó có vai trò giống như chef, puppet và trước khi Ansible được Redhat đổ tiền mua lại và tới bây giờ mới có ý định dùng thì chắc chắn không phải là tôi chạy theo công nghệ (vì chạy theo thì giờ đã hơi muộn rồi 🙂 ), tôi chỉ muốn bắt đầu tìm hiểu, ứng dụng nó một cách cẩn thận, phát huy được đúng vai trò của nó tại nơi mà tôi làm việc. Quan trọng hơn là làm cho văn hóa của team tôi hiện nay thấy nó có tác dụng.
2. Ansible phù hợp với ai?
Phù hợp với ai thì kệ, nhưng khi tìm hiểu và áp dụng Ansible, chắc chắn nó phải phù hợp với tôi và team tôi thì mới dùng được :). Nói vui vậy thôi, chứ Ai là người thích hợp dùng ansible thì nói nhan nhản ra rồi. Cứ thỏa mãn được các vấn đề ở phần “Ansible được dùng khi nào?” thì là phù hợp rồi, phần này tôi chỉ nói lại đặc điểm của team Onet và sự phù hợp của ansible.
Team Onet là team phát triển, triển khai vận hành dịch vụ cloud cho Onet (một Hosting Provider lâu đời ở Việt Nam), công việc của chúng tôi là tìm hiểu, thử nghiệm các thứ về Cloud (OpenStack, CEPH …) nói riêng và các giải pháp, sản phẩm OpenSource (OS Linux, Webserver, Database, HAproxy, Nginx, Container, Logging, Monitor …) nói chung – túm lại là cài cắm, triển khai rất nhiều thứ trên Linux.
Ngoài ra, chúng tôi còn có 1 team dev nằm ở phòng RD, các bạn ngoài việc dev thì làm luôn cả công tác triển khai, đôi khi tham gia vận hành và thậm chí cả xử lý các sự cố 🙂 (chưa kể còn làm cả việc viết bài trên trang news này nữa). Trend bây giờ gọi các bạn ý là devops ( tôi hay nói vui là dev ra rồi, không ai vận hành được thì làm luôn vận hành). Đó như vậy các công việc của các bạn ý cũng kha khá.
Như vậy tôi có thể nói Ansible sẽ phù hợp với những đối tượng sau
- System admin: những người quản trị, triển khai các hệ thống ứng dụng trên môi trường Linux (là chủ yếu), Windows cũng có thể nhưng team tôi ít làm nên không kể ra. Đặc điểm là công việc phải lặp đi lặp lại các nhiệm vụ triển khai, cấu hình, phân tích, đọc các log về vấn đề gặp phải.
- Developer: những bạn phát triển các ứng dụng, hay phải cài cắm mức cơ bản cho môi trường mà các sản phẩm các bạn ấy làm ra.
- DevOps: là người có đặc điểm mà tôi nói vui ở trên, nói dân dã là họ phải làm cả vai của lập trình viên và cả vai của system admin.
3. Ansible – có gì khó?
Ansible hay cái gì đó khi mới tìm hiểu chắc chắn sẽ có các cái khó (không khó thì việc gì phải tìm hiểu nhỉ). Nhưng thực sự với sự phát triển của ansible như bây giờ, đặc biệt là lượng người dùng, trao đổi & tài liệu cả tiếng Anh và tiếng Việt khắp nơi thì Ansible không khó một chút nào cả, nó chỉ nhiều thứ và có một số điểm cần lưu ý đối với team của bạn hoặc chính bạn, cụ thể như sau:
- Nếu bạn chưa có tư duy và thói quen tự động hóa (làm tự động các việc lặp đi lặp lại, thậm chí tự động một thứ trong tương lai sẽ làm lần đầu) thì khi tiếp cận độ khó tăng lên gấp đôi. Bạn phải có thói quen tự động hóa trước đã, tức là trước đó không cần dùng ansible bạn đã phải dùng bash script hoặc python hoặc thứ tương tự để tự động các việc bạn phải làm. Thậm chí dùng người khác để tự động việc cho bạn :v.
- Ansible sẽ là khó nếu bạn ngại đọc tài liệu hãng, ngại thực hành. Đúng vậy, bạn sẽ không thành thạo nếu như bạn không luyện tập, sẽ không hiểu biết thêm nếu bạn không chịu đọc thêm các tài liệu. Người dạy cho bạn cũng chỉ hạn chế hoặc các mẫu ví dụ cũng chỉ có giới hạn của nó, chính bạn dùng và áp dụng theo các tài liệu, phát triển thêm mới là điểm lý thú.
- Ansible sẽ là khó nếu bạn không có kinh nghiệm về linux. Chủ yếu tiếp cận đầu tiên với ansible là những người làm về linux và phát huy tốt trên môi trường linux. Nếu muốn tìm hiểu tốt về Ansible thì hãy tìm hiểu linux trước.
- Ansible sẽ là khó nếu chỉ một mình bạn dùng được. Hãy tìm hiểu kỹ, chia sẻ nó với người cùng team để phát huy sức mạnh tập thể.
- Ansible sẽ hơi khó khăn với các thế hệ 8x, 7x (hơi chứ không phải toàn bộ) vì đa số thế hệ đố đã quen với cách làm cũ, khi già rồi thì việc thay đổi rất khó khăn :D, hãy lưu ý, khi bạn có tuổi một chút bạn sẽ thấy điều này là đúng.
- Ansible sẽ có nhiều thuật ngữ mới. Ngay cả từ khóa Ansible cũng là mới và trong tài liệu của nó cũng sẽ có những khái niệm mới. Bạn buộc phải đọc nó kỹ, hiểu cách áp dụng và sử dụng thử để biết tác dụng của nó. Với vấn đề này thì hiện nay lượng tài liệu về Ansible không phải là ít nữa rồi, tuy nhiên hãy tìm hiểu các thuật ngữ mới này như thuật ngữ về inventory, plays, playbooks, var, group_vars, các module …. trước khi sử dụng.
4. Ansible – nên tiếp cận như thế nào?
Team tôi có độ tuổi từ 20 đến gần 40 với các vị trí dev, sysadmin, leader … Do vậy tôi rất lăn tăn việc tìm ra các tiếp cận phù hợp nhất (Phù hợp nhất chứ không phải phù hợp hết).
Sau thời gian tìm hiểu thì tôi vẫn thấy cách đi căn bản là phù hợp nhất, có nghĩa là phải có kiến thức nền, nền đối với Ansible theo tôi nghĩ là Linux căn bản, tương đương với LPI1, LPI2. Tức là phải tàm tạm mức OS của Linux và một số ứng dụng cơ bản được triển khai trên linux cần thành thạo một chút, ví dụ: SSH, SSH Keypair, Apache, Nginx, Database …
Tiếp theo là cần xây dựng một LAB tầm 03 máy chủ với các OS là CentOS7, CentOS6, Ubuntu Server 16.04, Ubuntu Server 18.04… để xây dựng một LAB có đủ môi trường để thực hành.
Trước khi tìm hiểu ansible, tốt nhất là bạn nên tự viết được hoặc đọc hiểu được các script bằng bash shell (cao hơn là các script bằng python) cho các ứng dụng cơ bản ví dụ như cài đặt wordpress chẳng hạn hoặc các framework lập trình nào đó. Để từ đó ánh xạ sang và chuyển thể sang ngôn ngữ của Ansible. Trong các loạt bài tới tôi sẽ thực hiện việc phân tích này nên nếu chưa bắt đầu được từ đây bạn có thể theo dõi chúng.
Ngoài ra, mỗi này nên đầu tư từ 30p – 180p về việc đọc, thực hành và ghi chép lại về ansible mà bạn tìm hiểu được.
5. Kết luận
Dài dòng vậy nhưng chung quy lại Onet chỉ muốn nhắn nhủ tới người mới bắt đầu rằng “Hãy bắt đầu từ những thứ căn bản, chăm chỉ rèn luyện thì bạn chắc chắn sẽ thu lại được những kết quả tốt” đối vói việc tìm hiểu ansible nói riêng và các vấn đề khác nói chung.
Cám ơn sự quan tâm của bạn, hi vọng sẽ có những trao đổi tại comment của bài viết này.
Sau khi đọc xong phần một này, bạn có thể tham khảo phần 2 để biết cách dựng bài LAB với Ansible, link tại đây