GitOps là gì? — Quy trình làm việc, công cụ và lợi ích

Một hướng dẫn đầy đủ về tự động hóa và quản lý cơ sở hạ tầng CNTT dẫn đầu bởi GitOps, với cái nhìn sâu vào quy trình làm việc GitOps, công cụ và lợi ích.

Ở mọi nơi trong lĩnh vực vận hành CNTT, chủ đề nổi bật hiện nay là GitOps. Gần đây, có rất nhiều cuộc thảo luận về tự động hóa cơ sở hạ tầng.

Một vài năm trước, nhóm vận hành trong một tổ chức CNTT thường dành nhiều ngày, tuần và tháng để cung cấp các môi trường cơ sở hạ tầng CNTT mới hoặc được sửa đổi. Nhưng ngày nay, thời gian này đã được rút ngắn xuống chỉ còn vài giờ ngay cả đối với các ứng dụng quy mô lớn.

Làm thế nào?

Đó là nhờ phép màu của GitOps — tự động hóa cơ sở hạ tầng CNTT. GitOps giúp các nhóm tiết kiệm được một khoản tiền đáng kể và rất nhiều thời gian để đầu tư thêm vào quy trình SDLC — làm cho doanh nghiệp trở nên bền vững, mạnh mẽ và linh hoạt hơn.

Đọc bài viết này để hiểu chi tiết GitOps là gì, các nguyên tắc, lợi ích và quy trình làm việc cấp cao của quy trình GitOps.

GitOps là gì?

GitOps là thuật ngữ chung được đặt cho tập hợp các quy trình, phương pháp và kỹ thuật giúp tự động hóa việc thiết kế, phát triển và quản lý cơ sở hạ tầng bằng mã khai báo được kiểm soát phiên bản bằng Git.

Để hiểu cách quản lý cơ sở hạ tầng theo phương pháp GitOps, điều quan trọng là phải hiểu cách mọi thứ hoạt động trước khi có GitOps.

Vận hành trước GitOps

Trước đây, một quản trị viên hệ thống với kiến thức cơ bản về mạng, máy chủ và thiết bị lưu trữ phần cứng thường thiết kế, triển khai, giám sát và quản lý cơ sở hạ tầng CNTT. Họ cũng chịu trách nhiệm về tuân thủ, bảo mật, hiệu suất và khả năng mở rộng của cơ sở hạ tầng CNTT. Hầu hết họ thực hiện các nhiệm vụ này thủ công hoặc bằng cách viết các tập lệnh bash hoặc sử dụng giao diện GUI. Đây từng là một quy trình tốn nhiều thời gian và nếu có bất kỳ sự cố nào xảy ra, việc khôi phục lại là một cơn ác mộng.

Sau đó, chúng ta bước vào kỷ nguyên của cơ sở hạ tầng đám mây & DevOps. Trong khi một mặt, nó giải quyết các thách thức về khả năng mở rộng và hiệu suất, mặt khác, nó cũng làm cho các nhóm vận hành khó theo kịp tốc độ phát hành của nhóm phát triển.

Sự tiến hóa của GitOps

Xây dựng các ứng dụng đám mây gốc cho hàng chục môi trường khác nhau và các yêu cầu triển khai cụ thể theo nền tảng đã làm cho mọi thứ trở nên phức tạp hơn đối với vận hành. Phần mềm như một dịch vụ (SaaS) đang ngày càng phổ biến, nhưng việc quản lý nhiều môi trường dịch vụ đám mây (đặc biệt là trong đám mây lai) đã trở thành một vấn đề lớn.

Mặc dù đã có các công cụ quản lý cấu hình (CM) như Puppet & Chef có thể dễ dàng tạo lại một môi trường, nhưng chúng chưa đủ trưởng thành để cung cấp các máy ảo mới trong cơ sở hạ tầng đám mây gốc.

Các dịch vụ mới từ AWS (Cloudformation) và Azure (ARM) đã giải quyết thách thức cung cấp máy ảo trong đám mây, nhưng chúng bị khóa theo nền tảng, tức là Cloudformation chỉ có thể sử dụng với AWS, và ARM với Azure.

