Kubernetes 中的命名空间和上下文有什么区别?
What is the difference between namespaces and contexts in Kubernetes?
我发现在许多示例中,在 kubectl 客户端之前指定了 kubectl --context dev --namespace default {other commands}
。在k8的环境下能看的出来吗?
上下文是与 kubectl 使用的特定集群(username/apiserver 主机)的连接。您可以通过这种方式管理多个集群。
命名空间是特定集群内的逻辑分区,用于管理资源和约束。
您使用多个上下文来针对多个不同的 Kubernetes clusters.You 可以使用 kubectl config use-context
命令在集群之间快速切换。
命名空间是在多个用户之间划分集群资源的一种方式(通过资源配额)。命名空间适用于许多用户分布在多个团队或项目中的环境。
Kubernetes中的一个context
是一组访问参数。每个上下文都包含一个 Kubernetes 集群、一个用户和一个命名空间。当前上下文是 kubectl
当前默认的集群:针对该集群的所有 kubectl
命令 运行。每个已使用的 context
都将在您的 .kubeconfig
上可用。
同时一个namespace
is a way to support multiple virtual cluster within the same physical cluster. This usually will be related to resource quota还有RBAC管理。
kubernetes 概念(和术语)context 仅适用于 kubernetes 客户端,即您 运行 kubectl 命令的地方,例如你的命令提示符。
kubernetes 服务器端无法识别此术语 'context'。
例如,在命令提示符下,即作为客户端:
- 调用
kubectl get pods -n dev
时,您
检索位于命名空间 'dev'. 下的 pods 的列表
- 调用
kubectl get deployments -n dev
时,您
检索位于命名空间 'dev'. 下的部署列表
如果您知道目前基本上只针对 'dev' 命名空间,那么您可以只:
- 创建一个名为 'context-dev' 的上下文。
- 为此上下文指定命名空间='dev'。
- 设置当前上下文='context-dev'.
这样,您上面的命令将简化为如下:
kubectl get pods
kubectl get deployments
您可以设置不同的上下文,例如 'context-dev'、'context-staging' 等,其中每个上下文都针对不同的命名空间。
就像一群人在谈论电影的类比。所以在谈话中的某个地方使用了 'Rocky' 这个词。既然他们在谈论电影,那么很明显 'Rocky' 这里指的是拳击电影 'Rocky' 而不是“崎岖不平、多石”的地形。每次都提到 'the movie Rocky' 是多余的,没有必要。一个字'Rocky'就够了。上下文显然是关于电影的。
与 Kubernetes 和上面的示例相同。如果上下文已经设置为某个集群和命名空间,则在每个命令中设置和/或提及这些参数是多余的和不必要的。
我这里的解释只是围绕命名空间展开的,但这只是一个例子。除了指定命名空间之外,在上下文中您实际上还将指定您的目标集群以及用于访问该集群的用户信息。您可以查看 ~/.kube/config 文件,了解除了名称空间之外还有哪些信息与每个上下文关联。
与此同时,命名空间 概念在服务器端和客户端均有使用。它是 Kubernetes 对象的逻辑分组。就像我们在操作系统中将文件分组到不同文件夹中一样。
我发现在许多示例中,在 kubectl 客户端之前指定了 kubectl --context dev --namespace default {other commands}
。在k8的环境下能看的出来吗?
上下文是与 kubectl 使用的特定集群(username/apiserver 主机)的连接。您可以通过这种方式管理多个集群。 命名空间是特定集群内的逻辑分区,用于管理资源和约束。
您使用多个上下文来针对多个不同的 Kubernetes clusters.You 可以使用 kubectl config use-context
命令在集群之间快速切换。
命名空间是在多个用户之间划分集群资源的一种方式(通过资源配额)。命名空间适用于许多用户分布在多个团队或项目中的环境。
Kubernetes中的一个context
是一组访问参数。每个上下文都包含一个 Kubernetes 集群、一个用户和一个命名空间。当前上下文是 kubectl
当前默认的集群:针对该集群的所有 kubectl
命令 运行。每个已使用的 context
都将在您的 .kubeconfig
上可用。
同时一个namespace
is a way to support multiple virtual cluster within the same physical cluster. This usually will be related to resource quota还有RBAC管理。
kubernetes 概念(和术语)context 仅适用于 kubernetes 客户端,即您 运行 kubectl 命令的地方,例如你的命令提示符。 kubernetes 服务器端无法识别此术语 'context'。
例如,在命令提示符下,即作为客户端:
- 调用
kubectl get pods -n dev
时,您 检索位于命名空间 'dev'. 下的 pods 的列表
- 调用
kubectl get deployments -n dev
时,您 检索位于命名空间 'dev'. 下的部署列表
如果您知道目前基本上只针对 'dev' 命名空间,那么您可以只:
- 创建一个名为 'context-dev' 的上下文。
- 为此上下文指定命名空间='dev'。
- 设置当前上下文='context-dev'.
这样,您上面的命令将简化为如下:
kubectl get pods
kubectl get deployments
您可以设置不同的上下文,例如 'context-dev'、'context-staging' 等,其中每个上下文都针对不同的命名空间。
就像一群人在谈论电影的类比。所以在谈话中的某个地方使用了 'Rocky' 这个词。既然他们在谈论电影,那么很明显 'Rocky' 这里指的是拳击电影 'Rocky' 而不是“崎岖不平、多石”的地形。每次都提到 'the movie Rocky' 是多余的,没有必要。一个字'Rocky'就够了。上下文显然是关于电影的。
与 Kubernetes 和上面的示例相同。如果上下文已经设置为某个集群和命名空间,则在每个命令中设置和/或提及这些参数是多余的和不必要的。
我这里的解释只是围绕命名空间展开的,但这只是一个例子。除了指定命名空间之外,在上下文中您实际上还将指定您的目标集群以及用于访问该集群的用户信息。您可以查看 ~/.kube/config 文件,了解除了名称空间之外还有哪些信息与每个上下文关联。
与此同时,命名空间 概念在服务器端和客户端均有使用。它是 Kubernetes 对象的逻辑分组。就像我们在操作系统中将文件分组到不同文件夹中一样。