post-image

Hành Trình Li Kì Đến Với DevOps Của Tôi

1. Tổng quan

Nếu bạn cũng giống như tôi, thì mọi chuyện thật sự khó, nhưng để có thể phát triển tốt không bao giờ là dễ dàng.

Kinh nghiệm  đầy mình

Tôi đã có 15 năm làm việc trong ngành IT, là quản trị viên hệ thống của một số nơi kiểu Lockeheed Martin và Federal Government. Tôi có trong tay hàng chục chứng chỉ, bằng cấp cùng với kinh nghiệm dày dạn và phong phú. Hãy nhớ rằng tất cả đều là quản lý thủ công, đôi khi thì có một vài dòng script cho lẹ. Tôi đã làm tốt công việc của mình, không có gì khó, nhưng tôi đích thực là một quản trị viên truyền thống.

Và đó chính là vấn đề…

Tôi đã chuyển sang một vị trí làm việc khác, nơi họ giao cho tôi nhiệm vụ quản lý khoảng 500 máy ảo. Chà, thật tuyệt, nhưng khoan, tôi đã tình nguyện làm một phần của một chiến dịch khổng lồ được xây dựng trên AWS cloud. Tôi đã quên luôn VMWare farm, EMC SANs của nó cũng như tất cả những data center khác là cái gì. Tất cả mọi thứ đều xoay quanh cloud. Tôi thì lại biết rất ít về cloud, nhưng nó đã tới quá nhanh và chẳng ngần ngại vứt mớ kinh nghiệm 15 năm của tôi vào sọt rác.

Chà, chắc là không dễ đánh ngã tôi như thế đâu nhỉ. Là một quản trị viên dày dặn, tôi bắt đầu xây dựng trên mây giống như cái cách tôi xây dựng ở data center dưới đất. Nhưng đoán xem, cách tiếp cận này hoá ra lại chẳng đúng tí nào. Những nỗ lực vô nghĩa của tôi cũng không kéo dài quá lâu bởi sau vài tháng kể từ khi dự án bắt đầu, PM của tôi nói:

Chúng ta sẽ tiến tới DevOps.

Ồ, DevOps là cái *** gì?

Tôi hoàn toàn khinh. Nó chỉ là một từ khoá đang thông dụng, mà tôi sẽ phải mang theo và bằng cách nào đó vượt qua dự án này.

Chef Graig và cuốn Cookbook

Chúng tôi bắt đầu có một vài ông tư vấn viên tham gia vào team và làm việc. Một trong những người mà họ chiêu mộ được là một gã Chef (không phải đầu bếp – ND), tên là Craig. Trong hầu hết thời gian, tôi chẳng hiểu nổi gã đang làm cái quái gì. Một ngày nọ, tôi mắc sai lầm khi đã hỏi đến gã, và well, gã giải thích rằng gã đang làm một Gem Server, Berkshelf, Jenkins, Gitlab, Chef server… và 77 49 thứ hầm bà lằng nữa, trên linux. Trước đây tôi là một quản trị viên Windows, nên rõ ràng là, tôi phải lùi lại, sau khi đầu tôi suýt bốc cháy, thề!

Tuần sau đó, Craig đã thử chỉ cho tôi xem làm thế nào để có thể thêm 1 user vào một Chef cookbook (không phải sách dạy nấu ăn – ND) Chà, tôi bực bội nhìn vào đống cốt Ruby và cố hiểu xem tại sao chúng ta lại đang build một test case trước khi viết code để tạo thêm user. Cái ***, một test case? Tôi chỉ cần 10 giây để làm điều tương tự qua giao diện, hoặc viết một script, cũng thế. Khi Craig hướng dẫn làm thế nào để mang đống cốt kia tới một repo, não tôi lịm đi…

Suốt thời gian tiếp theo, tôi cứ nghĩ về mấy điều này (không theo một thứ tự nào cả):
– Không có gì để làm với Windows
– Tôi không phải người viết cốt
– Nó quá khó với tôi
– Nó chẳng liên quan gì tới công việc của tôi cả
– Mẹ ơi, cứu

