Skip to main content

Kubernetes - Namespace

Namespace trong Kubernetes được sử dụng để phân chia cụm Kubernetes thành các phần riêng biệt, giúp quản lý các đối tượng trong cụm trở nên dễ dàng hơn. Mỗi namespace chứa các đối tượng Kubernetes, chẳng hạn như Pod, Service và Deployment, được phân biệt với các đối tượng trong các namespace khác.

kubernetes.png

Kubernetes sử dụng một namespace mặc định, gọi là namespace mặc định. Nếu không chỉ định namespace cho một đối tượng, nó sẽ được tạo trong namespace mặc định.

Bạn có thể tạo namespace mới bằng lệnh kubectl create namespace <tên namespace>. Sau đó, bạn có thể chuyển đổi giữa các namespace bằng lệnh kubectl config set-context --current --namespace=<tên namespace>.

Ví dụ dưới đây là một file YAML đơn giản để tạo một namespace trong Kubernetes:

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace

Trong ví dụ này, một namespace có tên là my-namespace sẽ được tạo.

Ví dụ: sau đây minh họa cách sử dụng namespace trong Kubernetes để phân chia ứng dụng thành các phần riêng biệt.

Giả sử bạn có một ứng dụng web đơn giản gồm hai thành phần: một Pod chạy Apache và một Service để định tuyến lưu lượng đến Pod.

Bạn muốn triển khai ứng dụng này trong hai môi trường: môi trường sản xuất và môi trường kiểm thử. Bạn muốn cả hai môi trường này hoạt động trên cùng một cụm Kubernetes, nhưng bạn muốn chúng được phân biệt với nhau bằng namespace.

Đầu tiên, bạn tạo hai namespace mới bằng lệnh kubectl create namespace productionkubectl create namespace staging.

Sau đó, bạn định nghĩa một file YAML để triển khai ứng dụng trong môi trường sản xuất:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: production
spec:
  selector:
    app: my-app
  ports:
  - name: http
    port: 80
    targetPort: 80
---
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: production
spec:
  containers:
  - name: my-container
    image: httpd
    ports:
    - containerPort: 80
    env:
    - name: ENVIRONMENT
      value: production

Trong file YAML này, một Service và một Pod sẽ được triển khai trong namespace production. Service được định nghĩa để định tuyến lưu lượng đến Pod, trong khi Pod chạy một container Apache và định nghĩa biến môi trường ENVIRONMENT với giá trị production.

Nếu bạn muốn triển khai ứng dụng trong môi trường kiểm thử, bạn có thể sửa file YAML trên để sử dụng namespace staging thay vì production.