Namespace

作者: YoungJadeStone | 来源:发表于2020-12-29 14:06 被阅读0次

在k8s里面,有一些group & manage resources的方式,比如Label,Namespace。

想理解Label,我们可以类比成tag(Instagram,微博都有这种用#开始的tag),或者gmail里的label。我们这里重点看下Namespace。

1. Intro

官方doc上介绍说,k8s可以把一个physical cluster划分成virtual clusters的,这种virtual cluster就是Namespace。

Kubernetes supports multiple virtual clusters backed by the same physical cluster. These virtual clusters are called namespaces.

通过Namespace,我们可以把cluster resource划分给不同的user(通过 ResourceQuota)。

2. Label v.s. Namespace

首先比较一下Label和Namespace:

  • 一个k8s的resource可以有多个Label,也可以没有。而一个resource只能有一个Namespace或者global(相当于没有Namespace,或者说是cluster-level resource,比如Node这个resource就是cluster-level的)。
  • Label之间是可以有overlap的,而Namespace不可以。
  • 不同Namespace可以有相同的resource name(resource name只需要在Namespace里是unique的)。比如namespace-a有个resource叫resource-x,namespace-b也可以有个resource叫resource-x。label不可以。
  • 我们在使用cluster的时候(比如用kubectl),如果不指定Label,会显示所有的object(也就是不管Label是什么)。对于Namespace,如果不指定,会默认使用default这个Namespace。

3. Example

怎么划分Namespace呢?非常简单的例子就是把resource分成:production,development,QA environment。把它们对应不同的Namespace。

k8s本身也有自带的Namespace,在cluster创建的时候就有了(下面介绍来自官方doc):

  • default - The default namespace for objects with no other namespace
  • kube-system - The namespace for objects created by the Kubernetes system
  • kube-public - This namespace is created automatically and is readable by all users (including those not authenticated). This namespace is mostly reserved for cluster usage, in case that some resources should be visible and readable publicly throughout the whole cluster. The public aspect of this namespace is only a convention, not a requirement.
  • kube-node-lease - This namespace for the lease objects associated with each node which improves the performance of the node heartbeats as the cluster scales.

有了Namespace,我们可以设置RequestQuota(应用于一个Namespace的所有Pod,对比于LimitRange是应用在单独的Pod上),也可以对Namespace设置相应的access permission。

4. Commands

列出cluster里的所有Namespace:

kubectl get ns

下面两个command是一样的,列出cluster里Namespace是<namespace-name>的所有Pod:

kubectl get po --namespace <namespace-name>
kubectl get po -n <namespace-name>

Create a Namespace

方法1: 通过yaml文件创建一个Namespace:

kubectl create -f <namespace-yaml-file>.yaml

<namespace-yaml-file>.yaml的例子如下:

apiVersion: v1
kind: Namespace
metadata:
    name: my-namespace

方法2: 手动创建一个Namespace:

kubectl create namespace <namespace-name>

Manage Objects in a Namespace

方法1: 在object(比如pod,etc)的yaml文件中,在metadata部分加入Namespace: <namespace-name>这个entry。
方法2: 在<namespace-name>这个Namespace里面创建一个<object-yaml-file>.yaml定义的object(比如pod,etc):

kubectl create -f <object-yaml-file>.yaml -ns <namespace-name>

Check if an Object is Namespaced

之前我们说过,不是所有的resource object都在某个namespace。有的resource object是cluster-wide的,比如Node,再比如PersistentVolume。如果我们想查看哪些是,哪些不是,用下面的command:

# In a namespace
kubectl api-resources --namespaced=true

# Not in a namespace
kubectl api-resources --namespaced=false

Reference:

  • Kubernetes in Action

相关文章

  • namespace与mount namespace

    原文:《Namespaces in operation, part 1: namespaces overview》...

  • namespace

    命名空间是一个域,这在个域中所有的类型名字必须是唯一的,不同的类型分组归入到层次化的命名空间. 命名空间的好处是:...

  • NameSpace

  • namespace

    define 1. namespace myns {}; `{}`可以省略 2. namespace myns\...

  • namespace

    命名空间。用于给一块代码指定作用域。 使用:

  • namespace

    这是一篇译文原文地址有时你的代码中可能会有一个叫做xyz()的函数,而另一个库中也有一个相同的xyz()函数。此时...

  • namespace

    namespace 不同的namespace形成逻辑上不同的项目或用户组不同cluster,代表不同的namesp...

  • Namespace

    在k8s里面,有一些group & manage resources的方式,比如Label,Namespace。 ...

  • Docker安装和Harbor高可用部署

    一、Namespace和cgroup介绍 1.1 Namespace Namespace是linux系统的底层概念...

  • PHP namespace与use

    一、namespace what is namespace namespace,命名空间,是为了解决项目多人协同开...

网友评论

      本文标题:Namespace

      本文链接:https://www.haomeiwen.com/subject/bzpfoktx.html