<返回目录     Powered by claud/xia兄

第7课:命名空间和资源配额

掌握Kubernetes中的多租户隔离和资源管理机制

🎯 学习目标

7.1 命名空间基础

🎯 什么是命名空间?

命名空间(Namespace)是Kubernetes中用于隔离和组织资源的虚拟集群,它允许在单个物理集群中创建多个虚拟集群。

🏗️ 命名空间架构图

集群
默认命名空间
default
系统命名空间
kube-system
用户命名空间
dev/prod/test

命名空间提供资源隔离,不同命名空间中的资源名称可以重复

7.2 命名空间的应用场景

🏢 多团队隔离

为不同团队创建独立的命名空间,避免资源冲突,便于权限管理。

🌍 多环境隔离

为开发、测试、生产环境创建不同的命名空间,实现环境隔离。

📦 多应用隔离

为不同应用创建独立的命名空间,便于应用生命周期管理。

🔒 安全隔离

通过命名空间实现资源访问控制,提高集群安全性。

7.3 命名空间管理

📋 命名空间操作命令

# 1. 查看命名空间 kubectl get namespaces kubectl get ns # 2. 查看命名空间详情 kubectl describe namespace default # 3. 创建命名空间 kubectl create namespace dev # 4. 从文件创建命名空间 cat > namespace.yaml << EOF apiVersion: v1 kind: Namespace metadata: name: prod labels: environment: production EOF kubectl apply -f namespace.yaml # 5. 删除命名空间 kubectl delete namespace dev # 6. 在指定命名空间中创建资源 kubectl create deployment nginx --image=nginx -n dev # 7. 查看指定命名空间中的资源 kubectl get pods -n dev # 8. 设置默认命名空间 kubectl config set-context --current --namespace=dev

📋 命名空间配置文件

apiVersion: v1 kind: Namespace metadata: name: dev labels: environment: development team: frontend spec: finalizers: - kubernetes

7.4 资源配额管理

🎯 什么是资源配额?

资源配额(ResourceQuota)是Kubernetes中用于限制命名空间资源使用的对象,它可以限制命名空间中创建的资源数量和资源消耗。

📋 资源配额配置

apiVersion: v1 kind: ResourceQuota metadata: name: dev-quota namespace: dev spec: hard: requests.cpu: 2 requests.memory: 4Gi limits.cpu: 4 limits.memory: 8Gi pods: 10 services: 5 deployments.apps: 3 configmaps: 10 secrets: 10

7.5 资源限制和请求

🔄 资源请求与限制的区别

类型 说明 作用
资源请求(requests) 容器保证获得的资源量 用于调度决策
资源限制(limits) 容器最多可以使用的资源量 防止资源滥用

📋 Pod资源配置

apiVersion: v1 kind: Pod metadata: name: resource-demo spec: containers: - name: app image: nginx resources: requests: cpu: 100m # 0.1个CPU memory: 256Mi limits: cpu: 500m # 0.5个CPU memory: 512Mi

7.6 资源配额的作用

💰 成本控制

通过限制资源使用,控制集群运行成本。

⚖️ 资源公平分配

确保不同团队和应用公平使用集群资源。

🛡️ 防止资源滥用

限制单个应用的资源使用,防止影响其他应用。

📊 资源使用可预测性

通过配额管理,提高集群资源使用的可预测性。

7.7 实战操作示例

# 1. 创建开发命名空间 kubectl create namespace dev # 2. 创建资源配额 cat > quota.yaml << EOF apiVersion: v1 kind: ResourceQuota metadata: name: dev-quota namespace: dev spec: hard: requests.cpu: "2" requests.memory: "4Gi" limits.cpu: "4" limits.memory: "8Gi" pods: "10" services: "5" EOF kubectl apply -f quota.yaml # 3. 查看资源配额 kubectl get resourcequota -n dev kubectl describe resourcequota dev-quota -n dev # 4. 创建带资源限制的Pod cat > pod.yaml << EOF apiVersion: v1 kind: Pod metadata: name: app-pod namespace: dev spec: containers: - name: app image: nginx resources: requests: cpu: "100m" memory: "256Mi" limits: cpu: "500m" memory: "512Mi" EOF kubectl apply -f pod.yaml # 5. 测试资源配额限制 cat > big-pod.yaml << EOF apiVersion: v1 kind: Pod metadata: name: big-pod namespace: dev spec: containers: - name: app image: nginx resources: requests: cpu: "3" memory: "10Gi" EOF # 这将失败,因为超过了资源配额 kubectl apply -f big-pod.yaml # 6. 清理 kubectl delete pod app-pod -n dev kubectl delete resourcequota dev-quota -n dev kubectl delete namespace dev

7.8 最佳实践和注意事项

💡 命名空间使用建议

⚡ 资源配置建议

⚠️ 注意事项

7.9 进阶概念

🚀 LimitRange

LimitRange用于为命名空间中的资源设置默认的资源限制和请求,确保所有资源都有合理的资源配置。

apiVersion: v1 kind: LimitRange metadata: name: default-limits namespace: dev spec: limits: - default: cpu: 500m memory: 512Mi defaultRequest: cpu: 100m memory: 256Mi type: Container

🔧 ResourceQuota作用域

ResourceQuota支持不同的作用域,可以限制特定类型的资源: