• KubernetesNamespace


    1. 简介

    Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为namespace

    在一些文档里namespace也称为命名空间

    namespace为资源提供了一个范围。

    资源的名称需要在namespace内是唯一的。

    namespace不能相互嵌套,每个 Kubernetes 资源只能在一个namespace中。

    2. quick start

    2.1 查看namespace

    # kubectl get ns
    $ kubectl get namespaces
    
    NAME          STATUS    AGE
    default       Active    11d
    kube-system   Active    11d
    kube-public   Active    11d
    

    初始状态下,Kubernetes 具有三个namespace

    • defaultnamespace对象的默认namespace
    • kube-system 由 Kubernetes 系统创建的对象的namespace
    • kube-public 自动创建且被所有用户可读的namespace(包括未经身份认证的)。此namespace通常在某些资源在整个集群中可见且可公开读取时被集群使用。此namespace的公共方面只是一个约定,而不是一个必要条件。

    或用下面的命令获取详细信息:

    $ kubectl describe namespaces <name>
    
    Name:           default
    Labels:         <none>
    Annotations:    <none>
    Status:         Active
    
    No resource quota.
    
    Resource Limits
     Type       Resource    Min Max Default
     ----               --------    --- --- ---
     Container          cpu         -   -   100m
    

    请注意,这些详情同时显示了资源配额(如果存在)以及资源限制区间。

    资源配额跟踪并聚合 Namespace 中资源的使用情况,并允许集群运营者定义 Namespace 可能消耗的 Hard 资源使用限制。

    限制区间定义了单个实体在一个 Namespace 中可使用的最小/最大资源量约束。

    namespace可以处于下列两个阶段中的一个:

    • Active namespace正在被使用中
    • Terminating namespace正在被删除,且不能被用于新对象。

    2.2 创建namespace

    说明: 避免使用前缀 kube- 创建namespace,因为它是为 Kubernetes 系统namespace保留的。

    1. 新建一个名为 my-namespace.yaml 的 YAML 文件,并写入下列内容:

      apiVersion: v1
      kind: Namespace
      metadata:
        name: <insert-namespace-name-here>
      

      然后运行:

      $ kubectl create -f ./my-namespace.yaml
      
    2. 或者,你可以使用下面的命令创建namespace

      $ kubectl create namespace <insert-namespace-name-here>
      

    2.3 删除namespace

    1. 使用资源文件删除:

      $ kubectl delete -f ./my-namespace.yaml 
      
    2. 使用命令删除:

      kubectl delete namespaces <insert-some-namespace-name>
      

    警告: 这会删除namespace下的 所有内容

    删除是异步的,所以有一段时间你会看到namespace处于 Terminating 状态。

    3. 理解使用namespace的动机

    单个集群应该能满足多个用户及用户组的需求(以下称为 “用户社区”)。

    Kubernetes namespace 帮助不同的项目、团队或客户去共享 Kubernetes 集群。

    namespace通过以下方式实现这点:

    1. 为资源设置作用域.
    2. 为集群中的部分资源关联鉴权和策略的机制。

    使用多个namespace是可选的。

    每个用户社区都希望能够与其他社区隔离开展工作。

    每个用户社区都有自己的:

    1. 资源(pods、服务、 副本控制器等等)
    2. 策略(谁能或不能在他们的社区里执行操作)
    3. 约束(该社区允许多少配额,等等)

    集群运营者可以为每个唯一用户社区创建namespace

    namespace为下列内容提供唯一的作用域:

    1. 命名资源(避免基本的命名冲突)
    2. 将管理权限委派给可信用户
    3. 限制社区资源消耗的能力

    用例包括:

    1. 作为集群运营者, 我希望能在单个集群上支持多个用户社区。
    2. 作为集群运营者,我希望将集群分区的权限委派给这些社区中的受信任用户。
    3. 作为集群运营者,我希望能限定每个用户社区可使用的资源量,以限制对使用同一集群的其他用户社区的影响。
    4. 作为群集用户,我希望与我的用户社区相关的资源进行交互,而与其他用户社区在该集群上执行的操作无关。

    4. 理解namespace和 DNS

    当你创建服务时,Kubernetes 会创建相应的 DNS 条目。 此条目的格式为 <服务名称>.<namespace名称>.svc.cluster.local。 这意味着如果容器使用 <服务名称>,它将解析为namespace本地的服务。 这对于在多个namespace(如开发、暂存和生产)中使用相同的配置非常有用。 如果要跨namespace访问,则需要使用完全限定的域名(FQDN)。

  • 相关阅读:
    深拷贝与浅拷贝+可变与不可变的数据类型
    列表+列表循环+列表切片+元祖
    接口+session与cookie的区别+http状态码
    JSP中文乱码问题终极解决方案
    关于AS使用git的那些奇葩事儿
    ListView中动态显示隐藏HeaderView和FooterView
    关于沉浸式的那些奇葩问题
    Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析
    快速搭建tab
    使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中<meta-data>变量的值
  • 原文地址:https://www.cnblogs.com/ludangxin/p/15680661.html
Copyright © 2020-2023  润新知