Tôi đã học được những gì sau 1 năm làm DEVOPS?

Background

Trước khi bị sếp “dí” làm vị trí Devops, tôi có nhiều năm làm coder, code tùm lum từ backend đến frontend (có khi đá qua 1 ít về mobile), nên có thể nói tôi có kha khá kinh nghiệm software development, nhưng với Devops thì tôi là một con “gà mờ”. Tuy vậy có một lợi thế của tôi là đã có một ít kiến thức về Network từ trước và đã cày được chứng chỉ AWS architecture associate từ ngày xưa^^, do vậy có thể coi đó là một nền tảng tốt cho việc tiếp cận vị trí Devops này.

Worked tasks

Lúc mới vào dự án, tôi được ưu ái có một thời gian ngắn khoảng 1 tháng để self-training các kiến thức sẽ dùng tới, dù ít ỏi nhưng đó là một sự chuẩn bị rất cần thiết để bắt đầu. Khi đó tôi được giao nhiệm vụ tìm hiểu về các công nghệ của dự án, có thể nói là khá “hot” hiện nay, đó là kubernetes, helm, terraform, gitlab ci/cd… May mắn là tôi được đồng nghiệp trong team share tài khoản “linux academy” để tự học, phải nói là rất hữu ích vì trang này vừa có các khoá học khá bài bản vừa có các bài lab để thực hành luôn, rất “recommend” cho các bạn muốn nâng cao kiến thức nhé!

Để bạn có thể có cái nhìn tổng quan hơn thì tôi sẽ nói sơ qua về kiến trúc hệ thống mà dự án tôi đã tham gia. Đó là một hệ thống microservice bao gồm nhiều service nhỏ. Frontend là một service (ui-service), và nó gọi tới các service khác nhau của backend (data-service, core-service, communication-service, document-service, ml-service,…) Các service liên lạc với nhau thông qua kafka messages (và đôi khi là trực tiếp qua http requests), user sẽ được authenticate, authorize thông qua keycloak. Tất cả các service trên đều được cài đặt trên kubernetes sử dụng dịch vụ aws eks của amazon. Để deploy các service lên eks thì mỗi service sẽ được cấu hình một gitlab pipeline, với các cấu hình gitlab variable khác nhau cho từng môi trường khác nhau (dev, sandbox, prod). Còn phần Infrastucture (EKS, MSK, ELK, jump-server,…) cũng được deploy thông qua gitlab pipeline và terraform. Như vậy để có thể có một hệ thống hoàn chỉnh thì trước hết cần chạy các pipeline để deploy Infrastructure, sau đó chạy pipeline khác để deploy các service.

Sau thời gian traing tôi được khách hàng giao task từ dễ đến khó, bắt đầu với các task liên quan đến Gitlab pipeline, sau đó là install service lên kubernetes như weblate, prometheus. Việc install khá đơn giản với helm, tuy nhiên để config đúng cho service thì cần tìm hiểu kỹ về cấu hình hiện tại và cách sử dụng service trong bối cảnh của hệ thống. Các task tiếp theo độ khó được nâng lên, tôi phải làm quen và sử dụng terraform để deploy một số hệ thống lên aws, ví dụ như jump-server, ELK, MSK… Tôi cũng dần làm quen và cấu hình keycloak, MSK (dịch vụ chạy kafka của aws), weblate, alertmanager… Có thể nói tôi đã dần “đụng” tới các thành phần khác nhau của dự án.

Challenges

Tôi đã gặp nhiều khó khăn trong quá trình làm việc với dự án. Thứ nhất đây là dự án microservice đâù tiên tôi tham gia, có rất nhiều công nghệ khác nhau, và hầu hết chúng đều mới và phức tạp, ví dụ như kubernetes là một công nghệ mới và tương đối phức tạp để nắm bắt. Thứ hai là tôi hầu như phải tìm hiểu tất cả các khái niệm và cách cấu hình những thành phần hệ thống mà tôi đụng tới, tôi không có quá nhiều sự trợ giúp vì nhân lực devops của dự án quá ít trong khi số lượng công việc lại quá nhiều. Thứ ba, devops là công việc phục vụ cho dev, xây dựng các pipeline để developer có thể tự mình deploy các service, và cung cấp các chỉ dẫn về lỗi, hay hỗ trợ debug cho họ, do đó nó quan hệ mật thiết và ảnh hưởng trực tiếp tới tất cả các dev trong dự án. Rõ ràng đây là một áp lực và thách thức lớn khi task của tôi có thể làm ảnh hưởng tới nhiều người khác.

Lesson learned

Sau một thời gian không dài nhưng cũng không quá ngắn làm Devops, tôi đã rút ra được những bài học cho riêng mình.

  • Học những kiến thức nền tảng về devops là vô cùng cần thiết. Những kiến thức “đầu vào” cho bất kỳ ai muốn trở thành devops đó là: linux, docker, gilab (hoặc jenkins, github actions…). Nắm vững những kiến thức này sẽ khiến cuộc sống bạn dễ chịu hơn nhiều đấy!
  • Học kiến thức về cloud. Hiện nay Devops thường đi kèm với Cloud, bởi vì đó là xu hướng khi Cloud cung cấp hầu hết mọi thứ cho hệ thống mà không mất tiền để tự mua phần cứng hay tự quản lý dịch vụ. Tốt nhất là bạn nên học AWS vì nó phổ biến nhất, có thể theo đuổi một chứng chỉ Cloud vì nó sẽ rất xứng đáng với công sức bạn bỏ ra!
  • Giao tiếp là chìa khoá. Devops engineer là người tham gia và phục vụ đội ngũ developer, nên cần hiểu được quy trình phát triển phần mềm, cách dev build một service và tham gia để tối ưu quy trình phát triển. Do vậy giao tiếp với developer cũng như các devops engineer khác luôn là điều tiên quyết.
  • Học hỏi không ngừng. Devops có thể nói là một nghề tương đối mới mẻ, thực ra nó là một văn hoá hơn là một “job” cụ thể, và nó luôn cần thay đổi cải tiến cùng với công nghệ mới để cho ra sản phẩm tốt hơn với ít công sức nhất. Điều đó đòi hỏi devops engineer luôn phải cập nhật liên tục các kiến thức mới (cloud, software development…) để thích ứng và làm chủ công nghệ mới.

Leave a comment