k8s 命名空间和上下文
在 Kubernetes 中,上下文(Context) 是一个核心概念,用于将集群(Cluster)、用户身份(User)和命名空间(Namespace)组合成一个逻辑单元。它的目的是简化在不同环境(如开发、测试、生产)或不同集群之间的切换操作。
上下文(Context)包含什么?
一个上下文由以下 3 个关键组件组成(存储在 kubeconfig
文件中):
Cluster
定义要连接的 Kubernetes 集群的信息(如 API Server 地址、证书等)。
示例:
dev-cluster
(开发集群)、prod-cluster
(生产集群)。
User
定义访问集群的身份认证信息(如用户名、客户端证书、Token 等)。
示例:
dev-admin
(开发管理员)、prod-readonly
(生产只读用户)。
Namespace(可选)
指定当前上下文的默认命名空间。如果未设置,默认为
default
。示例:
backend
、monitoring
。
上下文的配置文件(kubeconfig)
上下文的信息存储在 ~/.kube/config
文件中,其结构大致如下:
apiVersion: v1
kind: Config
clusters:
- name: dev-cluster # 集群定义
cluster:
server: https://dev.k8s.example.com
certificate-authority-data: <CA证书>
users:
- name: dev-admin # 用户定义
user:
client-certificate-data: <客户端证书>
client-key-data: <客户端私钥>
contexts:
- name: dev-context # 上下文定义
context:
cluster: dev-cluster # 关联的集群
user: dev-admin # 关联的用户
namespace: backend # 默认命名空间(可选)
current-context: dev-context # 当前使用的上下文
上下文的作用
快速切换环境
通过切换上下文,可以一键切换到另一个集群,并自动使用对应的用户身份和命名空间。
示例:
kubectl config use-context prod-context # 切换到生产集群
权限隔离
不同上下文可能使用不同的用户身份(如管理员、只读用户),实现权限控制。
命名空间默认值
上下文中可设置默认命名空间,避免每次命令都要加 -n
参数。
上下文的常见操作
查看所有上下文
kubectl config get-contexts
查看当前上下文
kubectl config current-context
切换上下文
kubectl config use-context <context-name>
修改上下文的默认命名空间
kubectl config set-context --current --namespace=<namespace>
实际场景示例
假设你有以下两个上下文:
dev-context
: 开发集群 +dev-admin
用户 +backend
命名空间prod-context
: 生产集群 +prod-readonly
用户 +default
命名空间
当你运行:
kubectl config use-context dev-context
后续所有命令会自动:
连接到开发集群(
dev-cluster
)的 API Server。使用
dev-admin
用户的证书进行认证。默认操作
backend
命名空间中的资源。
上下文与命名空间的关系
上下文 包含命名空间,但命名空间是可选字段。
切换上下文时,命名空间可能一起切换(如果上下文中设置了命名空间)。
可以通过命令单独修改上下文的命名空间,而无需切换上下文。
总结
上下文 = 集群 + 用户 + 命名空间
它是 Kubernetes 多环境管理的核心机制,能显著提升操作效率。
理解上下文的结构后,可以更灵活地管理开发、测试、生产等不同环境!
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: