Kubernetes là gì?
Thuật ngữ này không còn xa lạ với những developer có kinh nghiệm lâu năm, tuy nhiên với những coder còn mới thì đó là thuật ngữ khá mới. Trong bài viết này, hãy cùng ImTech tìm hiểu về Kubernetes là gì, Kubernetes có thể làm những gì? Nên dùng Kubernetes khi nào?
1. Kubernetes là gì?
Kubernetes được viết tắt K8s là một hệ thống điều phối container mã nguồn mở (open sources container orchestration tool) được phát triển bởi Google. Kubernetes là một nền tảng nguồn mở, khả chuyển, có thể mở rộng để quản lý các ứng dụng được đóng gói và các service, giúp thuận lợi trong việc cấu hình và tự động hoá việc triển khai ứng dụng.
Kubernetes là một hệ sinh thái lớn và phát triển nhanh chóng. Các dịch vụ, sự hỗ trợ và công cụ có sẵn rộng rãi. Tên gọi Kubernetes có nguồn gốc từ tiếng Hy Lạp, có ý nghĩa là người lái tàu hoặc hoa tiêu. Google mở mã nguồn Kubernetes từ năm 2014.
2. Kubernetes có thể làm những gì?
Các container là một cách tốt để đóng gói và chạy các ứng dụng của bạn. Trong môi trường production, bạn cần quản lý các container chạy các ứng dụng và đảm bảo rằng không có khoảng thời gian downtime.
Ví dụ: Một container bị tắt đi, một container khác cần phải khởi động lên. Điều này sẽ dễ dàng hơn nếu được xử lý bởi một hệ thống.
Đó là cách Kubernetes đến với chúng ta. Kubernetes cung cấp cho bạn một framework để chạy các hệ phân tán một cách mạnh mẽ. Nó đảm nhiệm việc nhân rộng và chuyển đổi dự phòng cho ứng dụng của bạn, cung cấp các mẫu deployment và hơn thế nữa.
Ví dụ: Kubernetes có thể dễ dàng quản lý một triển khai canary cho hệ thống của bạn.
Kubernetes cung cấp cho bạn những gì?
2.1 Service discovery và cân bằng tải
Kubernetes có thể expose một container sử dụng DNS hoặc địa chỉ IP của riêng nó. Nếu lượng traffic truy cập đến một container cao, Kubernetes có thể cân bằng tải và phân phối lưu lượng mạng (network traffic) để việc triển khai được ổn định.
2.2 Điều phối bộ nhớ
Kubernetes cho phép bạn tự động mount một hệ thống lưu trữ mà bạn chọn, như local storages, public cloud providers, v.v.
2.3 Tự động rollouts và rollbacks
Bạn có thể mô tả trạng thái mong muốn cho các container được triển khai dùng Kubernetes và nó có thể thay đổi trạng thái thực tế sang trạng thái mong muốn với tần suất được kiểm soát. Ví dụ, bạn có thể tự động hoá Kubernetes để tạo mới các container cho việc triển khai của bạn, xoá các container hiện có và áp dụng tất cả các resource của chúng vào container mới.
2.4 Đóng gói tự động
Bạn cung cấp cho Kubernetes một cluster gồm các node mà nó có thể sử dụng để chạy các tác vụ được đóng gói (containerized task). Bạn cho Kubernetes biết mỗi container cần bao nhiêu CPU và bộ nhớ (RAM). Kubernetes có thể điều phối các container đến các node để tận dụng tốt nhất các resource của bạn.
2.5 Tự phục hồi
Kubernetes khởi động lại các containers bị lỗi, thay thế các container, xoá các container không phản hồi lại cấu hình health check do người dùng xác định và không cho các client biết đến chúng cho đến khi chúng sẵn sàng hoạt động.
2.6 Quản lý cấu hình và bảo mật
Kubernetes cho phép bạn lưu trữ và quản lý các thông tin nhạy cảm như: password, OAuth token và SSH key. Bạn có thể triển khai và cập nhật lại secret và cấu hình ứng dụng mà không cần build lại các container image và không để lộ secret trong cấu hình stack của bạn.
3. Nên sử dụng Kubernetes khi nào?
Kubernetes được sử dụng khi chúng ta cần quản lý và triển khai một hệ thống có độ phức tạp cao với nhiều Container/Microservices. Kubernetes cung cấp giải pháp quản lý, triển khai và vận hành tốt cho các dự án có yêu cầu:
- Scalability (Khả năng mở rộng linh hoạt): Kubernetes cho phép nhà phát triển dự án linh hoạt tăng hoặc giảm số lượng các Container/Microservices trong hệ thống một cách dễ dàng và linh hoạt.
- Availability (Tính khả dụng): Kubernetes cung cấp các tính năng như replication, self-healing, rollbacks tự động và horizontal scaling để đảm bảo rằng hệ thống luôn hoạt động mạnh mẽ và không bị gián đoạn.
- Continuous Deployment/Delivery (Triển khai/chuyển giao liên tục): Kubernetes cho phép bạn triển khai và cập nhật mã nguồn một cách nhanh chóng và dễ dàng.
- Portability (Tính cơ động): Kubernetes giúp deloy và manage ứng dụng một cách nhất quán và đáng tin cậy. Nó hỗ trợ việc chuyển đổi giữa các cloud provider hoặc môi trường on-premise dễ dàng.
Vậy câu trả lời cho câu hỏi Nên sử dụng Kubernetes khi nào? sẽ là: Nếu bạn đang xây dựng một hệ thống phức tạp với nhiều Container/Microservices, sử dụng Kubernetes sẽ là giải pháp tốt nhất để đáp ứng nhu cầu quản lý, vận hành và mở rộng.
4. Những điểm hạn chế của Kubernetes
Mặc dù Kubernetes sinh ra đã giải quyết được rất nhiều vấn đề trong phát triển hệ thống, là một công cụ quản lý container và triển khai microservices rất mạnh mẽ, tuy nhiên cũng có những nhược điểm nhất định như:
- Complexity: Kubernetes cung cấp rất nhiều tính năng và các tùy chọn cho việc triển khai và quản lý hệ thống nhưng chúng lại rất phức tạp để thiết lập và vận hành, đòi hỏi bạn phải có trình độ chuyên môn và nguồn lực cao để thiết lập và quản lý Kubernetes.
- Resource Requirements: Kubernetes yêu cầu rất nhiều tài nguyên máy chủ để hoạt động, đặc biệt là khi bạn quản lý nhiều nodes.
- Networking Challenges: Kubernetes cung cấp rất nhiều tính năng cho việc quản lý mạng, nhưng việc cấu hình và sử dụng các tính năng này cũng có thể khiến việc triển khai trở nên phức tạp.
- Cost (chi phí): Kubernetes có thể tăng chi phí cho máy chủ và tài nguyên mạng, đặc biệt khi bạn sử dụng nhiều nodes hoặc các dịch vụ cloud như Amazon EKS, GKE trên Google Cloud và AKS trên Azure.
- Security: Kubernetes cung cấp rất nhiều tính năng bảo mật, nhưng việc cấu hình và sử dụng các tính năng này cũng có thể khiến việc bảo mật trở nên phức tạp.