7 Kubernetes基本概念之命名空间
在前一篇中,我们探讨了如何使用 Kubeadm
安装 Kubernetes。设置好集群后,接下来我们将进入 Kubernetes 的基本概念之一——命名空间(Namespace)。
什么是命名空间?
在 Kubernetes 中,命名空间
是一种用来将集群内部的资源进行划分和隔离的机制。它允许在同一集群中支持多个独立的环境,例如开发、测试和生产。这种划分不仅降低了资源的冲突风险,还提高了管理的灵活性。
命名空间的特性
- 资源隔离:命名空间为不同团队或项目提供了隔离环境。同名的资源可以在不同的命名空间中共存。
- 访问控制:您可以基于命名空间对访问进行细粒度的控制,运用
RBAC(Role-Based Access Control)
策略进行权限管理。 - 资源配额:可以为不同命名空间配置资源配额,限制每个命名空间所能使用的资源量,避免资源被某一项目独占。
默认命名空间
Kubernetes 集群默认提供了四个命名空间:
default
:默认命名空间,用户未指定命名空间时,所有资源将创建在此处。kube-system
:用于存放 Kubernetes 自身的系统组件,例如kube-dns
。kube-public
:所有用户都可以访问的命名空间,通常用于公开的信息。kube-node-lease
:用于维护每个节点的租约信息,帮助Kubernetes更好地管控节点。
创建和使用命名空间
创建命名空间
要在 Kubernetes 中创建一个命名空间,您可以使用以下命令:
1 | kubectl create namespace my-namespace |
运行完此命令后,您就创建了一个名为 my-namespace
的命名空间。
切换命名空间
如果您想在不同的命名空间中执行命令,可以使用 -n
或 --namespace
标志,例如:
1 | kubectl get pods -n my-namespace |
这样命令将会列出 my-namespace
命名空间中运行的所有 Pod。
默认命名空间设置
如果您希望在特定命名空间中一直工作,可以使用以下命令设置当前上下文的命名空间:
1 | kubectl config set-context --current --namespace=my-namespace |
之后,您执行的所有 kubectl
命令将默认在 my-namespace
命名空间下运行。
示例:在命名空间中创建 Pod
以下是如何在 my-namespace
中创建一个简单的 Nginx Pod 的例子:
1 | apiVersion: v1 |
您可以将上面的 YAML 文件保存为 nginx-pod.yaml
,并使用以下命令创建 Pod:
1 | kubectl apply -f nginx-pod.yaml |
完成后,您可以通过以下命令检查 Pod 是否正常运行:
1 | kubectl get pods -n my-namespace |
通过命名空间进行资源管理
命名空间在资源管理上提供了极大的便利,尤其是在大型团队或项目中。通过命名空间,您可以实现针对资源的清晰划分和访问控制。
- 资源配额:为了防止某个命名空间耗尽所有资源,您可以设置配额,例如:
1 | apiVersion: v1 |
- RBAC 配置:可以定义角色和角色绑定来控制谁可以在特定命名空间中执行操作,确保安全性。
总结
命名空间是 Kubernetes 中一个强大的概念,提供了资源的隔离、管理和组织。通过合理使用命名空间,您可以有效地管理大型 Kubernetes 集群中的多个项目和团队。在下一篇中,我们将讨论 标签(Labels)
和 选择器(Selectors)
的重要性及其在 Kubernetes 中的应用。
7 Kubernetes基本概念之命名空间