Kubernetes 命名空间资源
Kubernetes 是一个强大的容器编排工具,能够管理大规模的容器化应用。在 Kubernetes 中,命名空间(Namespace) 是一种用于将集群资源划分为多个虚拟集群的机制。通过命名空间,您可以在同一个物理集群中创建多个逻辑分区,每个分区可以独立管理资源、权限和策略。
什么是命名空间?
命名空间是 Kubernetes 中用于隔离资源的一种机制。它允许您将集群中的资源(如 Pod、Service、Deployment 等)分组管理,从而避免资源之间的冲突。命名空间特别适用于多团队或多项目的场景,每个团队或项目可以在自己的命名空间中工作,而不会干扰其他团队或项目。
命名空间并不是一种物理隔离机制,而是一种逻辑隔离机制。所有命名空间中的资源仍然共享相同的底层集群资源(如节点和存储)。
默认命名空间
Kubernetes 提供了几个默认的命名空间:
- default:如果没有指定命名空间,资源将默认创建在
default
命名空间中。 - kube-system:用于 Kubernetes 系统组件的命名空间,如
kube-dns
和kube-proxy
。 - kube-public:用于公共资源的命名空间,通常包含集群范围的配置信息。
- kube-node-lease:用于节点租约信息的命名空间,帮助 Kubernetes 管理节点的状态。
创建和管理命名空间
创建命名空间
您可以通过 YAML 文件或命令行创建命名空间。以下是一个通过 YAML 文件创建命名空间的示例:
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
将上述内容保存为 my-namespace.yaml
,然后使用以下命令创建命名空间:
kubectl apply -f my-namespace.yaml
您也可以使用命令行直接创建命名空间:
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
删除命名空间将删除该命名空间中的所有资源,请谨慎操作。
在命名空间中创建资源
在创建资源时,您可以通过 metadata.namespace
字段指定资源所属的命名空间。以下是一个在 my-namespace
中创建 Pod 的示例:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
spec:
containers:
- name: nginx
image: nginx
将上述内容保存为 my-pod.yaml
,然后使用以下命令创建 Pod:
kubectl apply -f my-pod.yaml
命名空间的资源配额和限制
Kubernetes 允许您为命名空间设置资源配额(Resource Quota)和限制范围(Limit Range),以控制命名空间中资源的使用。
资源配额
资源配额用于限制命名空间中资源的总量。以下是一个设置资源配额的示例:
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"
限制范围
限制范围用于设置命名空间中单个容器的资源限制。以下是一个设置限制范围的示例:
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 命名空间是一种强大的资源管理工具,能够帮助您在集群中实现资源隔离和权限控制。通过合理使用命名空间,您可以更好地管理多团队协作、环境隔离和资源配额。
附加资源
练习
- 创建一个名为
dev
的命名空间,并在其中部署一个简单的 Nginx Pod。 - 为
dev
命名空间设置资源配额,限制 CPU 和内存的使用。 - 删除
dev
命名空间,并观察其中的资源是否被一并删除。