Kubernetes namespace
什么是 Kubernetes namespace
在 Kubernetes 中,名字空間(Namespace)提供一種機制,將同一集群中的資源劃分為相互隔離的組,
同一 namespace 內的資源名稱要唯一,但跨 namespace 時沒有這個要求,
namespace 作用域僅針對帶有 namespace 的物件,例如 Deployment、Service 等,這種作用域對集群訪問的物件不適用,例如 StorageClass、Node、PersistentVolume 等,
什么時候使用 Kubernetes namespace
namespace 適用于存在很多跨多個團隊或專案的用戶的場景,對于只有幾到幾十個用戶的集群,根本不需要創建或考慮 namespace,
在多個用戶之間劃分集群資源的時候,可以使用 namespace,
什么時候不必使用 Kubernetes namespace
不必使用多個 namespace 來分隔僅僅輕微不同的資源,例如同一軟體的不同版本,應該使用標簽(label)來區分同一 namespace 中的不同資源,
如何使用 namespace
說明: 避免使用前綴 kube- 創建 namespace,因為它是為 Kubernetes 系統 namespace 保留的,
查看 namespace
你可以使用以下命令列出集群中現存的 namespace:
kubectl get namespace
Kubernetes 會創建四個初始 namespace:
- default:沒有指明使用其它 namespace 的物件所使用的默認 namespace
- kube-system:Kubernetes 系統創建物件所使用的 namespace
- kube-public:這個 namespace 是自動創建的,所有用戶(包括未經過身份驗證的用戶)都可以讀取它,這個 namespace 主要用于集群使用,以防某些資源在整個集群中應該是可見和可讀的,這個 namespace 的公共方面只是一種約定,而不是要求,
- kube-node-lease:此 namespace 用于與各個節點相關的租約(Lease)物件,節點租期允許 kubelet 發送心跳,由此控制面能夠檢測到節點故障,
為請求設定 namespace
要為當前請求設定 namespace,請使用 --namespace 引數,
kubectl run nginx --image=nginx --namespace=<namespace 名稱>
kubectl get pods --namespace=<namespace 名稱>
設定 namespace 偏好
你可以永久保存 namespace,以用于對應背景關系中所有后續 kubectl 命令,
kubectl config set-context --current --namespace=<namespace 名稱>
namespace 和 DNS
當你創建一個 service 時, Kubernetes 會創建一個相應的 DNS 條目,
該條目的形式是 <service 名稱>.<namespace 名稱>.svc.cluster.local,這意味著如果容器只使用 <service 名稱>,它將被決議到本地 namespace 的 service,這對于跨多個 namespace(如開發、測驗和生產)使用相同的配置非常有用,如果你希望跨 namespace 訪問,則需要使用完全限定域名(FQDN),
并非所有物件都在 namespace 中
大多數 kubernetes 資源(例如 Pod、Service、副本控制器等)都位于某些 namespace 中,但是 namespace 資源本身并不在 namespace 中,而且底層資源,例如節點和持久化卷不屬于任何 namespace,
# 位于 namespace 中的資源
kubectl api-resources --namespaced=true
# 不在 namespace 中的資源
kubectl api-resources --namespaced=false
參考資料
- kubernetes.io官方檔案:名字空間
思維導圖

視頻學習
B站學習
從零開始學習k8s:k8s namespace

抖音學習

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/502144.html
標籤:其他
上一篇:Kubernetes-組件
下一篇:Kubernetes-理解物件
