Lộ trình trở thành DevOps Engineer (thực tế)

*Ghi chú: nếu chỉ một bài viết lộ trình mà bạn không thể kiên nhẫn đọc hết thì bạn lấy gì đòi hỏi trong khi các bạn khác miệt mài cố gắng đây?

Tại sao lộ trình 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ả sẽ là câu trả lời tốt nhất cho điều đó.

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,…  bạn có thể tham khảo một vài phản hồi của các bạn đi trước dưới đây hoặc xem toàn bộ tại bài viết này.

Chắ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.

Mình hoàn toàn hiểu đ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 mới chuyển qua học làm DevOps vì số lượng các bạn Developer quá đông và quá cạnh tranh.

Hay những bạn làm trong ngành cũng 7-10 năm nhưng 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 và một chút kết quả nhất định từ các bạn học từ kiến thức mà mình chia sẻ các năm qua, trong bài viết này bạn sẽ biết được lộ trình trở thành DevOps Engineer (đúc kết thực tế).

DevOps là gì? DevOps thì 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à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 sự 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ì. 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, mỗi văn hóa công ty là khác nhau, con người 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ư Gitlab CI, Jenkins, K8s, Ansible, AWS, Terraform, Zabbix,… Nên tồn tại vị trí này cũng có cái đúng của nó.

Và thường hiện tại các công ty đang hiểu công việc của một DevOps là tối ưu, cấu hình tự độ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, trà đá,… chắc chắn là chưa đủ còn rất nhiều thứ nữa.

Tuy nhiên, chúng ta phải thực tế hơn thị trường lao động 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? Nên cái cuối cùng cũng chính là điều kiện đầu tiên để bạn có được việc làm DevOps chính là biết sử dụng các công cụ.

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 đúng cách đi lên từ biết cách sử dụng các công cụ.

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. 

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 mà mình chia sẻ.

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 rất nhiều.

Vì bản chất 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ì, sửa chữa. 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 văn bản.
  • Các câu lệnh khác nâng cao hơn 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õ).

Và 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.

Mình đề xuất sau khi đã học xong series DevOps for Freshers thì bạn mới nên học 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.

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 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 có nói tới 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”.

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 chúng ta sẽ tiến dần đến với DevOps và Git trong đó Git workflow có thể nói là cực kỳ quan trọng 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 nằm trên Git, cũng như cách tổ chức các nhánh 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 upcode 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 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ể build và 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 server con (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.
  • 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 docker hóa dự án với những các viết Dockerfile tối ưu, bảo mậ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 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 “commit” hoặc “1 click”.

Mảng kiến thức này bạn là Developer hay Operator 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.

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 sẽ cần phải chăm chỉ làm và tiếp thu sẽ lấy được nhiều nhất giá trị để làm 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 chúng ta có mảng kiến thức cũng cực kỳ quan trọng chính là monitoring.

Thì 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.

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.

Mảng kiến thức này bạn là Operator thì chắc 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 server
  • Cấ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 miss cảnh báo.

Đến 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 ít hơn hoặc nhiều 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 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ó đóng góp được nhiều 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ề scale sẽ là một vấn đề lớn khi sử dụng Container standalone như vậy.

Lúc này, K8s 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 K8s trở thành mảng kiến thức “ăn tiền” đáng kể trong mảng DevOps.

Tuy nhiên kiến thức về K8s 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 Xây dựng quy trình pipeline DevSecOps với phần kiến thức liên quan K8s:

  • Lý thuyết đúc kết về k8s.
  • Cách cài đặt một cụm k8s từ đầu thực tế.
  • Cách triển khai dự án fullstack từ đầu trên k8s.
  • 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.
  • Áp dụng GitOps k8s giúp triển khai dự án tự động.


Tuy nhiên, series này sẽ không cho người ngoài group Kiến thức DevOps thực tế [elroydevops.tech] đăng ký và cũng đã hết hạn đăng ký nên mọi chi tiết liên hệ page facebook DEVOPSEDU.VN để biết chi tiết lượt mở đăng ký tiếp theo.

Ngoài ra bạn có thể tham khảo các kiến thức k8s cơ bản trên internet cũng rất nhiều và docs chính thức tại Tài liệu kubernetes cũng rất chi tiết.

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 role 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 để 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à sắp tới mình cũng sẽ làm series “DevOps for AWS kiến thức thực tế” giúp mọi người có những kiến thức chất lượng để tự tin làm việc.

Networking

Tiếp theo trong lộ trình trở thành DevOps Engineer chúng ta sẽ có một mảng kiến thức vô cùng quan trọng. 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.

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 issue 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 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ỉ.

Hoặc những thành phần như:

  • OSI model.
  • DNS.
  • SSL/TLS.
  • White/black list.
  • HTTP/HTTPS.
  • FTP/SFTP.
  • IP Addressing.
  • Firewalls.
  • NAT.
  • VPN.
  • DHCP.
  • Routing.
  • Proxy.

Và chắc chắn còn nhiều mảng kiến thức nữa IAC, GitOps,… Tuy nhiên như mình nói trong phạm vi lộ trình thiên về công cụ tập trung vào vị trí intern đến junior+ thì sẽ tùy thuộc vào doanh nghiệp mà có sự thay đổi.