Namespaces và Cgroups là gì trong Kubernetes

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:

Tổng quan về kubernetes (k8s)

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.

Ví dụ namespaces k8s

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

NameSpace

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

Pod trong kuberrnetes là gì?

Kubenetes Deployments là gì

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em