Lộ trình trở thành DevOps Engineer (thực tế) *Ký bút: devopsedu.vn kế thừa tư tưởng của elroydevops.tech luôn cung cấp kiến thức DevOps thực tế và chi tiết. Mình không cho phép bản thân làm những kiến thức mà mình không tin rằng nó tốt cho mọi người được. Nếu những bài viết dài khiến bạn không thể kiên nhẫn, thì kiến thức này dành cho những ai thật sự cần kiến thức thực tế. Mạnh, FounderTại sao lộ trình DevOps của devopsedu.vn cung cấp là kiến thức thực tế? Từ chính bản thân mình luôn muốn cung cấp tới mọi người những kiến thức DevOps thực tế và chất lượng. Và kết quả là câu trả lời tốt nhất cho điều đó.Từ lộ trình DevOps và các series rất cụ thể của devopsedu.vn đã giúp được rất nhiều bạn trở thành DevOps Engineer và tăng thu nhập từ các vị trí intern, fresher, junior, middle,... Bạn có thể tham khảo một vài tâm sự của các bạn đi trước đã trở thành DevOps Engineer dưới đây hoặc xem toàn bộ tại bài viết này. Và hàng tháng devopsedu.vn đều có từ 7k → 10k+ lượt người dùng truy cập và từ 140k → 210k+ lượt xem trang.https://player.vimeo.com/video/996818584?badge=0&autopause=0&player_id=0&app_id=58479Chắc hẳn bạn cũng hiểu, trong thời kỳ thị trường việc làm đang khó khăn tuyển dụng nhân sự ít kinh nghiệm giảm đi đáng kể. Có những bạn ra trường cả năm rồi nhưng chưa có việc làm chuyên ngành.Vì các bạn đều có những kỹ năng giống nhau, cùng ngôn ngữ lập trình đó, cùng tấm bằng như vậy, cùng một vài dự án mẫu cá nhân nên sự cạnh tranh vô cùng lớn.Mình hiểu được điều đó, mình vẫn hay nhận được những câu hỏi về lộ trình DevOps từ các bạn muốn học và làm DevOps, trở thành DevOps Engineer. Và lộ trình DevOps này sẽ phù hợp cả với những bạn Developer, Sysadm, DBA,... vì số lượng các bạn Developer quá đông và ngày một gia tăng nên nếu không có thêm kỹ năng, giá trị khác thì không có gì nổi bật để cạnh tranh với rất nhiều chiếc CV tương đồng ngoài kia.Hay những bạn làm trong ngành cũng 7-10 năm nhưng thuần là Developer Fullstack chưa biết về lộ trình DevOps, chưa biết làm sao học và làm DevOps hiệu quả để gia tăng thu nhập.Nên dựa vào kinh nghiệm thực tế mình làm trong doanh nghiệp, tư vấn cho các doanh nghiệp thực tế và một chút kết quả nhất định của các bạn học từ kiến thức DevOps mà mình chia sẻ những năm qua, trong bài viết này bạn sẽ biết được lộ trình trở thành DevOps Engineer - lộ trình học DevOps (đúc kết thực tế). DevOps là gì? DevOps là làm cái gì? Đầu tiên, chúng ta sẽ cùng tìm hiểu về những khái niệm và thực tế DevOps là gì? Và DevOps là làm gì? Những lý thuyết đã rất nhiều trên internet bạn có thể thấy dễ dàng và mình chỉ muốn tập trung vào kiến thức DevOps thực tế.Và mình có thể khẳng định. Không có bất cứ một định nghĩa cụ thể, chính xác, quy chuẩn nào về công việc của một DevOps Engineer làm gì trong một doanh nghiệp thực tế. Và theo khái niệm DevOps là sự kết hợp của văn hóa, con người và công cụ.Chính vì vậy, văn hóa mỗi công ty là khác nhau, con người là khác nhau, và cả công cụ cũng sẽ khác nhau. Tuy nhiên, bạn thấy những tin tuyển dụng vị trí DevOps Engineer yêu cầu biết các công nghệ như Docker, Gitlab CI, Jenkins, K8s, Ansible, AWS, Terraform, Zabbix,... Nên tồn tại vị trí này cũng là sự hợp lý và cần thiết tất yếu.Và thông thường, hiện tại các công ty đang hiểu công việc của một DevOps Engineer là tối ưu, cấu hình tự động, giám sát hệ thống, khắc phục sự cố hay nói đơn giản là một người vừa hiểu bên Developer đang làm gì và vừa hiểu bên Operator đang làm gì.Ví dụ, có những công ty chưa có một văn hóa DevOps cụ thể thì thường các bạn Developer hay Operator sẽ kiêm luôn một vài công việc "chung" của DevOps như triển khai dự án, tối ưu dự án, tự động dự án, giám sát dự án, bảo trì dự án, trực Jira,...Tuy nhiên, thực tế hơn thị trường làm việc yêu cầu gì thì chúng ta sẽ cung cấp cái đó. DevOps có 3 phần chính như trên nhưng làm sao để biết được rằng bạn có phù hợp với văn hóa, quy trình phát triển phần mềm của doanh nghiệp hay không? Làm sao biết được rằng bạn có phù hợp với con người của doanh nghiệp hay không? Những cái đó đều cần thời gian, nên cái cuối cùng cũng chính là sử dụng các công cụ điều kiện đầu tiên để bạn có được việc làm DevOps cũng chính là nội dung của lộ trình DevOps mà mình sẽ hướng dẫn tới mọi người. Vì vậy, vẫn theo đúng tư duy "sự tập trung" từ trước đến giờ của mình đây là một lộ trình trở thành DevOps Engineer - lộ trình DevOps đúng cách đi lên từ việc biết sử dụng các công cụ DevOps vào dự án trong doanh nghiệp. Lộ trình trở thành DevOps Engineer Đây sẽ là một lộ trình DevOps cụ thể chi tiết kèm nguồn các mục kiến thức để giúp bạn có con đường đi để trở thành DevOps Engineer thực tế. Tuy nhiên chắc chắn chúng ta cũng sẽ phải cam kết với nhau. Dù kiến thức mình cung cấp có tốt có phù hợp đến đâu nhưng nếu bạn không có khát vọng lấy thì mãi mãi bạn sẽ nhìn người khác phát triển và bỏ xa bạn.Và kể cả ngay khi bạn đang đọc bài lộ trình trở thành DevOps Engineer này thì các bạn khác vẫn đang miệt mài học các kiến thức trên devopsedu.vn. Linux Linux, đây chính là mảng kiến thức đầu tiên mà bạn cần học.Ở đây nếu như xuất phát điểm của bạn là Operator thì sẽ có một lợi thế rất lớn chính là việc sử dụng và tương tác với Linux đã khá quen thuộc nên giai đoạn này có thể nhanh hơn các bạn xuất phát điểm là Developer.Vì bản chất phần "công cụ" được nói tới trong lộ trình DevOps chúng ta tương tác với server rất nhiều cho các tác vụ triển khai, bảo trì, khắc phục sự cố dự án. Mà Linux là một hệ điều hành được sử dụng vô cùng rộng rãi trong các doanh nghiệp vì nhiều ưu điểm của nó. Nên việc hiểu biết, nắm rõ linux là điều tất yếu.Trong series DevOps for Freshers mình đã có hướng dẫn rất cụ thể:Tại sao sử dụng Linux?Cài đặt trình ảo hóa homelab.Triển khai một server Linux từ đầu.Các câu lệnh hay dùng trong Linux phục vụ công việc.Cách sử dụng trình soạn thảo chuyên nghiệp.Các câu lệnh khác nâng cao về system, networking,...Quyền truy cập và sử dụng trên Linux (cực kỳ quan trọng - bắt buộc phải nắm rõ).Ngoài ra, để nâng cao trình độ "gõ command line" và hiểu biết sâu rộng hơn về Linux bạn có thể tham khảo LPI-1 và LPI-2 những tài liệu bằng PDF đã rất dễ dàng tìm kiếm được trên google rồi.Và sau khi đã học xong series DevOps for Freshers thì bạn mới nên học sâu hơn về Linux và rất nhiều bạn chỉ cần dựa vào kiến thức của series này mà có được công việc (kết quả). Triển khai dự án (Tìm hiểu về ngôn ngữ lập trình) Sau khi bạn đã cài đặt và sử dụng Linux đã hiểu được những thành phần, câu lệnh căn bản rồi thì tiếp tục trong lộ trình trở thành DevOps Engineer - lộ trình DevOps thực tế này chúng ta đến ngay với triển khai dự án.Ở đây nếu như bạn xuất phát điểm là Developer thì sẽ có một lợi thế nhất định chính là bạn hiểu ngôn ngữ lập trình/công nghệ mà bạn đang làm nên các quy trình khởi chạy dự án bạn cũng đã nắm được phần nào, nên sẽ nhỉnh hơn các bạn có xuất phát điểm là Operator, khi cần triển khai một loại ngôn ngữ lập trình/công nghệ sẽ phải đi tìm hiểu từ đầu.Hiểu được điều đó, trong series DevOps for Freshers mình đã sử dụng phương pháp giảng dạy xuyên suốt cũng là "kim chỉ nam" của devopsedu.vn mà trong phần giới thiệu - devopsedu.vn bạn đã biết, chính là từng bước tìm hiểu cùng các bạn những kiến thức và dần dần hoàn thành mục tiêu:Cách nghiên cứu để khởi chạy dự án bất kỳ.Tư duy triển khai mọi dự án.Triển khai dự án frontend (nhiều cách).Triển khai dự án backend.Vì vậy, bạn hoàn toàn có thể chủ động áp dụng vào dự án của bạn mà không phải lo rằng "ngôn ngữ lập trình của dự án tôi khác", bạn đã nắm được bản chất cách để nghiên cứu và tìm hiểu khi bắt đầu một dự án với một công nghệ khi học series rồi. Git Sau khi bạn tương tác trên server được một thời gian với các câu lệnh và triển khai thành công dự án.Bây giờ tiếp tục trong lộ trình trở thành DevOps Engineer - lộ trình DevOps, chúng ta sẽ tiến đến sử dụng Git trong đó Git Workflow có thể nói là cực kỳ quan trọng (bắt buộc phải nắm rõ) trong quy trình phát triển phần mềm.Tất cả source code dự án của bạn, team và cả công ty/doanh nghiệp nằm trên Git, cũng như cách tổ chức các nhánh (branch) như thế nào để "phù hợp" và "Chuẩn" quốc tế.Hay xa hơn sẽ tích hợp các công cụ tự động để triển khai dự án thì bạn phải biết sử dụng Git và thành tạo ở mức độ nhất định.Hiểu được điều đó, trong series DevOps for Freshers mình đã hướng dẫn rất cụ thể: Kiến thức nền tảng của Git.Cách cài đặt Git server (Git remote) để lưu trữ source code chuyên nghiệp.Những câu lệnh Git hay dùng.Triển khai, tổ chức dự án theo Git Workflow.Vì vậy, việc cài đặt triển khai và sử dụng thực tế sẽ giúp bạn nhanh chóng nắm bắt mảng kiến thức quan trọng này đặc biệt là Git Workflow. Bạn sẽ hiểu được nhánh nào được phép commit code trực tiếp, người nào được phép merge code, khi có lỗi sẽ có những bước fix như thế nào,... Container Tiếp tục trong lộ trình trở thành DevOps Engineer - lộ trình DevOps chúng ta có mảng kiến thức rất quan trọng chính là Container.Trước đây khi chúng ta triển khai dự án thì đang chạy trên chính server Linux đó, tức là ví dụ bạn muốn triển khai dự án Java sẽ cần cài Maven, Java lên trực tiếp trên server mới có thể đóng gói (build) và khởi chạy (run) dự án.Còn với Container thì dễ dàng hơn rất nhiều, bạn có thể hiểu đơn giản là trên server Linux của chúng ta sẽ tạo ra các môi trường riêng biệt (chính xác là container) nó chỉ có chứa các thành phần cần thiết để chạy dự án vì vậy chúng ta có thể chạy rất nhiều dự án mà không lo xung đột package giữa các dự án. Và nền tảng thông dụng nhất hiện tại vẫn là Docker.Mảng kiến thức này Developer sẽ dễ dàng tiếp thu và làm hơn so với Operator vì bản chất Developer hiểu được quá trình chạy dự án của mình nên có thể dựa vào đó viết file cấu hình (Dockerfile) để chạy dự án.Hiểu được điều đó, trong series DevOps for Freshers mình đã hướng dẫn cụ thể:Container là gì? Tại sao cần sử dụng container?Cách cài đặt và sử dụng Docker.Tư duy cách docker hóa các dự án thực tế.Cách docker hóa dự án backend cụ thể.Cách docker hóa dự án frontend cụ thể.Cài đặt registry - một nền tảng lưu trữ docker image riêng biệt.Sử dụng các thành phần khác như volume, network,...Trong series mình sẽ hướng dẫn bạn triển khai từng bước chi tiết để docker hóa dự án với những các viết Dockerfile tối ưu, bảo mật và thực tế. CI/CD Sau khi bạn đã sử dụng Docker và Git cũng như hiểu được quy trình mà các bạn Developer làm việc như thế nào trên Git và các bạn Operator lấy code từ đâu trên Git để triển khai dự án.Tiếp tục trong lộ trình trở thành DevOps Engineer - lộ trình DevOps chúng ta có mảng kiến thức cực kỳ quan trọng chính là CI/CD. Đây là từ viết tắt của 2 phương pháp Continuous Integration/Continuous Delivery và Continuous Integration/Continuous Deployment.Thì bạn có thể hiểu đơn giản, đây là một phương pháp giúp bạn có thể triển khai dự án hoàn toàn tự động. Trước đây thay vì bên Developer sẽ push code lên Git và Bên Operator lấy code từ Git rồi triển khai thủ công trên server thì đến hiện tại tất cả các công đoạn đó sẽ chỉ cần một dòng lệnh "commit" hoặc "1 click".Mảng kiến thức này bạn là Developer hay Operator đều nên biết kể cả chưa định hướng thành DevOps Engineer cũng sẽ đều nổi bật hơn các ứng viên khác rất là nhiều.Hiểu được điều đó, trong series DevOps for Freshers mình đã hướng dẫn cụ thể:CI/CD là gì? Tại sao CI/CD lại quan trọng đến vậy?Cách triển khai CI/CDelivery (Bán tự động).Cách triển khai CI/CDeployment (Tự động hoàn toàn).Cách triển khai CI/CD cho dự án Docker.Cách triển khai tự động dự án trên các môi trường dự án.Các ứng dụng khác của các công cụ CI/CD.Trong series mình sẽ hướng dẫn bạn 2 công cụ CI/CD thịnh hành và được ưa dùng, tuyển dụng nhất chính là Gitlab CI và Jenkins. Vì đều là những kiến thức thực tế nên nếu bạn là người mới mà bạn chăm chỉ làm và tiếp thu sẽ lấy được nhiều nhất giá trị để có thể ứng dụng được ngay vào công việc. Monitoring Sau khi bạn đã hiểu và triển khai tự động được dự án theo 2 cách bán tự động và tự động hoàn toàn.Tiếp tục trong lộ trình trở thành DevOps Engineer - lộ trình DevOps chúng ta có mảng kiến thức cũng cực kỳ quan trọng chính là Monitoring.Chắc chắn rồi, sau khi mà chúng ta triển khai dự án thành công thì tiếp theo chúng ta sẽ cần phải giám sát nó để đảm bảo việc nếu server bị quá tải hay bị lỗi làm ảnh hưởng trải nghiệm người dùng sẽ có một kênh theo dõi tập trung và thông báo lại để nhanh chóng khắc phục sự cố.Vì chắc chắn rồi chúng ta không thể khi có lỗi rồi mới sửa hay phải ngồi canh màn hình server 24/24 lúc đó monitoring vô cùng hữu hiệu và là công cụ phải có trong doanh nghiệp.Mảng kiến thức này bạn Operator thì sẽ quen thuộc hơn bạn Developer rất nhiều.Hiểu được điều đó, trong series DevOps for Freshers mình đã hướng dẫn cụ thể:Monitoring là gì? Công cụ nào monitoring mạnh mẽ được ưa dùng.Cách cài đặt công cụ monitoring.Cấu hình công cụ monitoring để theo dõi tình trạng của dự án.Cấu hình công cụ monitoring để theo dõi tình trạng của serverCấu hình công cụ monitoring để theo dõi tình trạng của database.Trong series mình sẽ hướng dẫn bạn giám sát dự án và server một cách hiệu quả tự động, ngoài ra còn gửi cảnh báo về các kênh thông tin như telegram để tránh việc bỏ lỡ cảnh báo.Đến đây các phần kiến thức trên trong series DevOps for Freshers đã cung cấp khá đầy đủ, cụ thể chi tiết và thực tế. Giúp cho rất nhiều bạn đã trở thành DevOps Engineer. Còn những phần kiến thức sau đây là nâng cao hơn phù hợp mức fresher+ junior (hoặc như mình nói sẽ tùy văn hóa DevOps của từng công ty mà có những yêu cầu thấp hơn hoặc cao hơn). Kubernetes Sau khi đã có kiến thức của series DevOps for Freshers tiếp theo trong lộ trình trở thành DevOps Engineer - lộ trình DevOps, một mảng kiến thức vô cùng quan trọng nữa chính là Kubernetes (K8s) - mảng kiến thức quyết định khá nhiều xem bạn có là người quan trọng cho dự án cho doanh nghiệp hay không.Bạn có thể hiểu đơn giản là, trước đây các Containers đang được chạy độc lập như vậy sẽ rất khó quản lý cũng như khi dự án lớn lên, có nhiều lượng người truy cập hơn thì bài toán về mở rộng hạ tầng sẽ là một vấn đề không nhỏ khi sử dụng Container Stand-alone như vậy.Lúc này, Kubernetes là một giải pháp vô dùng hữu hiệu và được hầu hết các công ty, tổ chức, doanh nghiệp lớn nhỏ trên cả thế giới sử dụng. Nên vì sao Kubernetes trở thành mảng kiến thức "ăn tiền" đáng kể trong mảng DevOps và giúp DevOps Engineer có được rất nhiều giá trị từ nó.Tuy nhiên kiến thức về Kubernetes thực tế thì chưa nhiều, mà để làm được việc thì không chỉ dựa vào những kiến thức sample được.Nên mình đã làm một series Khóa học Kubernetes thực tế cực kỳ chi tiết và đúc kết bạn sẽ có được:Cách cài đặt một cụm k8s từ đầu thực tế.Tư duy để triển khai bất kỳ dự án nào trên K8sPhương pháp triển khai dự án Fullstack từ đầu trên k8s.Cách sử dụng các thành phần khác của k8s để triển khai dự án được an toàn, bảo mật hơn.Xây dựng các công cụ dự án.Cách giám sát và quản trị cụm k8s.Chứng chỉ đã có kinh nghiệm về Kubernetes thực tế.Series này sẽ giúp bạn làm việc trên Kubernetes và tự tin ứng tuyển các vị trí lương cao, cũng như có cơ hội tiếp xúc với các bài toán lớn, cả những bạn intern, fresher DevOps hay các bạn Developer, Sysadm, DBA,... cũng đều nên biết Kubernetes. Networking Tiếp theo, trong lộ trình trở thành DevOps Engineer - lộ trình DevOps chúng ta sẽ có một mảng kiến thức vô cùng quan trọng chính là Networking. Có thể nói nếu mảng kiến thức này không mạnh không thể lên cao được trong DevOps và không thể trở thành DevOps Engineer mức rank từ senior trở lên được.Tuy nhiên, thật sự là ở các vị trí bên dưới intern, fresher thì networking sẽ chưa quá quan trọng bằng các mảng kiến thức khác để phục vụ trực tiếp công việc, nhưng khi đụng đến những vấn đề cần phải sửa liên quan đến dự án, liên quan đến server thì networking là mảng kiến thức bắt buộc phải có.Đơn giản, bạn không biết networking thì làm sao bạn hiểu rõ các kết nối của các services liên kết với nhau như thế nào, ví dụ các dự án về Microservice.Hay không thể thiết lập và cấu hình mạng nội bộ hoặc mạng On-premise/Cloud một cách chính xác, dẫn đến việc kết nối giữa các dịch vụ bị gián đoạn hoặc không ổn định.Khó khăn trong triển khai ứng dụng, không thể cấu hình load balancer, DNS, và các thành phần mạng khác để đảm bảo ứng dụng hoạt động mượt mà và có khả năng mở rộng.Và chắc chắn thì khó khăn trong việc sử dụng sâu các công cụ trước đó mà chúng ta nhắc đến như Linux, Docker, Jenkins, K8s,...Bạn có thể học qua CCNA và không cần nhất thiết lấy chứng chỉ, và những thành phần quan trọng mà bạn phải nắm được như:OSI modelDNSSSL/TLSWhite/black listHTTP/HTTPSFTP/SFTPIP AddressingFirewallsNATVPNDHCPRoutingProxyĐây đều là những phần kiến thức mà DevOps Engineer sẽ sử dụng hàng ngày cho các công việc cấu hình, tối ưu, kiểm tra, khắc phục và bảo trì dự án. Cloud Với xu hướng hiện tại chắc chắn là nếu không biết Cloud sẽ là một thiếu sót nặng nề. Hiện tại có 3 nhà cung cấp Cloud lớn nhất hiện nay chính là AWS, Azure, GCP. Và trong đó thị phần lớn nhất vẫn là AWS.Tuy nhiên, với vị trí DevOps Engineer thì không nhất thiết phải biết toàn bộ cách services của nền tảng Cloud mà chúng ta sẽ tập trung vào những services phục vụ trực tiếp công việc. Vì rõ ràng là DevOps Engineer và Cloud Engineer là 2 vị trí khác nhau nên cũng sẽ có nhiều khác biệt.Ví dụ với DevOps Engineer, bạn sẽ tập trung vào các công cụ phục vụ trực tiếp dự án và bạn có thể hiểu đơn giản là chúng ta chuyển môi trường triển khai từ On-premise lên Cloud chứ không phải chúng ta "làm chuyên mảng Cloud".Vì vậy trên nền tảng AWS chẳng hạn bạn có thể nghiên cứu về các mảng services:EC2 (Elastic Compute Cloud): Cung cấp các máy chủ ảo để chạy các ứng dụng.S3 (Simple Storage Service): Lưu trữ và truy xuất dữ liệu một cách linh hoạt và an toàn.RDS (Relational Database Service): Quản lý cơ sở dữ liệu quan hệ như MySQL, PostgreSQL, MariaDB, Oracle, và SQL Server.VPC (Virtual Private Cloud): Cung cấp môi trường mạng riêng tư cho các tài nguyên AWS.IAM (Identity and Access Management): Quản lý người dùng và kiểm soát truy cập.CloudFormation: Tự động hóa việc triển khai tài nguyên AWS thông qua các mẫu cấu hình (template).CloudWatch: Giám sát và quản lý nhật ký và số liệu của các dịch vụ AWS.ECS (Elastic Container Service) & EKS (Elastic Kubernetes Service): Quản lý và triển khai container với Docker hoặc Kubernetes.CodePipeline: Tích hợp liên tục và triển khai liên tục (CI/CD).Lambda: Chạy mã mà không cần quản lý máy chủ (Serverless computing).Route 53: Dịch vụ DNS của AWS.Elastic Beanstalk: Triển khai và quản lý các ứng dụng một cách tự động.SQS (Simple Queue Service) & SNS (Simple Notification Service): Dịch vụ hàng đợi tin nhắn và dịch vụ thông báo.EKS (Elastic Kubernetes Service): Dịch vụ quản lý Kubernetes.Ngoài ra, còn có rất nhiều nữa nhưng trong phạm vi lộ trình DevOps này để tránh việc bạn cảm thấy mơ hồ sinh ra nản thì tương ứng khi bạn va vấp trong thực tế sẽ mở rộng thêm các phần kiến thức.Và chắc chắn còn nhiều mảng kiến thức nữa như IAC, GitOps,... Tuy nhiên như mình nói trong phạm vi lộ trình DevOps này thiên về công cụ tập trung vào vị trí intern đến junior+, và bạn thắc mắc là sao không có lộ trình lên cao hơn nữa thì chắc hẳn những bạn middle trở lên sẽ có những góc nhìn cụ thể về ngành và hướng tiếp tục phát triển vì vậy sẽ tùy thuộc vào doanh nghiệp mà các bạn gắn bó mà có sự thay đổi linh hoạt về các công nghệ bạn sử dụng.