GIANG
2092
15-10-2020
Với sự bùng nổ mạnh mẽ của các nền tảng ứng dụng nhằm đáp ứng nhu cầu người dùng tăng cao, các công nghệ phục vụ cho việc phát triển ứng dụng ở quy mô lớn với tốc độ ra mắt nhanh chóng trở nên cần thiết hơn bao giờ hết.
Kubernetes trong đó là một công nghệ mới nổi lên, hứa hẹn sẽ tạo ra những thay đổi mang tính cách mạng cho công cuộc phát triển và triển khai ứng dụng nhờ các ưu điểm: tự động hóa, co giãn linh hoạt, tiết kiệm rất nhiều giờ công sức, giảm thiểu rất nhiều sai phạm… Cùng Bizfly Cloud tìm hiểu Kubernetes là gì và ứng dụng như thế nào nhé!
Kubernetes hoặc k8s là một nền tảng mã nguồn mở giúp tự động hóa việc quản lý, mở rộng và triển khai ứng dụng dưới dạng container. K8s còn được gọi là Container Orchestration Engine (hiểu nôm na là công cụ điều phối container). Kubernetes loại bỏ rất nhiều các quy trình thủ công liên quan đến việc triển khai và mở rộng các containerized applications.
Kubernetes Orchestration cho phép người dùng xây dựng các dịch vụ ứng dụng mở rộng nhiều containers, lên lịch các containers đó trên một cụm máy chủ (cluster), mở rộng các containers và quản lý tình trạng của các containers theo thời gian.
Kubernetes ban đầu được các kỹ sư Google phát triển. Và Google cũng là một trong những cái tên tiên phong đóng góp cho công cuộc phát triển công nghệ Linux container.
Fun fact: Bảy chữ cái trong logo Kubernetes có liên quan và phản ánh tên gốc của dự án, "Project Seven of Nine".
Red Hat là một trong những công ty đầu tiên hợp tác với Google trong dự án Kubernetes trước khi Kubernetes được ra mắt, và trở thành nhà tài trợ lớn thứ 2 cho dự án ngay từ những ngày đầu. Và Google đã tặng lại dự án Kubernetes cho Cloud Native Computing Foundation (CNCF - thành lập năm 2015).
Kubernetes mở giúp tự động hóa việc quản lý, mở rộng dưới dạng container
Khi thực sự chạy các container trong production, một người có thể tạo đến hàng chục, thậm chí hàng nghìn container theo thời gian.
Những container này cần được triển khai (trên nhiều server host), quản lý, kết nối và cập nhật và nếu thực hiện công việc này một cách thủ công, sẽ cần cả một nhóm chỉ để dành riêng cho việc này.
Gần đây, nhiều ứng dụng đã thực hiện container hoá bằng cách sử dụng docker và triển khai trong môi trường production ngày càng nhiều. Tuy nhiên, trên môi trường production, việc quản lý hệ thống chạy bằng container chỉ sử dụng docker là rất khó khăn.
Với việc sử dụng docker, có thể tạo ra nhiều container trên 1 host. Tuy nhiên nếu muốn sử dụng trên môi trường production thì sẽ cần phải quan tâm đến những vấn đề như:
Cho nên việc sử dụng một nền tảng Container orchestration engine như Kubernetes sẽ giúp khắc phục được những tồn tại này. Nếu không sử dụng Kubernetes, sẽ phải xây dựng các cơ chế tự động hóa cho các vấn đề trên từ đầu, và đây là 1 nhiệm vụ không khả thi.
Kubernetes có khả năng quản lý nhiều docker host cùng lúc
K8s quản lý nhiều Docker host bằng cách tạo các container cluster (cụm container). Ngoài ra, khi chạy một container trên Kubernetes, việc triển khai replicas (tạo các bản sao giống nhau) có thể đảm bảo cân bằng tải (load balancing) tự động và tăng khả năng chịu lỗi. Đồng thời nhờ có load balancing mà cũng có thể thực hiện autoscaling - tự động tăng giảm số lượng replicas.
Các Load Balancing có thể thực hiện tăng giảm số lượng Replicas
Docker host còn gọi là Node. Khi sắp xếp các container vào các Node này, có các dạng workload như "Sử dụng Disk I/O nhiều" và "sử dụng băng thông cao", và "Disk là SSD" và "CPU xung nhịp cao cao". Tùy thuộc vào loại máy chủ Docker và loại workload, K8s có thể tự ý thức được việc affinity hay anti-affinity để lập lịch cho hợp lý.
Trong các trường hợp không cụ thể khác, scheduling sẽ được thực hiện dựa trên tình trạng CPU và bộ nhớ trống, do đó người dùng không cần quản lý việc đặt container vào Docker host nào. Ngoài ra, nếu tài nguyên không đủ, k8s cũng sẽ tự động phân tỷ lệ các Kubernetes cluster.
Với khả năng chịu lỗi cao, Kubernetes thực hiện giám sát container theo tiêu chuẩn. Trong trường hợp có sự cố bất ngờ, một container nào đó bị dừng thì sẽ thực hiện self-healing bằng cách khởi động lại container đó. Self-healing là một trong những khái niệm quan trọng trong k8s giúp tự động khôi phục các service khi node xảy ra lỗi, bị die, hoặc bị di chuyển đi...
Bên cạnh việc giám sát, K8s cũng có thể thiết lập healthcheck với các tập lệnh HTTP/TCP/shell.
Khi thực hiện auto scaling, nếu xảy ra vấn đề về endpoint đến container. Trong trường hợp sử dụng máy ảo, với việc đặt load balancing, endpoint được cấp là VIP.
K8s cũng có chức năng như vậy gọi là Service cung cấp load balancing cho một nhóm container cụ thể. Ngoài việc tự động thêm và xóa tại thời điểm scale, nó tự động ngắt kết nối trong trường hợp container bị lỗi. Việc tự động cách ly trước khi rolling updates container, cho thấy K8s có khả năng quản lý các endpoint với SLA cao.
Với kiến trúc microservices, để triển khai và sử dụng container image tạo ra tương ứng cho mỗi chức năng sẽ cần đến Service discovery.
Như vậy, để sử dụng Docker trong môi trường production mà không sử dụng công cụ điều phối như Kubernetes, người dùng sẽ cần phải tự tạo các chức năng được đề cập phía trên. Nhưng với Kubernetes, chúng ta có thể tận dụng cơ chế tự động hóa của công cụ này.
Nếu doanh nghiệp thực sự muốn scaling hệ thống một cách nhanh chóng và đã sử dụng container (Docker).
Ưu điểm chính của việc sử dụng Kubernetes, đặc biệt nếu bạn đang tối ưu app dev cho cloud, là nó cung cấp cho bạn nền tảng để lên lịch và chạy các containers trên các clusters của máy vật lý hoặc máy ảo.
Công nghệ Kubernetes giúp bạn triển khai và hoạt động trên cơ sở hạ tầng container-based trong môi trường sản xuất. Và bởi vì Kubernetes tự động hóa các hoạt động vận hành nên bạn có thể thực hiện nhiều tác vụ đối với containers cũng giống như những nền tảng ứng dụng khác hoặc các hệ thống quản lý khác.
K8s giúp tối ưu tài nguyên, phát triển ứng dụng dễ dàng mà còn miễn phí
Với Kubernetes bạn có thể:
Tuy nhiên, Kubernetes dựa vào các dự án khác để cung cấp đầy đủ các dịch vụ này. Với việc bổ sung các dự án nguồn mở khác, bạn hoàn toàn có thể tận dụng tối đa sức mạnh của Kubernetes. Những kết hợp cần thiết thường có:
Những Image này thường được quản lý từ một nơi lưu trữ tập trung. Chẳng hạn sử dụng Docker Hub để chứa các Image của nhiều ứng dụng phổ biến như nginx, mysql, wordpress..
Với những tính năng ưu việt và vượt trội, tích hợp Kubernetes Engine có thể mang lại những tác động tích cực đến các Dev team/DevOps cũng như toàn bộ doanh nghiệp. Nếu bạn đang muốn bắt đầu với Kubernetes, truy cập: https://bizflycloud.vn/kubernetes-engine để trải nghiệm miễn phí ngay hôm nay.