Namespace 與 CGroups 都是容器技術中的兩個重要概念,Namespace 負責系統資源的隔離,確保不同容器之間的獨立性,而 CGroups 則是負責系統資源的管理和控制,確保容器或行程資源使用的合理性。為了讓我們能夠更加了解,我們今天就來利用 Kubernetes 來簡單使用這兩種技術吧。
首先,我們先創建兩個不同名字的Namespaces,分別是 test-namespace 與 dev-namespace。
# 創建namespace
kubectl create namespace test-namespace
kubectl create namespace dev-namespace
# 查看所有namespaces
kubectl get namespaces
可以得到結果如下:
接下來在 test-namespace 下,創建一個新的 pod 運行:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: test-namespace
spec:
containers:
- name: test-container
image: nginx
再通過指令,查詢在 test-namespace 內所有的 pods :
# 查看指定namespace下的所有pods
kubectl get pods -n test-namespace
結果如下:
從圖中我們能夠看到,我們成功在 test-namespace 內查詢到名為 test-pod 的 pod,與其狀態等資訊,而在 dev-namespace 內則顯示 No resources found in dev-namespace namespace.
由以上的操作說明我們能夠得知,到目前已經可以成功利用隔離 test-pod,這個 pod 只能在 test-namespace 內進行操作。接下來,我們繼續進行 CGroups 的操作。
我們要在 Kubernetes 中設置 CGroups 的資源限制,就需要在 Pod 的配置中添加相關的資源限制,如下:
apiVersion: v1
kind: Pod
metadata:
name: dev-pod
namespace: dev-namespace
spec:
containers:
- name: dev-container
image: nginx
resources:
limits:
cpu: "0.5"
memory: "512Mi"
requests:
cpu: "0.25"
memory: "256Mi"
我們在 dev-namespace 內創建了一個名為 dev-pod 的 pod,接著我們使用 resources 來設置 CPU 和記憶體的限制,limits 表示限制的上限,requests 則表示對資源的最低要求。從此 yaml 檔中,我們限制 CPU 的使用上限為 0.5 個核心且記憶體的使用上限為 512 MiB,並同時要求 CPU 最低為 0.25 個核心且記憶體為 256 MiB。
我們可以利用 kubectl describe pod dev-pod -n dev-namespace
來顯示 dev-pod 的詳細信息,包括了資源限制。
當然,在 test-namespace 內是查不到 dev-pod 的信息。
今天,我們進行了 Kubernetes 中 Namespace 與 CGroups 的一些實際操作。而透過以上的舉例,我們成功創建了兩個不同的 Namespaces(test-namespace 與 dev-namespace),並在這兩個 Namespaces 中分別運行了不同的 pods,實現了資源的隔離。同時,我們也設置了 CGroups 的資源限制,通過在 Pod 配置中添加相關的資源限制,確保容器的 CPU 和記憶體使用的合理性。
希望這些簡單的舉例,能夠讓大家更能夠理解 Namespace 與 CGroups 這兩個虛擬化技術。
我們明天見~