简介
本全面指南将探讨 Kubernetes 命名空间,为开发者和系统管理员提供有关创建、配置和管理命名空间资源的深入见解。通过了解命名空间的基本原理,你将学习如何有效地对集群资源进行分区和组织、实施访问控制以及在不同环境中优化工作负载管理。
本全面指南将探讨 Kubernetes 命名空间,为开发者和系统管理员提供有关创建、配置和管理命名空间资源的深入见解。通过了解命名空间的基本原理,你将学习如何有效地对集群资源进行分区和组织、实施访问控制以及在不同环境中优化工作负载管理。
Kubernetes 命名空间是一个虚拟集群,它为单个物理集群内的资源隔离和组织提供了一种机制。它使你能够更有效地对集群资源进行分区和管理,在不同团队、项目或环境之间创建逻辑边界。
命名空间为集群管理提供了几个重要特性:
| 特性 | 描述 |
|---|---|
| 资源隔离 | 在不同命名空间之间隔离资源 |
| 访问控制 | 实施细粒度的访问策略 |
| 资源配额 | 为特定命名空间定义资源限制 |
使用 kubectl 创建一个新的命名空间:
## 创建一个命名空间
kubectl create namespace my-project
## 验证命名空间创建
kubectl get namespaces
## 在特定命名空间内创建一个资源
kubectl create deployment nginx-deployment \
--image=nginx \
-n my-project
Kubernetes 提供了几个默认命名空间:
default:用于没有明确命名空间的资源的标准命名空间kube-system:系统级资源和核心 Kubernetes 组件kube-public:可公开访问的资源kube-node-lease:节点心跳信息命名空间内的资源必须具有唯一名称,但可以在不同命名空间中重复。这实现了高效的集群管理和工作负载的逻辑分离。
Kubernetes 提供了多种创建命名空间的方法,每种方法都满足不同的操作需求:
## 使用 kubectl 创建命名空间
kubectl create namespace development
## 使用 YAML 配置创建命名空间
kubectl create -f namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: production
| 操作 | 命令 | 描述 |
|---|---|---|
| 列出命名空间 | kubectl get namespaces |
显示所有现有命名空间 |
| 描述命名空间 | kubectl describe namespace development |
显示命名空间的详细信息 |
| 删除命名空间 | kubectl delete namespace staging |
删除特定的命名空间 |
## 在特定命名空间中部署资源
kubectl apply -f deployment.yaml -n development
## 设置上下文的默认命名空间
kubectl config set-context --current --namespace=production
## 查看当前上下文和命名空间
kubectl config current-context
kubectl config view | grep namespace
## 切换活动命名空间
kubens development
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-limits
namespace: development
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: 8Gi
建立清晰且一致的命名空间命名策略:
| 命名模式 | 示例 | 使用场景 |
|---|---|---|
| 基于环境 | dev-backend |
隔离不同环境 |
| 基于团队 | team-data-science |
团队资源隔离 |
| 基于项目 | microservice-payment |
特定项目的资源 |
apiVersion: v1
kind: ResourceQuota
metadata:
name: team-quota
namespace: development
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: 8Gi
limits.cpu: "6"
limits.memory: 12Gi
## 应用网络策略
kubectl apply -f network-policy.yaml
## 示例网络策略
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-external-access
namespace: production
spec:
podSelector: {}
policyTypes:
- Egress
- Ingress
## 安装 kubectx 以简化命名空间管理
sudo git clone /opt/kubectx
sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens
## 快速切换命名空间
kubens development
kubens production
## 列出特定命名空间中的资源
kubectl get all -n development
## 描述命名空间详细信息
kubectl describe namespace production
| 实践 | 描述 | 实施方式 |
|---|---|---|
| 基于角色的访问控制 | 限制对命名空间的访问 | 使用角色绑定 |
| 资源限制 | 防止资源耗尽 | 配置资源配额 |
| 网络策略 | 控制命名空间之间的流量 | 定义网络策略 |
Kubernetes 命名空间为集群内的资源隔离、访问控制和逻辑分离提供了强大的机制。通过掌握命名空间操作,你可以创建更具结构化、安全性和高效性的 Kubernetes 部署。了解默认命名空间、资源命名规范和最佳实践,能使你设计出强大的容器编排策略,以支持可扩展且组织良好的基础设施。