Những điều bạn nên biết về DevOps
14/05/2024 01:23
DevOps là gì? DevOps là một văn hóa làm việc đề cao sự hợp tác, kéo hai giai đoạn phát triển (development) và vận hành (operations) xích lại gần nhau hơn.
Trong vài năm qua, tôi đã tập trung vào thế giới DevOps và tìm hiểu theo cách của mình thông qua vô số sản phẩm, dự án, công cụ và phương pháp liên quan đến DevOps.
Blog này bắt đầu quá trình tìm hiểu có cấu trúc của tôi về DevOps và cùng với đó là việc học trong dự án công cộng, 90DaysOfDevOps .
Lời khuyên của tôi nếu bạn mới bắt đầu hoặc bạn là một “Kỹ sư DevOps” dày dạn kinh nghiệm là bạn chưa bao giờ học xong. Luôn có những công cụ và phương pháp mới và nâng cao xuất hiện trong ngành của chúng tôi.
Học một ngôn ngữ lập trình
Nếu bạn giống tôi, không có kinh nghiệm lập trình, bạn có thể bị choáng ngợp bởi số lượng lớn các ngôn ngữ lập trình hiện có. Đối với DevOps, lời khuyên của tôi là hãy chọn một trong những ngôn ngữ sau: Python, NodeJS hoặc Ruby. Mặc dù điều quan trọng là phải có hiểu biết cơ bản về cả ba điều này, nhưng bạn sẽ cần phải cảm thấy thoải mái với ít nhất một điều để nâng cao hiểu biết của mình về DevOps.
Mặc dù không có lựa chọn đúng hay sai khi chọn ngôn ngữ, nhưng Python dễ dàng là ngôn ngữ phổ biến nhất. Lời khuyên của tôi dành cho những ai mới bắt đầu dấn thân vào lĩnh vực lập trình là trước tiên hãy tìm một vài video hoặc tài nguyên bằng văn bản hay mà bạn có thể tham khảo. Sau đó, hãy bắt đầu ngay. Theo kinh nghiệm của tôi, cách tốt nhất để học lập trình là bắt tay vào thực hành và bắt đầu sáng tạo.
Biết cơ bản về Linux
Khi nói đến Linux, hướng dẫn vẫn giống như với lập trình. Hãy tham gia, thực hành và nếu có thể, hãy chuyển đổi hệ thống hàng ngày của bạn sang Linux. Để nắm bắt đúng các nguyên tắc cơ bản, bạn sẽ cần sử dụng nó hàng ngày và trong thực tế. Một số lĩnh vực chính bạn sẽ muốn tập trung vào là lệnh shell, cấu trúc thư mục Linux và quản lý khóa SSH.
Việc sử dụng công nghệ “cũ” có thể là một thách thức khi hệ điều hành mà chúng ta quen sử dụng đã trở nên quá tiên tiến; tuy nhiên, sự hiểu biết cơ bản về Linux là điều cần thiết đối với người học DevOps. Khi đã cảm thấy thoải mái với Linux, bạn sẽ được chuẩn bị tốt hơn nhiều cho những gì sắp xảy ra.
Hiểu mạng
Giống như những kiến thức cơ bản về Linux, đây là một kiến thức nền tảng khác mà bạn chỉ cần biết trước khi chuyển sang những thứ hấp dẫn hơn. Mạng là nền tảng của DevOps và là liên kết cho phép liên lạc giữa các ứng dụng và người dùng của chúng tôi. Bạn sẽ cần có hiểu biết cơ bản về một số nguyên tắc cơ bản về mạng: DNS, mạng con, cổng, DHCP, NAT, Mô hình OSI, tường lửa, bộ cân bằng tải, máy chủ proxy và HTTP/HTTPS.
Bám sát một nhà cung cấp đám mây
Vì đã đề cập đến những điều cơ bản nên chúng ta có thể bắt đầu xem xét các công cụ sáng bóng đẹp mắt vốn là thành phần chính của DevOps, chẳng hạn như nhà cung cấp đám mây. Để đạt được nhiều hơn chỉ là kiến thức cơ bản, bạn sẽ muốn chọn một nhà cung cấp đám mây để tập trung và bám sát nó (. Các kỹ năng bạn học được ở đây sẽ giúp quá trình chuyển đổi của bạn dễ dàng hơn nhiều khi khám phá các tùy chọn nhà cung cấp khác.
Một ví dụ cá nhân là vài năm trước tôi đã bắt đầu học AWS, nơi cung cấp vô số dịch vụ đám mây. Tôi tập trung vào các dịch vụ phổ biến nhất như IaaS và PaaS, sau đó áp dụng những kỹ năng đó vào Microsoft Azure và Google Cloud Platform.
Điều tuyệt vời ở đây là mỗi nhà cung cấp siêu quy mô lớn đều cung cấp một cấp độ miễn phí, cho phép bạn có được trải nghiệm thực tế mà không cần phải cam kết tài chính với một nhà cung cấp.
Sử dụng Git hiệu quả
Kiểm soát nguồn là khía cạnh quan trọng nhất của DevOps. Hiểu Git và có thể sử dụng nó một cách hiệu quả là điều cần thiết cho quy trình làm việc của bạn. Nếu bạn đã có hiểu biết cơ bản về những gì đã được đề cập trước đây trong bài đăng này, thì bạn sẽ muốn bắt đầu hành trình của mình tại đây với tính năng kiểm soát nguồn.
Mọi tập lệnh bạn tạo phải được quản lý thông qua kiểm soát nguồn để bạn có thể theo dõi các thay đổi và cộng tác với các nhà phát triển khác. Bạn sẽ cần hiểu các khái niệm về phân nhánh, yêu cầu kéo và kho mã cũng như cách chúng phù hợp với quy trình phát triển tổng thể.
GitHub dễ dàng là nền tảng lưu trữ mã phổ biến nhất và là nơi cá nhân tôi lưu trữ phần lớn những gì tôi đã học được.
Hộp đựng? Bắt đầu với Docker
Khi nghĩ đến vùng chứa, bạn sẽ nghĩ đến Docker và đây là lúc tôi khuyên bạn nên bắt đầu tìm hiểu về vùng chứa.
Các thùng chứa cho phép tạo ra một môi trường nhất quán và di động để các ứng dụng chạy trên đó. Khi học Docker, hãy đảm bảo bạn có được trải nghiệm thực tế. Điều này cực kỳ dễ thực hiện vì hầu như mọi thứ đều có thể chạy Docker.
Bạn sẽ muốn có thể tạo, chạy, tải xuống, thay đổi và kiểm tra vùng chứa. Điều quan trọng nữa là bạn phải hiểu ngăn xếp mạng, quản lý lưu trữ và tạo Dockerfiles của riêng mình.
Phối hợp với Kubernetes
Bây giờ chúng ta đã cảm thấy thoải mái với các vùng chứa, chúng ta sẽ cần hiểu cách sắp xếp chúng. Kubernetes là một công cụ điều phối vùng chứa cho phép bạn quản lý một lượng lớn vùng chứa trên nhiều nút. Có rất nhiều tài nguyên sẽ giúp bạn tìm hiểu chuyên sâu về Kubernetes, cả về lý thuyết và thực hành.
Tìm hiểu cơ sở hạ tầng dưới dạng mã
Mã không chỉ là về các ứng dụng. Bạn cũng nên tìm hiểu về cách chúng tôi sử dụng mã để tạo cơ sở hạ tầng cho bạn. Điều này có thể ở trên đám mây công cộng, tại chỗ trong môi trường ảo hóa của bạn hoặc trong phòng thí nghiệm tại nhà của bạn. Cơ sở hạ tầng dưới dạng mã (IaC) là cách xây dựng cơ sở hạ tầng theo cách an toàn và có thể lặp lại.
Terraform là một công cụ tuyệt vời để học cơ sở hạ tầng dưới dạng mã. Terraform cho phép bạn viết, lập kế hoạch và áp dụng các thay đổi trạng thái mong muốn cho cơ sở hạ tầng của mình cho nhiều nhà cung cấp. Terraform hiểu trạng thái triển khai hiện tại của bạn và lưu giữ nó cho bạn.
Điều này rất có lợi cho khả năng lặp lại. Tất cả chúng tôi đều đã từng ở đó: bạn thấy mình cần triển khai máy ảo nhiều lần ở các địa điểm khác nhau. Terraform và các công cụ IaC khác giúp việc này trở nên dễ dàng.
Tự động quản lý cấu hình
Bước tiếp theo của chúng tôi hướng tới tự động hóa DevOps là đảm bảo rằng trạng thái mong muốn của các ứng dụng đã triển khai của chúng tôi được giữ nguyên. Mặc dù IaC cho phép bạn xây dựng nền tảng theo cách có thể lặp lại nhưng việc quản lý cấu hình sẽ mang lại những lợi ích tương tự về mặt ứng dụng. Các công cụ như Ansible, Puppet và Chef cung cấp một cách đơn giản để tự động hóa việc quản lý cấu hình của bạn.
Tạo quy trình CI/CD
Vì vậy, chúng tôi biết cách duy trì trạng thái của ứng dụng, nhưng làm cách nào để thực sự đưa nó đến trạng thái mong muốn đó? Đã đến lúc tự động hóa quá trình tạo ứng dụng.
Có hai khía cạnh cần xem xét khi tạo quy trình của bạn: Tích hợp liên tục và Triển khai liên tục (CI/CD):
- Tích hợp liên tục: Nếu bạn đã tìm hiểu sơ qua về DevOps, rất có thể bạn sẽ gặp các thuật ngữ Code > Build > Test. Quá trình này là nền tảng để kiểm tra mã ứng dụng và sẵn sàng phát hành cho người dùng của bạn.
- Triển khai/Phân phối liên tục: Triển khai/Phân phối liên tục sẽ cho phép bạn cập nhật ứng dụng của mình một cách tự động. Nếu mã vượt qua các thử nghiệm, hãy sử dụng triển khai liên tục để đẩy mã đó vào môi trường tiếp theo, có thể là QA, dàn dựng hoặc sản xuất.
- Một số công cụ thường được sử dụng để tạo quy trình CI/CD là: GitHub Actions, Jenkins, TravisCI và GitLab.
Giám sát, quản lý nhật ký và trực quan hóa dữ liệu
Hãy nhớ rằng trong suốt hành trình này, nhiều kỹ thuật ghi nhật ký và bảo mật quan trọng đã bị bỏ qua vì mục đích giáo dục. Nhiều công cụ được thảo luận ở đây đảm bảo cấu hình phù hợp với tính bảo mật, nhưng bạn phải chịu trách nhiệm về tính toàn vẹn của ứng dụng. Bạn nên đảm bảo rằng ứng dụng của bạn được bảo mật trước khi đưa nó vào sản xuất.
Điều quan trọng nữa là phải xem xét cách hệ thống của bạn thu thập và tổng hợp dữ liệu. Tìm cách trực quan hóa thông tin bạn thu thập có thể cực kỳ hữu ích khi phân tích xu hướng và giảm thiểu rủi ro. Các công cụ như Prometheus, Grafana và ELK stack (Elasticsearch, Logstash và Kibana) sẽ nằm trong tầm ngắm của bạn khi bạn đang cố gắng tìm hiểu lĩnh vực DevOps này.
Lưu trữ và bảo vệ dữ liệu của bạn
Tại một thời điểm nào đó trong hành trình của mình, bạn sẽ yêu cầu một mức dữ liệu có trạng thái, có thể là một loại bộ lưu trữ liên tục nào đó để lưu trữ nhật ký hoặc yêu cầu cơ sở dữ liệu thực tế. Đây là lúc cần phải quản lý dữ liệu. Bạn sẽ cần biết nơi lưu trữ tập dữ liệu cũng như cách bảo vệ dữ liệu tốt nhất.
Có rất nhiều tùy chọn cơ sở dữ liệu khác nhau để khám phá. Tôi khuyên bạn nên tìm hiểu các nguyên tắc cơ bản về sao lưu dữ liệu, quản lý tính di động của ứng dụng giữa các môi trường và khắc phục thảm họa.
Cần lưu ý rằng không có nền tảng nào hoàn toàn an toàn trước tình trạng mất dữ liệu, vô tình xóa hoặc hoạt động độc hại. Tuy nhiên, bằng cách tự động hóa hầu hết quy trình làm việc, chúng tôi có thể loại bỏ phần lớn lỗi của con người khỏi quy trình phát triển của mình. Cuối cùng, tính toàn vẹn và quản lý dữ liệu ứng dụng sẽ luôn đặt lên vai DevOps.
Source: Michael Cade via https://www.veeam.com/blog/learn-devops-comprehensive-beginner-guide.html