Đó là lúc các công cụ không phụ thuộc nền tảng như Ansible & Terraform xuất hiện. Ngoài ra, container hóa (cảm ơn Google), Cơ sở hạ tầng dưới dạng mã (IaC) và quản lý cơ sở hạ tầng đám mây gốc dẫn đầu bởi API đã trở nên phổ biến. Theo một cách nào đó, tất cả những điều này giúp đưa lý thuyết DevOps vào thực tế.

Vận hành với GitOps

Như đã định nghĩa trước đó,
“GitOps là thuật ngữ chung được đặt cho tập hợp các quy trình, phương pháp và kỹ thuật mã hóa và tự động hóa việc thiết kế, phát triển và quản lý cơ sở hạ tầng bằng mã khai báo được kiểm soát phiên bản bằng Git.”

Vì vậy, bây giờ các nhà phát triển có thể tự chỉ định trạng thái của môi trường container mà họ muốn cho ứng dụng của mình trong một tệp có cấu trúc key-value. Và hệ thống tự động cố gắng đạt được trạng thái được chỉ định. Điều này có nghĩa là mã ứng dụng, mã hệ thống và các khai báo bảo mật & tuân thủ — tất cả đều nằm trong cùng một kho lưu trữ, và do đó các ứng dụng có thể được phân phối nhanh chóng và đáng tin cậy đến môi trường sản xuất.

GitOps hoạt động như thế nào?

Có ba thành phần/nguyên tắc chính của khung hoặc quy trình làm việc GitOps:

1. Cơ sở hạ tầng dưới dạng mã (IaC)

  • Mã cơ sở hạ tầng của bạn xác định trạng thái container nằm trong cùng kho lưu trữ với mã ứng dụng.

  • Mã cơ sở hạ tầng được khai báo dưới dạng tệp JSON hoặc YAML và được lưu trong thư mục .git của kho lưu trữ.

  • Các nhóm công nghệ sử dụng GitOps thường sử dụng Kubernetes làm công cụ điều phối. Và các tệp YAML hoặc JSON nói trên thường được gọi là ‘Kubernetes deployment manifests’.

  • Các deployment manifests này mô tả cách tạo và quản lý một tập hợp các bản sao giống hệt nhau của một ứng dụng hoặc microservice cụ thể trong một cụm Kubernetes.

  • Deployment manifests chứa trạng thái mong muốn của triển khai, số lượng bản sao, hình ảnh container sử dụng, biến môi trường, cổng và các cài đặt cấu hình khác.

  • Mỗi thứ trong số này được khai báo dưới dạng tham số key-value.

  • Ví dụ, trạng thái mong muốn của một máy chủ web có thể bao gồm các phiên bản phần mềm cụ thể, cài đặt cấu hình và chính sách bảo mật. Tương tự, trạng thái mong muốn của một cụm cơ sở dữ liệu có thể bao gồm số lượng bản sao, cài đặt sao chép và chính sách sao lưu.

2. Yêu cầu hợp nhất (MRs)

  • Sử dụng yêu cầu hợp nhất hoặc yêu cầu kéo, bạn có thể đẩy bất kỳ thay đổi nào cần thiết trong cấu hình cơ sở hạ tầng bằng cách sửa đổi các tệp JSON hoặc YAML.

  • Giống như trong DevOps, các nhóm có thể xem xét mã cơ sở hạ tầng, thêm nhận xét và hợp tác trước khi đẩy mã để phê duyệt hoặc kích hoạt đường ống CI/CD.

  • Nếu cần, bạn cũng có nhật ký kiểm tra các MR trước đó cho mã cơ sở hạ tầng. Điều này hữu ích để khôi phục lại trạng thái hoạt động trước đó.

