跳到主要内容

Kubernetes 命名空间资源

Kubernetes 是一个强大的容器编排工具,能够管理大规模的容器化应用。在 Kubernetes 中,命名空间(Namespace) 是一种用于将集群资源划分为多个虚拟集群的机制。通过命名空间,您可以在同一个物理集群中创建多个逻辑分区,每个分区可以独立管理资源、权限和策略。

什么是命名空间?

命名空间是 Kubernetes 中用于隔离资源的一种机制。它允许您将集群中的资源(如 Pod、Service、Deployment 等)分组管理,从而避免资源之间的冲突。命名空间特别适用于多团队或多项目的场景,每个团队或项目可以在自己的命名空间中工作,而不会干扰其他团队或项目。

备注

命名空间并不是一种物理隔离机制,而是一种逻辑隔离机制。所有命名空间中的资源仍然共享相同的底层集群资源(如节点和存储)。

默认命名空间

Kubernetes 提供了几个默认的命名空间:

  • default:如果没有指定命名空间,资源将默认创建在 default 命名空间中。
  • kube-system:用于 Kubernetes 系统组件的命名空间,如 kube-dnskube-proxy
  • kube-public:用于公共资源的命名空间,通常包含集群范围的配置信息。
  • kube-node-lease:用于节点租约信息的命名空间,帮助 Kubernetes 管理节点的状态。

创建和管理命名空间

创建命名空间

您可以通过 YAML 文件或命令行创建命名空间。以下是一个通过 YAML 文件创建命名空间的示例:

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

将上述内容保存为 my-namespace.yaml,然后使用以下命令创建命名空间:

bash
kubectl apply -f my-namespace.yaml

您也可以使用命令行直接创建命名空间:

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
警告

删除命名空间将删除该命名空间中的所有资源,请谨慎操作。

在命名空间中创建资源

在创建资源时,您可以通过 metadata.namespace 字段指定资源所属的命名空间。以下是一个在 my-namespace 中创建 Pod 的示例:

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

将上述内容保存为 my-pod.yaml,然后使用以下命令创建 Pod:

bash
kubectl apply -f my-pod.yaml

命名空间的资源配额和限制

Kubernetes 允许您为命名空间设置资源配额(Resource Quota)和限制范围(Limit Range),以控制命名空间中资源的使用。

资源配额

资源配额用于限制命名空间中资源的总量。以下是一个设置资源配额的示例:

yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-resource-quota
namespace: my-namespace
spec:
hard:
requests.cpu: "1"
requests.memory: "1Gi"
limits.cpu: "2"
limits.memory: "2Gi"

限制范围

限制范围用于设置命名空间中单个容器的资源限制。以下是一个设置限制范围的示例:

yaml
apiVersion: v1
kind: LimitRange
metadata:
name: my-limit-range
namespace: my-namespace
spec:
limits:
- default:
cpu: "0.5"
memory: "512Mi"
defaultRequest:
cpu: "0.1"
memory: "256Mi"
type: Container

实际应用场景

多团队协作

在一个大型组织中,多个团队可能共享同一个 Kubernetes 集群。通过为每个团队创建独立的命名空间,可以避免资源冲突,并为每个团队提供独立的资源管理和权限控制。

环境隔离

在开发、测试和生产环境中,您可以为每个环境创建独立的命名空间。这样可以确保不同环境之间的资源隔离,避免测试环境中的资源影响生产环境。

资源配额管理

通过为命名空间设置资源配额,您可以确保每个团队或项目的资源使用不会超出预算,从而避免资源争用和集群过载。

总结

Kubernetes 命名空间是一种强大的资源管理工具,能够帮助您在集群中实现资源隔离和权限控制。通过合理使用命名空间,您可以更好地管理多团队协作、环境隔离和资源配额。

附加资源

练习

  1. 创建一个名为 dev 的命名空间,并在其中部署一个简单的 Nginx Pod。
  2. dev 命名空间设置资源配额,限制 CPU 和内存的使用。
  3. 删除 dev 命名空间,并观察其中的资源是否被一并删除。