Đó là tất cả nỗi sợ hãi, thực sự. Tôi đã tự nói với mình những điều kia bởi vì, tôi-không-muốn-thừa-nhận-rằng, tôi không thể hiểu nổi giá trị đó và coi thường những kỹ năng kia như chúng chỉ đơn giản không phải phạm trù kiến thức trong ngành nghề của tôi. Tại thời điểm đó, tôi hoàn toàn đúng.

Một tháng sau, hoặc hơn, Justin đến. anh ấy là một unicorn DevOps rockstar (IT đầy những tiếng lóng ngầu lòi, nhỉ). Justin biết về AWS, Chef, tất-cả-mọi-thứ. Ảnh ngồi ngay cạnh tôi, mở chiếc mác búc ra (dĩ nhiên ảnh không thèm đụng đến PC) và một tiếng đồng hồ sau, anh ý đã lôi về mớ sprint tickets, viết một số test và làm việc trên Chef cookbooks. Tôi bị thổi bay. Tôi đã trộm nhìn ảnh làm việc vài lần ngày hôm đó, anh ý nhảy qua lại giữa những màn hình terminal đen sì, commit code, mô phỏng quá trình build trong test-kitchen. Và với tôi, đó là quá đủ cho cái ngày mả mẹ đó.

Chúng tôi có một buổi demo vào ngày hôm sau. Craig đã cho chúng tôi thấy rốt cục hắn làm cái mẹ gì ở trên Chef. Ảnh bảo là để tự động hoá một trong những ứng dụng cho vay của chúng tôi, từ-đầu-tới-cuối (ồ, thế có vẻ cũng giống như cái script mà tôi vẫn viết nhỉ).

Và từ đây, tôi nhìn thấy ma dích. Anh ta bấm một cái nút trên Jenkins, đám cốt của quy trình tự động đó được checkout từ git, một máy ảo EC2 trên AWS được khởi động và test-kitchen đã chạy qua Rpec và Serverspec. Bây giờ, cho những ai không hiểu chúng có nghĩa là gì, tôi đã nhìn thấy một máy chủ vanilla được khởi tạo trên cloud, hàng chục tests được chạy để validate đám automation code, sau đó acceptiance tests được gọi để thực sự cấu hình hệ thống ma quỷ đó, validate nó đã làm gì, mà thực tế thì, nó đã thực hiện chính xác. Chưa dừng lại ở đây, Chef cookbook còn khởi tạo một Elastic Load Balancer, tạo một chứng chỉ, sử dụng nó, và đặt máy chủ đằng sau load balancer đó. Cookbook đã làm mọi thứ, má ơi…

Tôi không phải là người dễ bất ngờ, nhưng những thứ này thực sự điên rồ. Sau tất cả công đoạn validate thành công, các tài nguyên được tạo ra để test được huỷ đi, và chúng ta có những đoạn cốt sẵn sàng sử dụng trên môi trường production. Bây giờ, khi một máy chủ xử lý tài chính được khởi tạo, nó sẽ được cấu hình hoàn toàn tự động và sẵn sàng làm việc – không script hay can thiệp thủ công nào còn cần thiết nữa.

Tôi có thể thấy một điều rõ ràng ở đây, không ai còn cần tôi nữa.

Mặt trời chân lý chói qua tim

Ngày hôm sau, Justin vẫn ngồi kế bên tôi. Ảnh đang làm việc tiếp với đống code tuyệt vời kia thì tôi tiến lại gần và hỏi, “Hey dude, có vấn đề này tôi muốn hỏi. Cậu có từng học ở trường môn phát triển phần mềm không? Làm thế quái nào mà cậu biết tất cả những thứ này vậy?” Tôi chân thành một biết tài năng này từ đâu mà ra, và đoán xem, câu trả lời của anh ta như một nhát dao đâm thẳng vào trái tim tôi vậy.

“Không. Cháu từng là một quản trị viên, y như chú vậy. Cháu chỉ đơn giản quyết định rằng cháu sẽ không tiếp tục bị bế tắc ở cái làng Đo Đo thêm được nữa”

Khoảnh khắc đó, toàn bộ sự nghiệp của tôi thay đổi.

