Namespaces và Cgroups trong K8S

Namespaces giúp cô lập tài nguyên trong một cụm, đảm bảo proccess luôn được 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

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 là tính năng cho phép tạo ra một virtualize system giúp các proccess tách biệt hoàn toàn với các proccess còn lại.

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ố khái niệm

  • 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 lệnh với 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 bạn 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