如何创建和管理 Kubernetes 命名空间

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本全面指南探讨了Kubernetes命名空间,为开发人员和DevOps专业人员提供了有效组织和管理集群资源的基本策略。通过了解命名空间的基本原理,你将学习如何创建逻辑资源边界、改善集群组织并增强整体容器基础设施管理。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/config("Config") subgraph Lab Skills kubernetes/get -.-> lab-392977{{"如何创建和管理 Kubernetes 命名空间"}} kubernetes/delete -.-> lab-392977{{"如何创建和管理 Kubernetes 命名空间"}} kubernetes/describe -.-> lab-392977{{"如何创建和管理 Kubernetes 命名空间"}} kubernetes/config -.-> lab-392977{{"如何创建和管理 Kubernetes 命名空间"}} end

Kubernetes 命名空间基础

什么是 Kubernetes 命名空间?

Kubernetes 命名空间是一种虚拟集群机制,它为命名和组织集群资源提供了一个作用域。它能够在 Kubernetes 集群内实现逻辑隔离和资源分割,使团队能够有效地管理和划分资源。

graph TD A[Kubernetes 集群] --> B[命名空间 1] A --> C[命名空间 2] A --> D[命名空间 3] B --> E[Pod] B --> F[服务] C --> G[部署] C --> H[配置映射]

核心命名空间特性

特性 描述
资源隔离 在资源之间提供逻辑隔离
名称唯一性 资源名称在一个命名空间内必须唯一
默认命名空间 包括 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

命名空间资源跟踪

stateDiagram-v2 [*] --> Created Created --> Active Active --> Terminating Terminating --> [*]

命名空间删除过程

删除命名空间会移除其中的所有资源:

## 删除命名空间
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

命名空间资源分配

graph TD A[集群资源] --> B[命名空间 1] A --> C[命名空间 2] B --> D[资源配额] C --> E[资源限制范围]

访问控制策略

策略 实现方式 目的
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 命名空间提供了一种强大的机制,用于对集群资源进行逻辑分割和隔离。通过掌握命名空间的创建、管理和生命周期策略,团队可以实现更好的资源组织,提高安全性,并简化跨不同环境和项目的复杂容器部署。