Tôi ngồi trên ghế trong một giờ đồng hồ, chỉ để nhìn vô hồn vào màn hình máy tính. Tôi tự hỏi mình điều gì xảy ra nếu toàn bộ kinh nghiệm của tôi không còn giá trị nữa. Cái tôi lớn của tôi vẫn tin rằng những admin như tôi luôn luôn rất cần thiết, sau tất cả, thì ngoài kia còn đầy những win đâu sơ vơ cần tôi quản trị (một cách thủ công)

Nhưng tôi đã tự dối. Tôi nhận ra điều đó khi bất chợt nhìn thấy ảnh phản chiếu của chính mình trên màn hình laptop, và điều đó đã cứu rỗi tôi được một chút.

Sau rất nhiều sự buồn bã chứa đầy trong những cốc rượu, tôi đã trở lại với suy nghĩ cầu thị hơn. Mẹ kiếp, nó có thể khó đến đâu chứ. Sau tất cả, họ không phải những chú kỳ lân hào nhoáng, họ đã từng là những IT như tôi. Đầu tiên tôi tìm xem có khoá học nào tôi có thể theo hay không. Có lẽ tôi cần kiếm một vài chứng chỉ trong lĩnh vực này và a, tôi có thể đuổi kịp họ. Suy nghĩ này đẩy tôi đi xa, nhưng không đi xa quá, nhanh quá. Tôi quyết định rằng, ngồi xuống và bắt đầu gym não với những điều cơ bản nào…

Vài tháng sau, có thêm 2 DevOps nữa tham gia vào team, Lars và Roman. Lúc này tôi đã được học về Agile và có một vài hiểu biết cơ bản về git flow, biết tạo một Jenkins job, viết vài dòng test Rspec, nhưng nhìn chung thì tôi vẫn là lính mới và lỡ mất một vài thứ tương đối nhanh. Điều này tôi có thể ví von như đang học cách lái xe ngược chiều ở Anh vậy. Nó choáng ngợp, và thực sự rất khó để cưỡng lại việc cheating và trở về sử dụng GUI hay cái powershell script thân thuộc kia. Cứ như kiểu là một con nghiện sau quãng thời gian quá dài sử dụng chuột để bấm bấm. Thực sự khó khắn, nhưng tôi có thể quả quyết rằng, teammates của tôi thực sự tuyệt vời.

Tua nhanh tới một năm sau, tôi vẫn không quá giỏi, nhưng tôi đang viết toàn bộ Windows cookbooks (cũng bởi tất cả mọi người từ chối đụng vào Windows) Tôi đã có thể làm việc trong sprint, tôi có thể viết test, tôi có thể xây dựng Jenkins workflows. Ngạc nhiên chưa, có vẻ tôi khá “okay” trong tôn giáo DevOps rồi đó.

Tạm kết

Tôi có thể nói với bạn rằng, cho tới trước khi lao vào con đường đép ốp đau khổ này, tôi không bao giờ ứng tuyển vào một công việc mà tôi không biết ít nhất 65% những thứ nhà tuyển dụng yêu cầu. Đó là con số hoàn hảo cân bằng giữa việc có đủ kỹ năng và sẵn sàng để đi tiếp. Chà, có vẻ điều này không còn đúng nữa đâu.

Đây là thời gian để bước ra ngoài thế giới. Tôi apply vào một job mà thậm chí tôi không biết gì về mấy thứ tôi sắp đụng vào nữa. Họ dùng Ansible, Python, Perforce và 100% Linux (mà tôi không cảm thấy thân quen cho lắm) Tôi nói với hiring manager trong buổi phỏng vấn: “Tôi hoàn toàn không biết stack này, nhưng tôi có thể làm được” Sau tất cả, có một điều quan trọng mà đã học được, đó là tôi có thể làm mọi thứ được yêu cầu – đây chính là tinh thần mà DevOps hướng đến. Cái thử thách mà học để bước vào thế giới IT mới, giờ đây không còn bất khả thi nữa.

Nguồn:codelearn.io

Leave a Reply

Your email address will not be published.