3. Đường ống CI/CD

  • Ngay khi các thay đổi đối với mã cơ sở hạ tầng được phê duyệt và MR được tạo, nó sẽ kích hoạt đường ống CI/CD.

  • Đường ống CI/CD này được kích hoạt thông qua một webhook liên tục lắng nghe bất kỳ MR hoặc PR mới nào trên kho lưu trữ Git của bạn — có thể là GitHub, Gitlab, Bitbucket, CircleCi, v.v.

  • Đường ống CI của bạn tự động xây dựng và kiểm tra các thay đổi, tạo một phiên bản mới của tạo tác triển khai và lưu trữ nó trong một registry container.

  • Công cụ CD của bạn liên tục giám sát registry để tìm các tạo tác mới. Argo CD là một tác nhân CD GitOps khai báo cho nền tảng Kubernetes.

  • Khi bạn đẩy mã, Argo CD tự động phát hiện, xây dựng hình ảnh container và triển khai hình ảnh container đến cụm Kubernetes.

  • Kubernetes đảm bảo số lượng bản sao của hình ảnh được chỉ định và sức khỏe của chúng.

Quy trình làm việc trên thường được gọi là triển khai dựa trên đẩy. Cách tiếp cận thay thế cho triển khai dựa trên đẩy là ‘triển khai dựa trên kéo’. Cơ chế dựa trên kéo giống như dựa trên đẩy, điểm khác biệt duy nhất là đường ống triển khai được thay thế bằng một operator trong cách tiếp cận dựa trên kéo.

  • Operator này liên tục giám sát kho lưu trữ môi trường để tìm bất kỳ thay đổi nào và tự động cập nhật cơ sở hạ tầng để phù hợp với nó.

  • Ngoài ra, operator cũng giám sát trạng thái hoạt động của cơ sở hạ tầng và so khớp nó với những gì được chỉ định trong kho lưu trữ môi trường. Nếu có bất kỳ sự khác biệt nào, operator sẽ cập nhật cơ sở hạ tầng (gọi là khôi phục) để phù hợp với trạng thái mong muốn trong kho lưu trữ môi trường.

Đọc thêm: Các tính năng của CircleCI để triển khai nhanh hơn

Công cụ / Ngăn xếp GitOps

Công cụ kiểm soát phiên bản

Git, SVN (không khuyến nghị)

Công cụ quản lý Git 

GitLab, GitHub, BitBucket, Azure DevOps

Công cụ tích hợp liên tục

GitLab, Jenkins, Circle CI, Bamboo

Công cụ phân phối liên tục

Argo CD, Flux, Spinnaker

Registry container

Docker Hub, AWS ECR, Google GCR, Azure ACR

Quản lý cấu hình

Puppet, Chef, SaltStack, TerraForm

Cung cấp cơ sở hạ tầng

AWS Cloudformation, Azure ARM, Google CDM, HashiCorp Terraform, công cụ gốc Kubernetes (kops, eksctl)

Điều phối container

Kubernetes, Docker Swarm, Amazon EKS, Google GKE

Lợi ích của GitOps

Các nguyên tắc GitOps bắt nguồn từ hệ thống khai báo, trạng thái hệ thống được phiên bản hóa và tự động hóa. Rất nhiều lợi ích xuất phát từ ba điều này—

Quản lý cơ sở hạ tầng dễ dàng

Giống như quy trình làm việc SDLC DevOps, nó được triển khai bằng Git và đường ống CI/CD. Điều này giúp thực hiện các thay đổi dễ dàng đối với cơ sở hạ tầng. Bạn có thể hợp tác và xem xét mã khai báo cơ sở hạ tầng với nhóm, nhận các quyền cần thiết, khắc phục sự cố, kiểm tra và khôi phục (nếu cần).

Tăng tốc độ

Nhờ vào tự động hóa, tác nhân CD và operator Kubernetes, trạng thái cơ sở hạ tầng luôn như được xác định trong kho lưu trữ môi trường. Do đó, nhóm vận hành không phải dành hàng giờ để sửa chữa môi trường, và các nhóm phát triển không phải chờ đợi để xem ứng dụng trong môi trường sản xuất.

Độ tin cậy và khả năng mở rộng cao

