跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kubernetes命名空间资源
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Kubernetes命名空间资源 = == 介绍 == '''Kubernetes命名空间(Namespace)'''是Kubernetes中用于逻辑隔离集群资源的机制。命名空间允许用户将集群划分为多个虚拟集群,每个命名空间内的资源名称必须唯一,但不同命名空间中的资源可以重名。命名空间常用于多租户环境、开发/测试/生产环境隔离或团队资源分配。 命名空间的主要特点包括: * '''资源隔离''':不同命名空间的资源(如Pod、Service)默认相互不可见。 * '''资源配额''':可为命名空间设置CPU、内存等资源的限制(通过ResourceQuota)。 * '''权限控制''':结合RBAC(基于角色的访问控制),实现不同团队或用户的权限隔离。 == 核心概念 == === 默认命名空间 === Kubernetes安装后会预置以下命名空间: * <code>default</code>:未指定命名空间时的默认位置 * <code>kube-system</code>:Kubernetes系统组件(如kube-proxy、CoreDNS) * <code>kube-public</code>:所有用户可读的公共资源 * <code>kube-node-lease</code>:节点心跳检测相关 === 命名空间作用域 === 命名空间作用域的资源(如Pod、Service)属于特定命名空间,而集群作用域的资源(如Node、PersistentVolume)不属于任何命名空间。 == 基本操作 == === 查看命名空间 === <syntaxhighlight lang="bash"> # 列出所有命名空间 kubectl get namespaces # 或缩写形式 kubectl get ns </syntaxhighlight> 输出示例: <pre> NAME STATUS AGE default Active 15d kube-system Active 15d kube-public Active 15d kube-node-lease Active 15d </pre> === 创建命名空间 === <syntaxhighlight lang="yaml"> # namespace-example.yaml apiVersion: v1 kind: Namespace metadata: name: dev-team </syntaxhighlight> 应用配置: <syntaxhighlight lang="bash"> kubectl apply -f namespace-example.yaml </syntaxhighlight> 或使用命令直接创建: <syntaxhighlight lang="bash"> kubectl create namespace dev-team </syntaxhighlight> === 在命名空间中创建资源 === <syntaxhighlight lang="yaml"> # pod-in-namespace.yaml apiVersion: v1 kind: Pod metadata: name: nginx-pod namespace: dev-team # 指定命名空间 spec: containers: - name: nginx image: nginx:1.14.2 </syntaxhighlight> === 切换当前命名空间 === <syntaxhighlight lang="bash"> # 设置默认命名空间 kubectl config set-context --current --namespace=dev-team # 验证当前命名空间 kubectl config view --minify | grep namespace </syntaxhighlight> == 高级功能 == === 资源配额(ResourceQuota) === 限制命名空间的资源使用量: <syntaxhighlight lang="yaml"> # quota-example.yaml apiVersion: v1 kind: ResourceQuota metadata: name: dev-team-quota namespace: dev-team spec: hard: requests.cpu: "2" requests.memory: 4Gi limits.cpu: "4" limits.memory: 8Gi pods: "10" </syntaxhighlight> === 网络策略(NetworkPolicy) === 控制命名空间内Pod的网络流量: <syntaxhighlight lang="yaml"> apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-web namespace: dev-team spec: podSelector: matchLabels: role: web ingress: - from: - namespaceSelector: matchLabels: purpose: monitoring </syntaxhighlight> == 实际应用案例 == === 场景1:多团队开发环境 === <mermaid> graph LR A[Cluster] --> B[Team A ns] A --> C[Team B ns] A --> D[Team C ns] B --> E[Pod A1] B --> F[Pod A2] C --> G[Pod B1] D --> H[Pod C1] </mermaid> 每个团队在独立命名空间中工作: * 避免命名冲突(如都创建名为"api"的Service) * 独立设置资源配额 * 通过RBAC控制访问权限 === 场景2:环境隔离 === <mermaid> graph TD Cluster --> Production Cluster --> Staging Cluster --> Development Production --> P1[Payment Service] Staging --> S1[Payment Service] Development --> D1[Payment Service] </mermaid> 同一应用在不同环境使用相同资源名称但不同命名空间: * production/staging/development命名空间 * 相同的部署配置(仅namespace不同) * 避免测试影响生产环境 == 数学表示 == 命名空间可形式化表示为: <math> Namespace = (Name, \{Resource_1, Resource_2, ..., Resource_n\}, Quota, Policies) </math> 其中: * <math>Name</math> 是命名空间唯一标识符 * <math>\{Resource\}</math> 是该命名空间包含的资源集合 * <math>Quota</math> 是资源配额配置 * <math>Policies</math> 是网络/安全策略 == 最佳实践 == 1. '''避免滥用''':小型集群可能不需要多个命名空间 2. '''命名规范''':使用团队/项目/环境作为命名标准(如team-frontend, prod-eu) 3. '''配额监控''':为关键命名空间设置合理的ResourceQuota 4. '''清理策略''':对临时命名空间设置TTL(通过Kubernetes的CronJob或外部工具) == 常见问题 == === Q1: 如何查看某个命名空间的所有资源? === <syntaxhighlight lang="bash"> kubectl get all -n dev-team </syntaxhighlight> === Q2: 能否跨命名空间访问Service? === 可以,使用完全限定域名(FQDN)格式: <code>service-name.namespace-name.svc.cluster.local</code> === Q3: 删除命名空间会怎样? === 命名空间及其包含的所有资源将被删除(需确认无重要资源) == 总结 == Kubernetes命名空间是集群资源管理的基础单元,通过逻辑隔离实现: * 多租户支持 * 环境隔离 * 资源配额管理 * 安全边界控制 合理使用命名空间能使集群管理更加清晰高效,特别是在多人协作或复杂环境场景中。 [[Category:集成部署]] [[Category:Kubernetes]] [[Category:Kubernetes资源管理]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)