Kubernetes Namespace là gì? Tại sao nên sử dụng?
Khi quy mô triển khai tăng lên, việc quản lý tài nguyên và đảm bảo sự cô lập giữa các ứng dụng trở nên phức tạp. Để giải quyết vấn đề này, nhiều người lựa chọn sử dụng Kubernetes Namespace. Vậy Kubernetes Namespace là gì? Tại sao nên sử dụng chúng? Cùng Bizfly Cloud tìm hiểu trong bài viết sau.
Kubernetes Namespace là gì?
Namespace là một cách để phân chia các tài nguyên Kubernetes (như Pod, Deployment, Service) thành các nhóm khác nhau trong cùng một cluster. Mỗi tài nguyên chỉ có thể tồn tại trong một namespace cụ thể, điều này có nghĩa là bạn có thể có nhiều tài nguyên cùng tên nhưng ở các namespace khác nhau mà không gây xung đột.
Ví dụ: Nếu bạn đã tạo một Pod tên là nginx1 trong namespace demo1, bạn không thể tạo thêm Pod nginx1 trong cùng namespace đó nhưng có thể tạo nó trong namespace demo2.

Kubernetes Namespace là gì?
Tại sao nên sử dụng Kubernetes Namespace?
Cho phép các nhóm hoặc dự án tồn tại trong nhóm ảo của riêng mà không ảnh hưởng đến công việc của những người khác.
Kiểm soát truy cập dựa trên vai trò (RBAC) được cải thiện nhờ hạn chế người dùng và quy trình vào các không gian tên cụ thể.
Có thể phân chia tài nguyên của cụm cho nhiều nhóm và người dùng bằng cách sử dụng hạn ngạch tài nguyên.
Cung cấp phương pháp đơn giản để tách biệt quá trình phát triển, thử nghiệm và triển khai ứng dụng được chứa trong container, cho phép toàn bộ vòng đời diễn ra trên cùng một cụm.
Các loại Namespace trong Kubernetes
Trong một cụm Kubernetes đã có sẵn 4 namespace là default, kube-public, kube-system và kube-node-lease:
Default: Namespace mặc định được sử dụng khi không chỉ định Namespace cụ thể nào khác. Nếu bạn triển khai tài nguyên mà không xác định Namespace, chúng sẽ được tạo trong Default Namespace.
Kube-system: Chứa các tài nguyên hệ thống quan trọng cho hoạt động của Kubernetes, như các dịch vụ mạng, DNS và các thành phần điều khiển khác. Thông thường, người dùng không nên triển khai ứng dụng vào Namespace này để tránh xung đột với các tài nguyên hệ thống.
Kube-public: Đây là Namespace dành cho các tài nguyên có thể truy cập công khai trong toàn bộ cụm Kubernetes. Mặc dù được tạo ra tự động, nhưng thực tế, nó không thường xuyên được sử dụng.
Kube-node-lease: Được giới thiệu từ phiên bản 1.13, Namespace này chứa các đối tượng "Lease" liên quan đến trạng thái của các node trong cụm. Nó giúp cải thiện hiệu suất và khả năng mở rộng bằng cách giảm tải cho hệ thống khi gửi tín hiệu từ node.
Ngoài ra, người dùng có thể tạo thêm nhiều Kubernetes Namespace để cô lập khối lượng công việc hoặc tài nguyên, giới hạn truy cập của một số người dùng.
Khi nào nên sử dụng Kubernetes Namespace?
Hạ tầng chung, nhiều người sử dụng
Nhiều người dùng hoặc tổ chức chia sẻ một cơ sở hạ tầng chung trong môi trường nhiều người thuê. Trong trường hợp này, Namespace tạo không gian phát triển ảo cho mỗi người thuê. Mỗi người thuê sẽ có các tài nguyên được quản lý trong Namespace của mình, đảm bảo rằng các tài nguyên được cô lập về mặt logic và không bị ai xâm phạm.
Nhiều môi trường ứng dụng
Các nhà phát triển thường sử dụng nhiều môi trường như phát triển, thử nghiệm và sản xuất khi xây dựng và triển khai ứng dụng. Namespace sẽ tách biệt các môi trường này với nhau. Khi đó những thay đổi được thực hiện trong một môi trường không ảnh hưởng đến các môi trường khác.
Nhiều dự án hoặc nhóm
Các tổ chức có nhiều dự án hoặc nhóm sử dụng Namespace để phân lập tài nguyên cho từng dự án hoặc nhóm một cách hợp lý. Điều này đảm bảo rằng tài nguyên được phân bổ đồng đều giữa các dự án theo yêu cầu về tài nguyên. Mỗi dự án hoặc nhóm có thể có không gian tên riêng, cho phép họ quản lý tài nguyên độc lập.
Quản lý an ninh và tài nguyên
Kubernetes Namespace thực thi chính sách bảo mật và giới hạn tài nguyên. Ví dụ, bạn có thể tạo Namespace cho các ứng dụng yêu cầu bảo mật cao hơn hoặc yêu cầu tài nguyên khắt khe hơn. Bạn cũng có thể thực thi giới hạn tài nguyên trên Namespace để ngăn ứng dụng sử dụng quá nhiều tài nguyên.
Kiểm soát phiên bản
Namespace hỗ trợ quản lý nhiều phiên bản của một ứng dụng. Mỗi phiên bản có thể được triển khai trong Namespace riêng, cho phép các nhà phát triển kiểm tra và so sánh các phiên bản khác nhau, đảm bảo rằng những thay đổi được thực hiện trong một phiên bản không ảnh hưởng đến phiên bản kia.
Thao tác với Kubernetes Namespace
Cách tạo Namespace
Để tạo một namespace mới, bạn có thể sử dụng lệnh sau:
kubectl create namespace [tên-namespace]
Ví dụ, để tạo namespace có tên "demo", bạn chạy lệnh: kubectl create namespace demo
Sau khi tạo thành công, bạn có thể kiểm tra danh sách các namespaces hiện có bằng lệnh kubectl get namespaces
Xóa Namespace
Để xóa một namespace cùng với tất cả tài nguyên bên trong nó, sử dụng lệnh:
kubectl delete namespace [tên-namespace]
Chuyển đổi giữa các Context
Khi làm việc với nhiều namespaces, bạn có thể cần chuyển đổi giữa các context. Để xem context hiện tại, sử dụng lệnh:
kubectl config current-context
Để chuyển đổi giữa các context, dùng lệnh:
kubectl config use-context [tên-context]
Cách thao tác với tài nguyên trong Namespace
Khi muốn thao tác với tài nguyên trong một namespace cụ thể, bạn cần chỉ định namespace đó bằng cách thêm tham số -n vào lệnh. Ví dụ, để liệt kê tất cả pods trong namespace "demo", bạn chạy:
kubectl -n demo get pods
Nếu không chỉ định namespace, Kubernetes sẽ mặc định sử dụng namespace "default".
Kubernetes Namespace khác biệt gì so với Cluster và Context?
Tính năng | Namespace | Cluster | Context |
Mục đích | Chia cụm thành các cụm ảo riêng biệt | Chạy, quản lý và mở rộng quy mô ứng dụng container hóa | Quản lý thông tin truy cập vào một cluster nhất định |
Tính năng | Phân vùng tài nguyên, cô lập môi trường | Bao gồm các node worker để chạy ứng dụng | Cho phép chuyển đổi giữa các cụm khác nhau |
Phạm vi | Trong một cluster duy nhất | Bao gồm nhiều node | Liên kết với một cluster, user và namespace cụ thể |
Quan hệ | Nhiều namespace có thể tồn tại trong một cluster | Một cluster có thể có nhiều node và có thể được truy cập thông qua nhiều context | Một context xác định cách truy cập một cluster cụ thể từ một user |
Ví dụ sử dụng | Phân chia tài nguyên giữa các team | Triển khai ứng dụng sản xuất | Kết nối tới cụm dev, staging và prod |
Kết luận
Kubernetes Namespace là một trong những công cụ mạnh mẽ giúp tổ chức và quản lý tài nguyên trong cluster. Việc sử dụng Namespace không chỉ giúp bạn phân chia tài nguyên hiệu quả mà còn tăng cường bảo mật và khả năng cách ly giữa các ứng dụng. Hy vọng rằng qua bài viết này, bạn đã hiểu rõ hơn về Kubernetes Namespace và những lợi ích mà nó mang lại.