Vì cơ sở hạ tầng được quản lý bằng mã, nên dễ dàng nhân bản nó theo chiều ngang, đảm bảo khả năng mở rộng cao của cơ sở hạ tầng. Ngoài ra, vì nó được phiên bản hóa, việc khôi phục lại trạng thái trước đó cũng đơn giản như rebase thay đổi cuối cùng. Điều này đảm bảo tính khả dụng và độ tin cậy cao của hệ thống.

Bảo mật và tuân thủ nâng cao

Trong các tệp YAML hoặc JSON deployment manifest, bạn cũng có thể chỉ định các chính sách bảo mật và quy tắc tuân thủ để đảm bảo rằng hệ thống của bạn cực kỳ an toàn. Ngoài ra, bạn có thể hợp lý hóa quy trình xác thực và ủy quyền với Kubernetes Secrets để xử lý thông tin nhạy cảm như mật khẩu, khóa truy cập và chứng chỉ.

GitOps vs DevOps — Sự khác biệt là gì?

DevOps là một tập hợp các phương pháp văn hóa mà các nhóm vận hành SDLC áp dụng để mở khóa sự linh hoạt, năng suất và hiệu quả cao hơn nhằm phân phối các sản phẩm chất lượng cao hơn đến người dùng.

Ngược lại, GitOps là một tập hợp các hoạt động vận hành sử dụng đường ống CI/CD, hệ thống kiểm soát phiên bản Git, tự động hóa và IaC để cung cấp, giám sát và quản lý cơ sở hạ tầng ở quy mô lớn.

Về cơ bản, chúng không giống nhau. DevOps là một phương pháp và là một tập hợp các hoạt động. Nhưng bạn sẽ không sai khi nói rằng, “GitOps là việc triển khai các phương pháp DevOps vào các hệ thống cơ sở hạ tầng CNTT để quản lý chúng ở quy mô lớn”.

Kết luận cuối cùng

Các tổ chức đang tích cực tìm cách cải thiện quy trình phát triển và trải nghiệm nhà phát triển nên thử GitOps để hợp lý hóa quản lý cơ sở hạ tầng và loại bỏ các bản phát hành đáng sợ. Bằng cách đặt mã vào quyền kiểm soát hệ thống cơ sở hạ tầng của bạn, bạn đang nói ‘CÓ’ với các cơ sở hạ tầng đáng tin cậy, có thể mở rộng và an toàn, và bạn đang nói ‘KHÔNG’ với các bước và quy trình triển khai thủ công dễ xảy ra lỗi. Với những lợi ích của GitOps, đặc biệt là lợi ích về bảo mật, tốc độ và khả năng mở rộng, nó dường như là tương lai của quản lý cơ sở hạ tầng.

Nhân tiện, nếu bạn là người hâm mộ việc đảm bảo sức khỏe nhà phát triển trong khi mở khóa năng suất cao hơn và vẫn chưa thử nền tảng phân tích kỹ thuật ‘Hatica’, tin tôi đi, bạn đang bỏ lỡ một sản phẩm tuyệt vời cho các nhóm kỹ thuật của mình!

Mục lục

  • GitOps là gì?
  • Vận hành trước GitOps
  • Sự tiến hóa của GitOps
  • Vận hành với GitOps
  • GitOps hoạt động như thế nào?
    • 1. Cơ sở hạ tầng dưới dạng mã (IaC)
    • 2. Yêu cầu hợp nhất (MRs)
    • 3. Đường ống CI/CD
  • Công cụ / Ngăn xếp GitOps
  • Lợi ích của GitOps
  • Quản lý cơ sở hạ tầng dễ dàng
  • Tăng tốc độ
  • Độ tin cậy và khả năng mở rộng cao
  • Bảo mật và tuân thủ nâng cao
  • GitOps vs DevOps — Sự khác biệt là gì?
  • Kết luận cuối cùng

Tham khảo

What’s GitOps? — Workflow, tools, and benefits

Bài viết khác

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Có thể bạn quan tâm