Kubernetes là gì? Cùng tìm hiểu quy trình tự động hóa triển khai phần mềm bằng Kubernetes

Kubernetes là gì?

Đây là một nền tảng mã nguồn mở được sử dụng để điều phối container (vùng chứa mã nguồn mở ) để tự động hóa việc triển khai, mở rộng và quản lý phần mềm. Được thiết kế và phát triển bởi đội ngũ kỹ sư phần mềm của Google vào tháng 6/2014, nhưng hiện tại, Cloud Native Computing Foundation vẫn duy trì dự á. Hiện tại dự án này đang được duy trì bởi Tổ chức Điện toán Bản địa Đám mây của Linux (CNCF). Kubernetes được viết bằng ngôn ngữ lập trình Go do Google sản xuất.

Kubernetes là một sản phẩm của Google

Thành phần của Kubernetes

Khi triển khai Kubernetes, bạn sẽ có một cluster. Cluster của Kubernetes bao gồm tập hợp các node để vận hành các ứng dụng được đóng gói. Mỗi cluster có ít nhất một node. 

Một node có thể chứa nhiều pods. Pod là đại diện cho một nhóm gồm ít nhất một container và các tài nguyên mà các container đó sử dụng. Mặt phẳng điều khiển làm nhiệm vụ quản lý các node và pod trong cluster. Trong các môi trường sản xuất, mặt phẳng điều khiển sẽ chạy trên các máy tính khác nhau và một cluster thường vận hành nhiều node. 

Dưới đây là sơ đồ thành phần của một cluster của Kubernetes:

Thành phần của cluster Kubernetes

Vai trò của Kubernetes

Các container được sử dụng như một phương tiện để đóng gói các ứng dụng cùng các yếu tố cần thiết để chạy nó trên mọi môi trường hoạt động. Việc quản lý các container để đảm bảo không có thời gian downtime rất quan trọng. 

Trong trường hợp này, bạn sẽ cần đến Kubernetes, cụ thể là framework của nó, để chạy các hệ thống phân tán. Nó giúp bạn thực hiện việc nhân rộng và chuyển đổi dự phòng cho ứng dụng. 

Chức năng của Kubernetes

K8s cho phép bạn:

  • Sắp xếp các container trên nhiều máy chủ
  • Khai thác công dụng của phần cứng máy tính để tối đa hóa tài nguyên cần thiết cho việc vận hành những ứng dụng doanh nghiệp của bạn. 
  • Quản lý và thực hiện công tác triển khai, cập nhật ứng dụng hoàn toàn tự động. 
  • Gắn kết và bổ sung bộ nhớ để vận hành các ứng dụng trạng thái
  • Mở rộng quy mô cho các ứng dụng được đóng gói và tài nguyên của chúng nhanh chóng. 
  • Quản lý khai báo ứng dụng và đảm bảo ứng dụng đã triển khai được vận hành theo đúng ý muốn
  • Kiểm tra tình trạng sức khỏe và tự phục hồi ứng dụng của bạn với tính năng thay thế, khởi động lại, nhân bản và định tỷ lệ tự động. 

Kubernetes giải quyết vấn đề gì?

Bằng việc sử dụng docker, trên 1 host bạn có thể tạo ra nhiều container. Tuy nhiên nếu bạn có ý định sử dụng trên môi trường production thì phải bắt buộc phải nghĩ đến những vấn đề dưới đây:

  • Việc quản lý hàng loạt docker host
  • Container Scheduling
  • Rolling update
  • Scaling/Auto Scaling
  • Monitor vòng đời và tình trạng sống chết của container.
  • Self-hearing trong trường hợp có lỗi xãy ra. (Có khả năng phát hiện và tự correct lỗi)
  • Service discovery
  • Load balancing
  • Quản lý data, work node, log
  • Infrastructure as Code
  • Sự liên kết và mở rộng với các hệ thống khác

 

Self-hearing là một khái niệm cự kỳ quan trọng, nếu trường hợp có một node nào đó trong cluster xảy ra vấn đề ví dụ có thể là bị die, hay node đó được di chuyển đi. Cơ chế self-hearing sẽ tự động phục hồi mà không ảnh hưởng đến service.

Các kết hợp cần thiết

Tuy nhiên, Kubernetes lại phụ thuộc vào các dự án mã nguồn khác để cung cấp đầy đủ những dịch vụ được điều phối này. Bạn có thể kết hợp hệ thống với: 

  • Registry, thông qua các dự án như Docker Registry
  • Networking, thông qua các dự án như OpenvSwitch
  • Telemetry,  thông qua các dự án như Hawkular hoặc Kibana
  • Security, thông qua các dự án như SELinux, LDAP hoặc OAUTH
  • Automation, thông qua việc bổ sung các playbook Ansible để cài đặt và quản lý vòng đời của cluster.
  • Services, thông qua một danh mục đa dạng các mẫu ứng dụng phổ biến 

Khi thực hiện phân chia container vào các Node (docker host), dựa trên các loại docker host kiểu như “Disk SSD” hay “số lượng clock của CPU cao”… Hoặc dựa trên loại Workload kiểu như “Disk I/O quá nhiều”, “Băng thông đến một container chỉ định quá nhiều” … K8s sẽ ý thức được việc affinity hay anti-affinity và thực hiện Scheduling một cách hợp lý cho chúng ta.

Kết Luận

Các ứng dụng production thực tế mở rộng nhiều containers. Các containers đó phải được triển khai trên nhiều server hosts. Kubernetes cung cấp khả năng phối hợp và quản lý cần thiết để triển khai các containers theo quy mô cho các workloads đó.

Việc sử dụng Kubernetes sẽ giúp bạn kiểm soát các container tốt hơn. Hiện nay các AWS, Azure hay Google Cloud cũng đang sử dụng rộng rãi Kubernetes vì tính ưu việt của nó. Nếu bạn muốn giải đáp thắc mắc Kubernetes là gì và cần tìm hiểu về vai trò của hệ thống này thì hãy nghiên cứu kỹ thông tin trong bài viết trên nhé.  

Tài liệu tham khảo