Namespaces giúp cô lập tài nguyên trong một cụm, đảm bảo tổ chức và giảm thiểu xung đột. Trong khi đó, Cgroups cho phép kiểm soát chính xác việc phân bổ tài nguyên, đảm bảo mỗi container nhận được phần CPU và bộ nhớ cần thiết. Trong bài viết này, chúng ta sẽ tìm hiểu định nghĩa và chức năng của Namespaces và Cgroups trong K8S.
Xem thêm:
Containerd là gì ? So sánh Docker và Containerd
Cgroups
Cgroups trong kubernetes là tính năng giới hạn tài nguyên của một process. Cgroups sẽ định ra giới hạn CPU và Memory mà một process có thể dùng.
Namespace
Namespace trong Kubernetes là gì ?
Namespace trong k8s là cơ chế giúp tách biệt các nhóm tài nguyên (như Pod, Deployment hay Service…) trong cùng một cluster. Namespace cung cấp một phạm vi cho các đối tượng tài nguyên Kubernetes. Mỗi tài nguyên Kubernetes chỉ có thể nằm trong một namespace.
Ví dụ, nếu ta đã tạo Pod tên là nginx1 trong Namespace demo1 thì ta không thể tạo thêm Pod nginx1 trong Namespace demo1 này nữa vì đã tồn tại rồi. Tuy nhiên ta vẫn có thể tạo Pod nginx1 trong Namespace demo2 mà không sợ trùng với Pod nginx1 ở Namespace demo1 vì chúng ở 2 Namespace khác nhau.
Chức năng của namespaces trong k8s
- Kiểm soát quyền truy cập: Namespace cung cấp một lớp bảo mật bổ sung, cho phép bạn kiểm soát quyền truy cập đến các tài nguyên Kubernetes. Bạn có thể cấp quyền truy cập cho các nhóm người dùng khác nhau vào các namespace khác nhau, giúp ngăn chặn truy cập không được phép.
- Phân bổ tài nguyên: Namespace giúp bạn phân bổ tài nguyên (như CPU, bộ nhớ) cho các ứng dụng của bạn một cách hiệu quả. Bạn có thể đặt giới hạn và yêu cầu tài nguyên cho các namespace khác nhau, đảm bảo mỗi ứng dụng nhận được lượng tài nguyên phù hợp.
- Tách biệt các môi trường: Namespace cho phép bạn triển khai ứng dụng vào các môi trường riêng biệt, chẳng hạn như development, staging và production, giúp quản lý và kiểm tra code một cách độc lập.
- Giúp dễ dàng quản lý và tổ chức: Namespace giúp bạn tổ chức và quản lý các ứng dụng Kubernetes một cách dễ dàng, đặc biệt trong các môi trường có nhiều người dùng và ứng dụng
Namespaces sẽ bao gồm các thành phần nhỏ hơn như:
- PID namespace cho phép ta tạo các process tách biệt.
- Networking namespace cho phép ta chạy chương trình trên bất kì port nào mà không bị xung độ với các process khác chạy trên server.
- Mount namespace cho phép ta mount và unmount filesystem mà không ảnh hưởng gì tới host filesystem.
Một số namespace mặc định của K8s
- Default NameSpace: Khi tạo một cluster Kubernetes, một NameSpace mặc định được tạo ra.
- Kube-system NameSpace: Kubernetes tạo ra một NameSpace khác gọi là kube-system để chứa các Resource hệ thống. Đây là nơi lưu trữ các dịch vụ cần thiết cho hoạt động của Kubernetes, như mạng, DNS, v.v.
- Kube-public NameSpace: NameSpace này được tạo ra để chứa các Resource được chia sẻ cho tất cả người dùng.
Cách tạo namespace
– Liệt kê các namespace trong hệ thống:
controlplane ~ ➜ kubectl get namespaces NAME STATUS AGE kube-system Active 23m kube-public Active 23m kube-node-lease Active 23m default Active 23m finance Active 31s marketing Active 31s dev Active 31s prod Active 31s manufacturing Active 31s research Active 31s
– Liệt kê các pod trong namespace:
controlplane ~ ➜ kubectl get pod --namespace=research NAME READY STATUS RESTARTS AGE dna-2 0/1 CrashLoopBackOff 4 (52s ago) 2m24s dna-1 0/1 CrashLoopBackOff 4 (48s ago) 2m24s
– Tạo một pod có tên redis, image=redis, namespace=finance:
controlplane ~ ✖ kubectl run redis --image=redis -n finance pod/redis created
– Kết nối giữa các namespace:
Bạn có thể truy cập Resource trong các NameSpace khác bằng cách sử dụng tên đầy đủ. Ví dụ, bạn có thể truy cập một Service trong NameSpace dev bằng cách sử dụng: dbservice.dev.svc.cluster.local.
NameSpace là một khái niệm quan trọng trong Kubernetes, cho phép tách biệt các môi trường, quản lý và bảo mật tài nguyên tốt hơn. Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.
Bài viết liên quan:
Container runtime là gì ? 2 loại phổ biến