简介
本全面指南探讨了Kubernetes命名空间,为开发人员和DevOps专业人员提供了有效组织和管理集群资源的基本策略。通过了解命名空间的基本原理,你将学习如何创建逻辑资源边界、改善集群组织并增强整体容器基础设施管理。
本全面指南探讨了Kubernetes命名空间,为开发人员和DevOps专业人员提供了有效组织和管理集群资源的基本策略。通过了解命名空间的基本原理,你将学习如何创建逻辑资源边界、改善集群组织并增强整体容器基础设施管理。
Kubernetes 命名空间是一种虚拟集群机制,它为命名和组织集群资源提供了一个作用域。它能够在 Kubernetes 集群内实现逻辑隔离和资源分割,使团队能够有效地管理和划分资源。
| 特性 | 描述 |
|---|---|
| 资源隔离 | 在资源之间提供逻辑隔离 |
| 名称唯一性 | 资源名称在一个命名空间内必须唯一 |
| 默认命名空间 | 包括 default、kube-system、kube-public |
要创建一个 Kubernetes 命名空间,请使用以下 kubectl 命令:
## 创建一个命名空间
kubectl create namespace development
## 验证命名空间创建
kubectl get namespaces
创建资源时,可以指定命名空间:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
namespace: development
spec:
containers:
- name: nginx
image: nginx:latest
## 设置默认命名空间
kubectl config set-context --current --namespace=development
## 查看当前命名空间
kubectl config view | grep namespace
创建命名空间可以通过多种方法实现:
## 声明式方法
kubectl create namespace production
## YAML 文件方法
kubectl apply -f namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: staging
删除命名空间会移除其中的所有资源:
## 删除命名空间
kubectl delete namespace staging
## 若卡住则强制删除
kubectl delete namespace staging --grace-period=0 --force
| 场景 | 操作 | 命令 |
|---|---|---|
| 正常删除 | 优雅终止 | kubectl delete ns <name> |
| 卡住的命名空间 | 强制删除 | kubectl delete ns <name> --force |
| 终结器问题 | 手动干预 | kubectl patch ns <name> -p '{"metadata":{"finalizers":null}}' |
当命名空间在删除过程中卡住时:
## 检查命名空间状态
kubectl get namespace staging -o yaml
## 手动移除终结器
kubectl patch namespace staging -p '{"metadata":{"finalizers":null}}'
实施命名空间生命周期管理以防止资源积累:
## 列出所有命名空间
## 删除未使用的命名空间
使用命名空间隔离实现强大的多租户功能:
apiVersion: v1
kind: ResourceQuota
metadata:
name: team-quota
namespace: development
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: 8Gi
limits.cpu: "8"
limits.memory: 16Gi
| 策略 | 实现方式 | 目的 |
|---|---|---|
| RBAC(基于角色的访问控制) | Role-Based Access Control | 限制对命名空间的访问 |
| 网络策略 | 流量控制 | 管理命名空间之间的通信 |
| 资源配额 | 计算限制 | 控制资源消耗 |
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-external-access
namespace: production
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
创建全面的命名空间隔离:
## 创建具有严格隔离的命名空间
kubectl create namespace secure-namespace
## 应用网络策略
kubectl apply -f network-policy.yaml
## 设置资源配额
kubectl apply -f resource-quota.yaml
## 为命名空间添加自定义标签
kubectl label namespace development team=backend
kubectl label namespace production team=frontend
## 使用标签选择命名空间
kubectl get namespaces -l team=backend
apiVersion: v1
kind: LimitRange
metadata:
name: default-limits
namespace: development
spec:
limits:
- default:
cpu: 500m
memory: 512Mi
defaultRequest:
cpu: 250m
memory: 256Mi
type: Container
Kubernetes 命名空间提供了一种强大的机制,用于对集群资源进行逻辑分割和隔离。通过掌握命名空间的创建、管理和生命周期策略,团队可以实现更好的资源组织,提高安全性,并简化跨不同环境和项目的复杂容器部署。