Hiểu được namespace là gì tại sao cần sử dụng

NameSpace dịch sát nghĩa đen là không gian chứa tên. Có thể minh họa NameSpace là những chiếc máy tính trong một công ty, dữ liệu chứa trong một máy tính thì chúng ta truy xuất dễ dàng, nếu khác máy tính thì phải nối mạng nội bộ, link vào thì mới đọc được. Tương tự như vậy, trong một dự án nhỏ chỉ nên dùng một NameSpace cho dễ truy xuất, nếu dự án lớn thì cần phân nhiều NameSpace để quản lý. Khi chúng ta tham chiếu các thư viện động DLL tức là chúng ta tham chiếu qua các miền không gian chứa tên khác.

Cấu trúc:

namespace Plugin_2017 { // Phần thân chứa các Class và thủ tục. }

2. Class:

Class là các lớp chứa thủ tục, tham số, phương thức,.. nói chung chứa mọi thứ. Nếu NamSpace la chiếc máy tình thì Class là chiếc ổ cứng. Một Máy tính có nhiều ổ cứng, mỗi ổ cứng có nhiều dữ liệu.

Kubernetes hỗ trợ nhiều cluster ảo trên cùng một cluster vật lý. Các cluster ảo này được gọi là namespaces.

Khi nào nên sử dụng nhiều Namespaces?

Namespaces được sử dụng trong môi trường có nhiều người dùng trải rộng trên nhiều nhóm hoặc dự án khác nhau. Đối với các cluster chỉ có từ vài đến hàng chục người dùng, ta không cần phải tạo hoặc suy nghĩ về không gian tên. Ta chỉ nên sử dụng Namespaces khi cần các tính năng mà chúng cung cấp.

Namespaces cung cấp một phạm vi giới hạn cho tên của các Tài nguyên. Tên của các tài nguyên cần phải là duy nhất trong một namespace chứ không phải trên các namespace khác nhau (nghĩa là 2 tài nguyên trên 2 namespace khác nhau có thể có cùng tên). Namespace không thể được lồng vào nhau và mỗi tài nguyên Kubernetes chỉ có thể nằm trong một namespace.

Namespace là một cách để phân chia tài nguyên cluster giữa nhiều người dùng (thông qua hạn ngạch tài nguyên - resource quota).

Trong các phiên bản tương lai của Kubernetes, các object trong cùng một namespace sẽ có cùng chính sách kiểm soát truy cập theo mặc định.

Ta không cần thiết phải sử dụng nhiều namespace chỉ để phân tách các tài nguyên hơi khác nhau, chẳng hạn như các phiên bản khác nhau của cùng một phần mềm, thay vào đó, ta nên sử dụng label để phân biệt tài nguyên trong cùng một namespace.

Làm việc với Namespaces

Việc tạo và xóa các Namespace được mô tả trong tài liệu Hướng dẫn quản trị namespace.

Xem danh sách Namespace

Ta có thể liệt kê các Namespace hiện có trong một cluster bằng cách sử dụng lệnh:

kubectl get namespace

Kết quả:

NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d

Mặc định, khi mới cài đặt, Kubernetes luôn có 3 namespace sau:

  • default: Namespace mặc định cho các object không thuộc về namespace nào
  • kube-system: Namespace cho các object được tạo ra bởi hệ thống Kubernetes
  • kube-public: Namespace này được tự động tạo ra và có thể đọc được bởi tất cả người dùng (bao gồm cả những người chưa được xác thực). Namespace này chủ yếu được dành riêng cho việc sử dụng cluster như trong trường hợp một số tài nguyên cần được hiển thị và có thể đọc công khai trên toàn bộ cluster. Khía cạnh công khai (public) của Namespace này chỉ là một quy ước chứ không phải là một yêu cầu.

Chỉ định namespace cho 1 yêu cầu

Để chỉ định namespace cho 1 yêu cầu, ta sử dụng cờ --namespace

Ví dụ:

kubectl run nginx --image=nginx --namespace=
kubectl get pods --namespace=

Thiết lập tùy chọn cho Namespace

Ta có thể thiết lập Namespace cố định cho tất cả các lệnh kubectl tiếp theo trong ngữ cảnh đó bằng cách:

kubectl config set-context --current --namespace=
# Kiểm tra lại
kubectl config view --minify | grep namespace:

Namespace và DNS

Khi ta tạo ra một Service, nó sẽ tạo một mục DNS tương ứng. Mục DNS này có dạng

NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d

0 (định dạng này được gọi là FQDN), có nghĩa là nếu một container chỉ sử dụng

NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d

1 để tham chiếu đến service (mà không cung cấp

NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d

2 cụ thể) thì nó sẽ được phân giải đến service thuộc về một Namespace nào đó (thường là namespace default hoặc namespace đã được thiết lập bằng lệnh

NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d

4 như ví dụ ở trên).

Điều này hữu ích cho việc sử dụng cùng một cấu hình trên nhiều Namespace như Development, Staging và Production. Nếu ta muốn tiếp cận đến các Namespace khác nhau, ta cần phải sử dụng tên miền đủ điều kiện (FQDN - Fully Qualified Domain Name).

Không phải mọi Object đều thuộc về 1 namespace

Hầu hết các tài nguyên của Kubernetes (ví dụ: pods, services, replication controllers …) đều nằm trong một namespace nào đó. Tuy nhiên, bản thân tài nguyên Namespace không nằm trong 1 namespace nào. Ngoài ra, các tài nguyên cấp thấp chẳng hạn như các

NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d

5 và

NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d

6 cũng không nằm trong bất kỳ namespace nào.

Để kiểm tra tài nguyên Kubernetes nào đang nằm trong hoặc không nằm trong namespace, ta dùng lệnh sau:

Tại sao phải sử dụng namespace?

Một namespace trong C# được thiết kế để phân nhóm toàn bộ các kiểu dữ liệu theo một cấu trúc phân cấp. Nhờ có namespace kiểu dữ liệu được quản lí tốt hơn và tránh được hiện tượng xung đột tên. Các tên được khai báo trong một namespace không xung đột với cùng tên đó nhưng được khai báo ở một namespace khác.

Tại sao không nên sử dụng using namespace std trong C++?

Khi sử dụng using namespace std , compiler sẽ nhìn thấy tất cả các hàm khai báo trong namespace std , kể cả những thứ mà chúng ta không nghĩ tới sẽ dùng đến. Nói một cách khác, điều này dẫn đến việc xung đột tên (name conflicts).

Cin trong C++ để làm gì?

Lệnh cin (Nhập dữ liệu từ bàn phím) trong C++ Lệnh cin trong C++ được sử dụng để nhập dữ liệu từ bàn phím. Đây là một công cụ quan trọng để tương tác với người dùng và lấy dữ liệu mà họ nhập để sử dụng trong chương trình của bạn.

STD trong C++ là gì?

Đối tượng std::cin là một đối tượng được định nghĩa trong iostream library thuộc namespace std, dùng để đọc một thông tin nào đó từ thiết bị nhập chuẩn (mặc định là bàn phím), sau đó lưu thông tin đó vào một biến.