Giới thiệu
Trong môi trường Kubernetes, việc quản lý cấu hình thông qua ConfigMaps và Secrets là rất phổ biến. Mặc dù Kubernetes cung cấp khả năng lưu trữ các dữ liệu nhạy cảm và cấu hình ứng dụng, nhưng khi có sự thay đổi trong các thông tin này, các ứng dụng thường không tự động cập nhật. Điều này đồng nghĩa với việc các DevOps hoặc SRE phải thực hiện thủ công các bước như xóa Pod hoặc thực hiện lệnh Rollout restart để ứng dụng tải lại cấu hình mới. Điều này không chỉ gây bất tiện mà còn làm tăng gánh nặng cho các anh em trong đội ngũ phát triển và vận hành.
Thách Thức
Việc không tự động cập nhật cấu hình ứng dụng khi thay đổi Secrets hoặc ConfigMaps có thể gây ra nhiều rắc rối, nhất là trong các môi trường phát triển và thử nghiệm. Hãy thử tưởng tượng việc phải thực hiện thao tác thủ công mỗi khi có sự thay đổi trong cấu hình, điều này chắc chắn sẽ gây lãng phí thời gian và công sức.
Các Tình Huống Cần Tự Động Cập Nhật
- Trong các môi trường phát triển (Dev, Staging) không yêu cầu độ ổn định cao.
- Khi cấu hình ứng dụng thường xuyên thay đổi.
- Khi đội ngũ phát triển quản lý cấu hình, trong khi DevOps/SRE quản lý hạ tầng, để giảm thiểu khối lượng công việc cho DevOps/SRE.
- Để đảm bảo tính khả dụng của ứng dụng, với các cấu hình Readiness và Liveness chuẩn.
Khi nhu cầu phát sinh, những giải pháp hữu ích sẽ được tìm ra. Trong bài viết này, chúng ta sẽ cùng khám phá một công cụ rất hữu ích có tên là Reloader, giúp tự động hóa quá trình cập nhật ứng dụng khi có sự thay đổi trong ConfigMaps và Secrets.
Công Cụ Reloader
Reloader là một công cụ mã nguồn mở được phát triển bởi Stakater. Đây là một Kubernetes Controller, đảm nhận nhiệm vụ giám sát liên tục sự thay đổi của các ConfigMaps và Secrets. Ngay khi phát hiện sự thay đổi, Reloader sẽ tự động cập nhật lại các Deployment, StatefulSet, hoặc DaemonSet đang sử dụng ConfigMaps hoặc Secrets đó, giúp ứng dụng chạy với cấu hình mới nhất mà không cần các thao tác thủ công.
Cài Đặt Reloader
Để cài đặt Reloader, bạn có thể thực hiện theo các bước đơn giản sau. Vì đây là một Kubernetes Controller, bạn cần cài đặt trên cụm Kubernetes mà bạn muốn áp dụng. Reloader rất dễ để cài đặt, bạn có thể sử dụng lệnh sau để áp dụng manifest trực tiếp:
kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml
Ngoài ra, bạn cũng có thể sử dụng Kustomize hoặc Helm Charts cho nhiều tùy chọn cấu hình hơn. Tham khảo tài liệu chính thức để biết thêm chi tiết: Reloader Documentation.
Cấu Hình Reloader
Sau khi cài đặt, bạn cần thêm một annotation cho Deployment mà bạn muốn Reloader giám sát. Annotation này được định nghĩa như sau:
yaml
annotations:
reloader.stakater.com/auto: "true"
Bạn có thể thêm nó bằng cách sử dụng lệnh:
kubectl annotate deployment flask-app reloader.stakater.com/auto="true"
Thử Nghiệm Với Reloader
Chúng ta sẽ thực hiện một thử nghiệm với một ứng dụng web Python sử dụng Flask. Dưới đây là quy trình thử nghiệm:
- Viết mã cho ứng dụng web.
- Dockerize ứng dụng.
- Đẩy hình ảnh lên Dockerhub.
- Tạo các tài nguyên cần thiết trên Kubernetes (Secret, Deployment, Service).
- Thực hiện thử nghiệm thay đổi Secret khi chưa cài đặt Reloader.
- Cài đặt Reloader và thực hiện cấu hình cho deployment.
- Thực hiện thử nghiệm thay đổi Secret khi đã cài đặt Reloader.
Kết Luận
Công cụ Reloader không chỉ tự động hóa việc cập nhật ứng dụng khi có sự thay đổi trong ConfigMaps và Secrets, mà còn giúp giảm thiểu khối lượng công việc thủ công cho đội ngũ DevOps/SRE. Bên cạnh đó, Reloader còn cung cấp khả năng cấu hình theo namespace và label, giúp người dùng tùy chỉnh linh hoạt hơn.
Hy vọng bài viết này sẽ mang lại hữu ích cho bạn trong công việc. Nếu bạn thấy thông tin này giá trị, hãy Upvote và Follow để nhận thêm những bài viết khác về DevOps và SRE nhé!
Chúc bạn một ngày tốt lành!
source: viblo