Kubernetes 命名空间
Kubernetes 命名空间(Namespace)是 Kubernetes 中用于组织和隔离资源的核心概念之一。它允许你在同一个 Kubernetes 集群中创建多个虚拟集群,每个命名空间内的资源名称可以重复,但跨命名空间的资源名称必须唯一。命名空间是 Kubernetes 中实现多租户、环境隔离和资源管理的重要工具。
什么是命名空间?
命名空间是 Kubernetes 中用于将集群资源划分为多个逻辑组的一种机制。它可以帮助你在同一个集群中运行多个应用程序或团队,而不会相互干扰。每个命名空间都有自己的资源配额、权限控制和网络策略。
命名空间并不是物理隔离,而是逻辑隔离。所有命名空间共享同一个 Kubernetes 集群的物理资源。
为什么需要命名空间?
- 资源隔离:不同团队或项目可以使用不同的命名空间,避免资源冲突。
- 权限控制:通过命名空间可以实现细粒度的权限管理,确保只有授权的用户或服务可以访问特定资源。
- 环境管理:可以将开发、测试和生产环境分别放在不同的命名空间中,便于管理和维护。
- 资源配额:可以为每个命名空间设置资源配额,限制其使用的 CPU、内存等资源。
默认命名空间
Kubernetes 安装后会默认创建以下几个命名空间:
- default:如果没有指定命名空间,资源将默认创建在
default
命名空间中。 - kube-system:用于存放 Kubernetes 系统组件,如
kube-proxy
、kube-dns
等。 - kube-public:存放公共资源,通常用于集群级别的配置。
- kube-node-lease:用于节点租约(Node Lease)对象,帮助 Kubernetes 管理节点状态。
创建和管理命名空间
创建命名空间
你可以通过 YAML 文件或命令行创建命名空间。
使用 YAML 文件
创建一个名为 my-namespace
的命名空间:
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
保存为 my-namespace.yaml
并运行以下命令:
kubectl apply -f my-namespace.yaml
使用命令行
你也可以直接使用 kubectl
命令创建命名空间:
kubectl create namespace my-namespace
查看命名空间
列出所有命名空间:
kubectl get namespaces
输出示例:
NAME STATUS AGE
default Active 10d
kube-system Active 10d
kube-public Active 10d
kube-node-lease Active 10d
my-namespace Active 1m
删除命名空间
删除命名空间及其所有资源:
kubectl delete namespace my-namespace
删除命名空间会删除该命名空间内的所有资源,请谨慎操作!
在命名空间中创建资源
在创建资源时,可以通过 namespace
字段指定资源所属的命名空间。例如,创建一个 Pod 并指定命名空间:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
spec:
containers:
- name: nginx
image: nginx
运行以下命令创建 Pod:
kubectl apply -f my-pod.yaml
命名空间的实际应用场景
场景 1:多团队协作
假设你有一个 Kubernetes 集群,多个团队(如开发团队、测试团队、运维团队)共享该集群。为了避免资源冲突,可以为每个团队创建一个独立的命名空间:
- dev:开发团队使用的命名空间。
- test:测试团队使用的命名空间。
- prod:运维团队使用的命名空间。
场景 2:多环境管理
你可以为不同的环境(如开发、测试、生产)创建不同的命名空间:
- development:开发环境。
- staging:测试环境。
- production:生产环境。
场景 3:资源配额管理
你可以为每个命名空间设置资源配额,限制其使用的 CPU、内存等资源。例如,为 development
命名空间设置资源配额:
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-quota
namespace: development
spec:
hard:
requests.cpu: "2"
requests.memory: "4Gi"
limits.cpu: "4"
limits.memory: "8Gi"
总结
Kubernetes 命名空间是管理集群资源的重要工具,它通过逻辑隔离帮助你在同一个集群中运行多个应用程序或团队。命名空间不仅提供了资源隔离和权限控制,还支持资源配额管理,是 Kubernetes 多租户架构的核心组成部分。
附加资源
练习
- 创建一个名为
exercise-namespace
的命名空间。 - 在该命名空间中创建一个名为
exercise-pod
的 Pod,使用nginx
镜像。 - 为
exercise-namespace
设置资源配额,限制其 CPU 和内存使用。
通过以上练习,你将更好地理解 Kubernetes 命名空间的使用方法。