跳到主要内容

Kubernetes 命名空间

Kubernetes 命名空间(Namespace)是 Kubernetes 中用于组织和隔离资源的核心概念之一。它允许你在同一个 Kubernetes 集群中创建多个虚拟集群,每个命名空间内的资源名称可以重复,但跨命名空间的资源名称必须唯一。命名空间是 Kubernetes 中实现多租户、环境隔离和资源管理的重要工具。

什么是命名空间?

命名空间是 Kubernetes 中用于将集群资源划分为多个逻辑组的一种机制。它可以帮助你在同一个集群中运行多个应用程序或团队,而不会相互干扰。每个命名空间都有自己的资源配额、权限控制和网络策略。

备注

命名空间并不是物理隔离,而是逻辑隔离。所有命名空间共享同一个 Kubernetes 集群的物理资源。

为什么需要命名空间?

  1. 资源隔离:不同团队或项目可以使用不同的命名空间,避免资源冲突。
  2. 权限控制:通过命名空间可以实现细粒度的权限管理,确保只有授权的用户或服务可以访问特定资源。
  3. 环境管理:可以将开发、测试和生产环境分别放在不同的命名空间中,便于管理和维护。
  4. 资源配额:可以为每个命名空间设置资源配额,限制其使用的 CPU、内存等资源。

默认命名空间

Kubernetes 安装后会默认创建以下几个命名空间:

  • default:如果没有指定命名空间,资源将默认创建在 default 命名空间中。
  • kube-system:用于存放 Kubernetes 系统组件,如 kube-proxykube-dns 等。
  • kube-public:存放公共资源,通常用于集群级别的配置。
  • kube-node-lease:用于节点租约(Node Lease)对象,帮助 Kubernetes 管理节点状态。

创建和管理命名空间

创建命名空间

你可以通过 YAML 文件或命令行创建命名空间。

使用 YAML 文件

创建一个名为 my-namespace 的命名空间:

yaml
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace

保存为 my-namespace.yaml 并运行以下命令:

bash
kubectl apply -f my-namespace.yaml

使用命令行

你也可以直接使用 kubectl 命令创建命名空间:

bash
kubectl create namespace my-namespace

查看命名空间

列出所有命名空间:

bash
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

删除命名空间

删除命名空间及其所有资源:

bash
kubectl delete namespace my-namespace
警告

删除命名空间会删除该命名空间内的所有资源,请谨慎操作!

在命名空间中创建资源

在创建资源时,可以通过 namespace 字段指定资源所属的命名空间。例如,创建一个 Pod 并指定命名空间:

yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
spec:
containers:
- name: nginx
image: nginx

运行以下命令创建 Pod:

bash
kubectl apply -f my-pod.yaml

命名空间的实际应用场景

场景 1:多团队协作

假设你有一个 Kubernetes 集群,多个团队(如开发团队、测试团队、运维团队)共享该集群。为了避免资源冲突,可以为每个团队创建一个独立的命名空间:

  • dev:开发团队使用的命名空间。
  • test:测试团队使用的命名空间。
  • prod:运维团队使用的命名空间。

场景 2:多环境管理

你可以为不同的环境(如开发、测试、生产)创建不同的命名空间:

  • development:开发环境。
  • staging:测试环境。
  • production:生产环境。

场景 3:资源配额管理

你可以为每个命名空间设置资源配额,限制其使用的 CPU、内存等资源。例如,为 development 命名空间设置资源配额:

yaml
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 多租户架构的核心组成部分。

附加资源

练习

  1. 创建一个名为 exercise-namespace 的命名空间。
  2. 在该命名空间中创建一个名为 exercise-pod 的 Pod,使用 nginx 镜像。
  3. exercise-namespace 设置资源配额,限制其 CPU 和内存使用。

通过以上练习,你将更好地理解 Kubernetes 命名空间的使用方法。