Kubernetes – Phần 5 – Resource là gì?

Tiếp tục chuỗi bài tìm hiểu về Kubernetes, hôm nay chúng ta sẽ cùng nhìn tổng quan về các loại resource trong Kubernetes.

Các bạn hẳn nghe khá nhiều thuật ngữ khi tìm hiểu về Kubernetes, đôi khi bị ngợp vì quá nhiều. Tôi cũng vậy, cứ thi thoảng lại thấy vài thuật ngữ mới, lại phải đi google xem nó là cái gì. Các thuật ngữ dùng nhiều nhất trong Kubernetes đa phần thuộc về resource.

Resource: Được hiểu là một loại tài nguyên được kubernetes quản lý như namespace, pods, volume, service, serviceaccount, configMap, secret,…

Resource có loại có sẵn (còn gọi là native), tức là cài đặt Kubernetes là nó có luôn rồi. Có loại resource tạo mới bằng kỹ thuật CRD (CustomResourceDefinition), thường được sử dụng trong các ứng dụng Operator. Ứng dụng Operator là gì, CRD là gì thì chúng ta sẽ tìm hiểu ở các phần sau.

Nếu phân chia các resource thành nhóm chức năng thì chúng ta có thể chia thành các nhóm sau (nguồn internet):

Hình 1: Phân nhóm các resource theo chức năng

 Thực ra mình thấy việc chia nhóm chức năng như trên cũng không được trực quan, dễ hiểu cho lắm. Lý do ư? Vì các bạn đôi khi chả biết cái resource kia sẽ được sử dụng như thế nào, trong trường hợp nào. Mình thấy có một cách phân nhóm khác giúp các bạn dễ hình dung hơn, đó là chia resource theo phạm vi namespace (nguồn từ cuốn CKAD study guide):

Hình 2: Phân nhóm các resource theo namespace

Hình trên chỉ là trích dẫn những resource tiêu biểu trong phạm vi namespace , còn muốn biết chính xác các resource đang có trong Kubernetes thì bạn có thể sử dụng lệnh:

kubectl api-resources --namespaced=true

Các bạn có thấy điều gì đặc biệt từ hình trên không? Pod là trung tâm kết nối của mọi resources khác. Pod là gì? Tại sao mọi resource khác đều xoay quanh Pod.

Để nói về Pod thì không dưới 5 bài viết, nhưng trong phạm vi của resource thì các bạn có thể hiểu: Pod là ứng dụng được chạy trong một vùng không gian riêng. Nếu các bạn đã học về container thì thấy Pod và Container rất giống nhau. Thực tế Kubernetes không làm việc trực tiếp với container, mà thay vào đó Kubernetes bọc (wrap) một hoặc vài container vào trong một cấu trúc gọi là Pod.

Điều này có nghĩa gì? Nghĩa là một cụm Kubernetes chỉ tồn tại khi đảm bảo các Pod tồn tại. Nhưng ở giai đoạn chuyển tiếp, các ứng dụng mới được containerize (đóng gói vào container) thì khả năng thích nghi trên môi trường Kubernetes là rất thấp (cụ thể là chạy application trong container). Đủ các thứ bất lợi như: process ghi log ra file thay vì ghi ra stdout/stderr, hardcode các tham số/biến thay vì sử dụng biến môi trường, chạy nhiều process và listen trên nhiều port trong một container,…. Vì vậy, thay vì cố gắng tích hợp thật nhiều thứ vào Kubernetes thì hãy làm sao để Pod có thể chạy mượt mà trên Kubernetes trước.

Đứng ở góc độ của đội phát triển phần mềm, bạn cần phải biết, hiểu và vận dụng linh hoạt toàn bộ các resource trong phạm vi của namespace.

Kết luận:

  1. Để sử dụng thành thạo Kubernetes thì bạn cần nắm được các resource có sẵn.
  2. Cần nắm chắc các resource trong phạm vi của namespace để triển khai được ứng dụng lên Kubernetes.
  3. Mọi resource trong Kubernetes đều hướng tới việc phục vụ Pod, nên hãy cố gắng tìm hiểu và thành thạo Pod trước khi tìm hiểu các resource khác.

Bài sau chúng ta sẽ cùng tìm hiểu chi tiết về Pod.

Leave a Comment