Xin chào tất cả các bạn. Thời gian vừa rồi mình có dành thời gian tìm hiểu 1 số khái niệm chính trong Kubernetes. Hôm nay mình muốn ngồi viết lại 1 bài blog về Kubernetes, vừa để tổng hợp lại những kiến thức mình đã tìm hiểu được, vừa để giúp các bạn cũng đang tìm hiểu về Kubernetes như mình có thêm 1 bài viết tham khảo nho nhỏ trên hành trình tìm hiểu Kubernetes dài đằng đẵng không biết ngày mai. Như các bạn đã biết, Kubernetes là 1 chủ đề rất rộng, có lẽ là rộng nhất trong các loại công nghệ mà mình đã từng tìm hiểu. Vì thế 1 bài blog nho nhỏ như thế này sẽ không thể nào đi vào chi tiết về tất cả các khía cạnh khác nhau của Kubernetes được. Bài blog này của mình sẽ tập trung chủ yếu vào các câu hỏi mang tính khái quát về Kubernetes, ví dụ như : Kubernetes là cái chi chi? Trước giờ không có Kubernetes thì vẫn develop, deploy bình thường đấy thôi, tự nhiên sao lại đẻ ra thằng Kubernetes này làm gì? Có nhất thiết cần phải học và apply Kubernetes vào dự án không, khi nào cần, khi nào không, vv ... Thôi mình mở bài dài quả rồi, gét gô vào nội dung chính thôi anh em (^-^)
Kubernetes là gì
Nói 1 cách ngắn gọn theo kiểu official thì Kubernetes là 1 "Open source container orchestration tool". Kubernetes giúp quản lý các "Containerized applications" tốt và hiệu quả hơn.
Nói 1 cách dài dòng, dân dã và dễ hiểu hơn xí thì Kubernetes là 1 tool dùng để quản lý 100, 1000, 1 vạn container khác nhau 1 cách dễ dàng và hiệu quả. Như các bạn đã biết, gần đây với sự xuất hiện của các loại công nghệ container như docker, đã giúp chúng ta có thể xây dựng môi trường phát triển ứng dụng 1 cách hoàn toàn độc lập mà không phụ thuộc nhiều vào OS của server. Ví dụ bạn xây dựng 1 ứng dụng LEMP, bạn chỉ cần 1 container Nginx, 1 container Mysql, 1 container PHP-FPM, sau đó bạn bê 3 container đấy đi lên server Linux, hay bất kỳ server nào khác thì nó vẫn sẽ chạy ngon lành mà không phải lo lắng về các xung đột liên quan đến OS hay library version. Nếu ứng dụng của bạn chỉ là 1 ứng dụng nho nhỏ, với 3 container và chạy trên 1 server duy nhất thì việc build, run và manage các container đó tương đối dễ dàng, không có vấn đề gì cả. Tuy nhiên, nếu ứng dụng của bạn là 1 ứng dụng rất lớn, chạy trên nhiều con server với rất nhiều container khác nhau, thì câu chuyện quản lý container lúc này lại không hề đơn giản, và đôi khi là Impossible. Đây là lúc Kubernetes xuất hiện, nó sẽ giúp bạn quản lý rất nhiều container, chạy trên rất nhiều server khác nhau 1 cách đơn giản và dễ dàng.
Các component chính trong Kubernetes
Khi chúng ta apply Kubernetes, tất cả server trong hệ thống của chúng ta sẽ tập hợp lại thành 1 cụm server được gọi là Kubernetes Cluster. Các server trong Kubernetes Cluster được gọi là các NODE. Thông thường sẽ có 1 node chính được gọi là master node và các node còn lại sẽ được gọi là worker node. Master node sẽ đóng vai trò như người chỉ huy trường trong 1 dàn nhạc hợp xướng mà trong đó mỗi worker node sẽ là 1 thành viên trong dàn hợp xướng đó. Tất nhiên, tùy quy mô của hệ thống mà chúng ta có thể có nhiều hơn 1 master node, tuy nhiên vì chúng ta mới đang bắt đầu tìm hiểu Kubernetes nên ở thời điểm này chúng ta sẽ tạm thời giả định, 1 Kubernetes Cluster sẽ bao gồm 1 Master node và nhiều Worker node nhé các bạn.
Kubernetes có rất nhiều components giúp chúng ta có thể xây dựng và quản lý 1 hệ thống nhiều container, ví dụ như :
- Pod Component : Là 1 "Smallest unit in Kubernetes", chứa container và có IP riêng, tuy nhiên IP này chỉ là IP tạm thời sẽ được reset sau mỗi lần Pod được restart hoặc recreate.
- Service Component : Là 1 Permanent IP, dùng để gán vào các Pod.
- Deployment Component : Là 1 bản thiết kế trong việc tạo ra các Pod có thể replicate.
- Config Component : Giống như 1 external config file. Giúp các ứng dụng trong container có thể access và get những thông tin config cần thiết
- vv ...
Số lượng Component trong Kubernetes là rất nhiều, cách dùng của từng Component cũng rất đa dạng. Trong phạm vi bài viết lần này, mình sẽ không đi sâu vào cách dùng cũng như các config của từng Component. Nếu các bạn muốn tìm hiểu thêm về cách dùng của từng Component có thể tham khảo trên trang của Kubernetes nhé.
Các cách để xây dựng Kubernetes Cluster
Hiện tại theo mình tìm hiểu thì sẽ có 3 cách phổ biến nhất để có thể xây dựng được 1 Kubernetes Cluster như sau :
- Sử dụng Public Cloud Managed Kubernetes Cluster
- Sử dụng các tool build Kubenetes Cluster như Kubeadm, Rancher
- Sử dụng minikube
Tuy nhiên, theo mình với mục đích là học tập và demo thì có lẽ việc sử dụng minikube để xây dựng 1 Kubernetes Cluster là nhanh gọn và dễ dàng nhất.
Khi các bạn đã hiểu hơn về Kubernetes rồi thì chúng ta có thể thực hành đến các cách tiếp theo như sử dụng các dịch vụ Cloud Provider hay tool Rancher để build Kubernetes Cluster.
Tổng Kết
Hy vọng bài viết này của mình đã mang đến cho các bạn 1 cái nhìn khái quát về Kubernetes. Thật ra đây là 1 chủ đề khá là rộng, bản thân mình cũng vẫn đang cố gắng tìm hiểu và thực hành về nó mỗi ngày. Nếu trong thời gian tới mình có thể tìm hiểu nhiều hơn về nó, mình sẽ viết thêm các bài viết khác để chia sẽ những thứ mình tìm hiểu được. Cảm ơn các bạn đã dành thời gian đọc đến cuối bài viết này. Nếu các bạn có bất kỳ thắc mắc hay câu hỏi nào, hãy thoải mái cho mình biết ở phần bình luận nhé. Mình và các bạn sẽ cùng thảo luận và tìm ra câu trả lời phù hợp với những câu hỏi và thắc mắc đó.