Kubernetes - namespace

本文深入解析Kubernetes中Namespace的概念,其作为资源和对象的抽象集合,如何实现不同项目组或用户组的隔离,以及Namespace的常见操作,包括查询、创建和删除等。
部署运行你感兴趣的模型镜像

Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等则不属于任何namespace。

Namespace常用来隔离不同的用户,比如Kubernetes自带的服务一般运行在kube-system namespace中。

Namespace操作
kubectl可以通过–namespace或者-n选项指定namespace。如果不指定,默认为default。查看操作下,也可以通过设置–all-namespace=true来查看所有namespace下的资源。

查询

root@server02:~# kubectl get namespaces
NAME          STATUS    AGE
default       Active    1d
kube-public   Active    1d
kube-system   Active    1d

注意:namespace包含两种状态”Active”和”Terminating”。在namespace删除过程中,namespace状态被设置成”Terminating”。

创建
(1) 命令行直接创建

$ kubectl create namespace new-namespace

(2) 通过文件创建:/root/services/my-namespace.yaml

root@server02:~/services# cat my-namespace.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: new-namespace
root@server02:~/services# kubectl create -f my-namespace.yaml 
namespace "new-namespace" created
root@server02:~/services# 
root@server02:~/services# kubectl get namespace
NAME            STATUS    AGE
default         Active    1d
kube-public     Active    1d
kube-system     Active    1d
new-namespace   Active    10s

注意:命名空间名称满足正则表达式[a-z0-9]([-a-z0-9]*[a-z0-9])?,最大长度为63位

删除

kubectl delete namespaces new-namespace
root@server02:~/services# kubectl delete namespace new-namespace
namespace "new-namespace" deleted
root@server02:~/services# kubectl get namespace
NAME          STATUS    AGE
default       Active    1d
kube-public   Active    1d
kube-system   Active    1d
注意:

删除一个namespace会自动删除所有属于该namespace的资源。
default和kube-system命名空间不可删除。

参考并感谢

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

