Bài viết thuộc series Kubernetes cơ bản
Giới thiệu
Chào các bạn tới với Kubernetes cơ bản. Trong series này chúng ta sẽ nói về các resource cơ bản của Kubernetes như là Pod, ReplicaSet, Deployment, StatefulSet. Cách để mở traffic cho Client dùng Service. Lưu trữ dữ liệu dùng PersistentVolumeClaim. Truyền cấu hình ứng dụng vào Container dùng ConfigMap and Secret. Sau khi đọc xong Series các bạn sẽ có kiến thức cơ bản về cách sử dụng từng resource cơ bản của Kubernetes. Đây là series giúp bạn trên con đường trở thành một Kubernetes Developer. Tham khảo từ cuốn Kubernetes In Action.
Kubernetes là gì?
Kubernetes (hay k8s) là một nền tảng open-source dùng để quản lý container. Với Kubernetes việc phát triển, triển khai và mở rộng ứng dụng trở nên rất dễ dàng.
Ta có thể dùng Kubernetes trên nhiều nền tảng khác nhau như máy chủ vật lý, on-premise hoặc Cloud. Kubernetes được sử dụng bởi nhiều công ty lớn trên thế giới trong đó có Google, Facebook, Amazon, … và có cộng đồng rất lớn.
Kubernetes giúp ta giải quyết vấn đề gì?
Để hiểu K8S giúp ta giải quyết những vấn đề gì? Trước hết chúng ta cùng xem qua những cách triển khai ứng dụng phổ biến.
Chạy thẳng ứng dụng trên Server
Ở cách này chúng ta chạy ứng dụng trên máy chủ vật lý. Điểm yếu của cách triển khai này là không có cách nào định nghĩa ranh giới tài nguyên giữ các ứng dụng và nó gây ra vấn đề về phân bổ tài nguyên giữa các ứng dụng.
Ví dụ khi nhiều ứng dụng chạy trên cùng máy chủ vật lý, nếu có một thằng sử dụng nhiều tài nguyên hơn và cứ tăng tài nguyên nó sử dụng (vì ta không có giới hạn). Lúc này những thằng còn lại sẽ có ít tài nguyên để sử dụng, khiến các ứng dụng còn lại sẽ chạy chậm. Để giải quyết vấn đề này thì máy ảo được ra đời.
Chia Server ra thành nhiều máy ảo
Đây là giải pháp giải quyết vấn đề trên, được gọi là Virtualization (ảo hóa), công nghệ ảo hóa cho phép ta chạy nhiều máy ảo (Virtual Machines - VMs) trên cùng một máy chủ vật lý, mỗi máy ảo sẽ có hệ điều hành (OS), File System và CPU riêng biệt.
Những ứng dụng của ta chạy trong các VM này. Từng con VM được định nghĩa có giới hạn tài nguyên, do đó không xảy ra vấn đề một ứng dụng sẽ chạy chiếm tài nguyên vượt qua giới hạn VM và ảnh hưởng tới những ứng dụng nằm trong VM khác.
Điểm yếu của cách triển khai này là do VM được ảo hóa bằng cách sao chép cả OS và phần cứng (Hardware). Nên một máy chủ vật lý chỉ có thể tạo một số lượng nhỏ VM, 4 hoặc 5 với các máy chủ bình thường.
Chạy ứng dụng bằng Container
Container cũng là cách để ảo hóa ứng dụng giống như VM. Nó cũng có OS và File System riêng, nhưng khác với VM thì Container chỉ sao chép OS mà không sao chép Hardware. Do đó ta có thể chạy nhiều ứng dụng trên cùng một máy chủ vật lý, mỗi ứng dụng sẽ có môi trường riêng.
Với Container việc phát triển và chạy ứng dụng của ta trên các OS khác nhau rất dễ dàng. Điểm yếu của Container là nó chỉ chạy được ứng dụng có thể chạy trên môi trường Linux. Ví dụ ứng dụng chỉ có thể chạy trên Window mà không chạy được trên Linux thì Container không thể chạy ứng dụng đó.
Vậy kubernetes giúp ta vấn đề gì?
Chạy ứng dụng bằng Container giúp ta giải quyết rất nhiều vấn đề. Nhưng hãy thử tưởng tượng nếu số lượng Container mở rộng và lên tới hơn 1000, thì làm cách nào ta biết được một Container nó đang chạy cái gì và thuộc về dự án nào? Và nếu ta muốn tăng hiệu suất của ứng dụng bằng cách cho nó tự động mở rộng thêm 2 hoặc 3 Container thì làm thế nào? Và nếu máy chủ vật lý đang triển khai Container đó bị sự cố và không thể chạy tiếp thì sao? Kubernetes giúp ta giải quyết các vấn đề trên.
Với K8S chúng ta có thể nhóm và quản lý Container theo ứng dụng và dự án. K8S cung cấp các tính năng giúp ta dễ dạng mở rộng ứng dụng. Và các tính năng giúp độ khả dụng hệ thống của ta cao nhất, khi một máy chủ vật lý gặp sự cố, nó có thể chuyển Container sang máy chủ vật lý khác và tiếp tục chạy, không ảnh hưởng tới quá trình trải nghiệm ứng dụng của người dùng.
Cài Kubernetes
Các bạn theo hướng sau để cài K8S cho môi trường local để dev và test. Cài K8S bằng Minikube.
Kết luận
Sử dụng Kubernetes giúp ta dễ dàng chạy và quản lý ứng dụng. Các nền tảng Cloud lớn cũng có cung cấp dịch vụ Kubernetes rất dễ sử như AWS cung cấp EKS, Azure cung cấp AKS và Google Cloud cung cấp GKE. Ở bài tiếp theo chúng ta sẽ nói về thành phần cơ bản nhất để triển khai một ứng dụng trên môi trường Kubernetes là Pod.
Nếu bài viết có gì sai hoặc cần cập nhật thì liên hệ Admin.
Tham gia nhóm chat của DevOps VN tại Telegram.
Kém tiếng Anh và cần nâng cao trình độ giao tiếp: Tại sao bạn học không hiệu quả?