k8s概念之Namespace和Lable和Selector

  • 一、NameSpace
  • 二、Lable
  • 三、Selector

一、Namespace 命名空间

1.1 概念

在一个Kubernetes集群中可以使用namespace创建多个“虚拟集群”,这些namespace之间可以完全隔离,也可以通过某种方式,让一个namespace中的service可以访问到其他的namespace中的服务,我们在CentOS中部署kubernetes1.6集群的时候就用到了好几个跨越namespace的服务,比如Traefik ingress和kube-systemnamespace下的service就可以为整个集群提供服务,这些都需要通过RBAC定义集群级别的角色来实现。

2.1 Namespaece实际应用场景

因为namespace可以提供独立的命名空间,因此可以实现部分的环境隔离。当你的项目和人员众多的时候可以考虑根据项目属性,例如生产、测试、开发划分不同的namespace。

3.1 namespace命令说明

3.1.1 查看Namespace

kubectl get namespace

NAME          STATUS    AGE
default       Active    1d
kube-system   Active    1d
kube-public   Active    1d

Kubernetes以三个初始名称空间开头:

  • default 没有其他命名空间的对象的默认命名空间.
  • kube-systemKubernetes系统创建的对象的命名空间.
  • kube-public此命名空间是自动创建的,并且可供所有用户(包括未经过身份验证的用户)读取.此命名空间主要用于集群使用,关联的一些资源在集群中是可见的并且可以公开读取。此命名空间的公共方面知识一个约定,但不是非要这么要求。

获取特定的Namespace信息:

kubectl get namespaces 

获取特定的Namespace的详细信息:

kubectl describe namespaces 
Name:           default
Labels:         
Annotations:    
Status:         Active

No resource quota.

Resource Limits
 Type       Resource    Min Max Default
 ----               --------    --- --- ---
 Container          cpu         -   -   100m

命名空间可以分为两个阶段:

  • Active 当前命名空间正在被使用。
  • Terminating 这个Namespace正在被删除,并且不能用于新对象。

3.2.1 创建Namespace

  1. 创建一个名为my-namespace.yaml的新YAML文件,其中包含以下内容:

    vim my-namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
    # 
      name: test
    # 通过kubectl命令根据yaml创建namespace
    kubectl create -f ./my-namespace.yaml  
    
  2. 直接通过命令创建

kubectl create namespace  

3.3.1 删除Namespace

  1. 删除Namespace命令
kubectl delete namespaces 

4.1 细分Namespace的作用

4.1.1 理解default命名空间。

默认情况下,k8s集群在配置集群以保存默认的Pod集时,将实例化默认命名空间和集群使用的部署。

4.1.2 创建Namespace并设置对应的lable.

vim namespace-dev.json
{
  "apiVersion": "v1",
  "kind": "Namespace",
  "metadata": {
    "name": "development",
    "labels": {
      "name": "development"
    }
  }
}

vim namespace-pro.json
{
  "apiVersion": "v1",
  "kind": "Namespace",
  "metadata": {
    "name": "production",
    "labels": {
      "name": "production"
    }
  }
}
# 创建两个namespacenamespace-dev.json
kubectl create -f namespace-dev.json && kubectl create -f namespace-dev.json

查看namespace对应的lables

kubectl get namespace --show-lables
NAME          STATUS    AGE       LABELS
default       Active    32m       
development   Active    29s       name=development
production    Active    23s       name=production

4.1.3 为每个Namespace创建一个pod

一个Namespace为集群中的Pods,Services,and Deployments提供了范围。

每一个Namespace创建的资源(pod,services,deployment)对于另一个Namespace都是隐藏的。

参考文档:

https://kubernetes.io/docs/tasks/administer-cluster/namespaces/#subdividing-your-cluster-using-kubernetes-namespaces

4.1.4 了解每一个Namespace的动机

  • 重点: 大多数Kubernetes资源(例如,pod,服务,复制控制器等)都在某些名称空间中。但是,命名空间资源本身并不在命名空间中。一些低级资源,例如(nodes and persistentVolumes)则不存在任何的命名空间中.

4.1.5 设置命名的请求空间

参考文档: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/#setting-the-namespace-for-a-request

你可能感兴趣的:(k8s)