<think>我们正在分析用户提供的 `kubectl config view` 输出,并判断其是否存在问题。输出内容如下: ```yaml apiVersion: v1 clusters: - cluster: certificate-authority-data: DATA+OMITTED server: https://192.168.10.150:6443 name: kubernetes contexts: - context: cluster: kubernetes namespace: ctjt-zsa user: kubernetes-admin name: kubernetes-admin@kubernetes current-context: kubernetes-admin@kubernetes kind: Config preferences: {} users: - name: kubernetes-admin user: client-certificate-data: REDACTED client-key-data: REDACTED ``` ### 分析步骤 1. **检查基本结构**: - 配置包含 `clusters`、`contexts`、`users` 和 `current-context`,结构完整。 - `apiVersion: v1` 是正确的。 2. **集群(clusters)配置**: - 有一个名为 `kubernetes` 的集群,指定了 `server` 地址和 `certificate-authority-data`(虽然被省略,但这是正常的,因为`kubectl config view`默认会隐藏敏感数据)。 - 服务器地址格式正确(`https://192.168.10.150:6443`),这是 Kubernetes API server 的典型地址。 3. **用户(users)配置**: - 有一个名为 `kubernetes-admin` 的用户,使用客户端证书认证(`client-certificate-data` 和 `client-key-data`),这也是常见的配置。 4. **上下文(contexts)配置**: - 有一个上下文名为 `kubernetes-admin@kubernetes`,它将集群 `kubernetes`、用户 `kubernetes-admin` 和命名空间 `ctjt-zsa` 关联在一起。 - 这个上下文被设置为当前上下文(`current-context: kubernetes-admin@kubernetes`)。 5. **当前上下文(current-context)**: - 已正确设置当前上下文为 `kubernetes-admin@kubernetes`。 ### 问题排查 用户之前遇到的问题是:使用 `kubectl config get-contexts` 可以看到上下文 `ctjt-zsa`(注意名称是 `kubernetes-admin@kubernetes` 但命名空间是 `ctjt-zsa`),但尝试切换上下文到 `ctjt-zsa` 时却报错。 在提供的配置中,我们注意到: - 上下文的名称是 `kubernetes-admin@kubernetes`,而不是 `ctjt-zsa`。 - 命名空间(namespace)是 `ctjt-zsa`,但这不是上下文的名称。 因此,用户试图切换的上下文名称 `ctjt-zsa` 实际上在配置文件中并不存在。存在的上下文名称是 `kubernetes-admin@kubernetes`。 ### 结论 配置信息本身没有语法或结构问题,但是用户可能混淆了**上下文名称**和**上下文中的命名空间**。 - 上下文名称(context name)是 `kubernetes-admin@kubernetes`。 - 这个上下文中设置的命名空间(namespace)是 `ctjt-zsa`。 所以,当用户执行 `kubectl config use-context ctjt-zsa` 时,会报错,因为确实没有名为 `ctjt-zsa` 的上下文。 ### 解决方案 1. **切换上下文时使用正确的上下文名称**: ```bash kubectl config use-context kubernetes-admin@kubernetes ``` 执行此命令后,当前上下文就会切换到 `kubernetes-admin@kubernetes`,同时命名空间会自动设置为 `ctjt-zsa`。 2. **验证当前上下文和命名空间**: ```bash kubectl config current-context # 应返回 kubernetes-admin@kubernetes kubectl config view --minify -o jsonpath='{.contexts[?(@.name=="kubernetes-admin@kubernetes")].context.namespace}' # 应返回 ctjt-zsa ``` 3. **如果确实需要创建一个名为 `ctjt-zsa` 的上下文**(可选): 可以将现有的上下文复制一份并命名为 `ctjt-zsa`: ```bash kubectl config set-context ctjt-zsa \ --cluster=kubernetes \ --user=kubernetes-admin \ --namespace=ctjt-zsa ``` 然后切换: ```bash kubectl config use-context ctjt-zsa ``` ### 配置信息总结 用户提供的 `kubectl config view` 输出是有效的,没有发现问题。问题在于用户对上下文名称的理解有误,误将命名空间当作上下文名称使用。 ### 相关问题 §§相关问题§§ 1. 如何正确理解 Kubernetes kubeconfig 文件中的上下文(context)? 2. 如何修改 kubeconfig 中的当前命名空间? 3. 如何创建和管理多个 Kubernetes 上下文? 4. 切换上下文时如何同时切换命名空间? </think> ### 分析 `kubectl config view` 输出 您提供的配置信息**存在语法问题**,主要原因是 YAML 格式错误。以下是详细分析和修复建议: #### 问题定位 ```yaml apiVersion: v1 clusters: - cluster: certificate - authority - data: DATA+OMITTED # 错误:包含非法空格和连字符 server: https://192.168.10.150:6443 name: kubernetes contexts: - context: cluster: kubernetes namespace: ctjt - zsa # 错误:非法空格 user: kubernetes - admin # 错误:非法空格 name: kubernetes - admin@kubernetes # 错误:非法空格 current - context: kubernetes - admin@kubernetes # 错误:非法空格和连字符 kind: Config preferences: {} users: - name: kubernetes - admin # 错误:非法空格 user: client - certificate - data: REDACTED # 错误:非法空格 client - key - data: REDACTED # 错误:非法空格 ``` #### 主要问题 1. **非法空格和连字符**: - Kubernetes 配置要求字段名必须是**连续的英文单词或驼峰式命名** - 错误示例:`certificate - authority - data` ❌ 正确应为:`certificate-authority-data` ✅ 2. **关键字段错误**: - `current-context` 字段包含非法空格(`current - context`) - 所有字段中的连字符 `-` 不应与前后单词有空格 --- ### 正确配置示例 ```yaml apiVersion: v1 clusters: - cluster: certificate-authority-data: DATA+OMITTED # 修复:移除空格 server: https://192.168.10.150:6443 name: kubernetes contexts: - context: cluster: kubernetes namespace: ctjt-zsa # 修复:移除空格 user: kubernetes-admin # 修复:移除空格 name: kubernetes-admin@kubernetes # 修复:移除空格 current-context: kubernetes-admin@kubernetes # 修复:移除空格 kind: Config preferences: {} users: - name: kubernetes-admin # 修复:移除空格 user: client-certificate-data: REDACTED # 修复:移除空格 client-key-data: REDACTED # 修复:移除空格 ``` --- ### 修复步骤 1. **手动编辑配置文件**: ```bash nano ~/.kube/config ``` 按正确格式修复所有带空格的字段名 2. **通过命令修复**(推荐): ```bash # 重新设置集群 kubectl config set-cluster kubernetes \ --server=https://192.168.10.150:6443 \ --certificate-authority=/path/to/ca.crt \ # 替换真实CA路径 --embed-certs=true # 重新设置上下文 kubectl config set-context kubernetes-admin@kubernetes \ --cluster=kubernetes \ --user=kubernetes-admin \ --namespace=ctjt-zsa # 设置当前上下文 kubectl config use-context kubernetes-admin@kubernetes ``` 3. **验证配置**: ```bash kubectl config view # 检查格式是否正常 kubectl get pods -n ctjt-zsa # 测试是否能访问集群 ``` --- ### 根本原因 问题源于配置文件中字段名被错误地添加了空格(如 `certificate - authority - data`),这违反了 Kubernetes 配置文件的 YAML 语法规则。Kubernetes 要求字段名使用**kebab-case(短横线连接)** 格式且**不能包含额外空格**[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值