K8S 十一月 15, 2020

K8s 命名空间

文章字数 2.7k 阅读约需 2 mins. 阅读次数

Kubernetes 支持在一个物理集群上划分多个虚拟集群,这些虚拟集群即 命名空间

约束

  • 在同一个命名空间中,资源名称须保持唯一。但在不同命名空间中,可以存在相同名称的资源。
  • 每一个资源只能隶属于一个命名空间。
  • 但命名空间本身不能属于另一个命名空间。

可以通过如下命令查看哪些资源在或不在命名空间中:

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

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

创建命名空间

可参照如下配置文件创建命名空间(注意修改其中的 alpha 为想创建的命名空间名称):

# namespace-alpha.yml
apiVersion: v1
kind: Namespace
metadata:
  name: alpha

之后使用 kubectl apply -f namespace-alpha.yml 进行创建。

K8s 初始状态下包含了四个命名空间:

  • default:默认命名空间。资源未指定命名空间时,均创建在此命名空间下
  • kube-system:K8s 系统创建的对象在此命名空间下
  • kube-public:这个命名空间对所有用户可见(包括未授权用户),通常作为保留资源为集群所使用
  • kube-node-lease:此命名空间用于与各个节点相关的租期(Lease)对象;此对象的设计使得集群规模很大时节点心跳检测性能得到提升

注意:创建命名空间时,应避免使用 kube- 作为前缀。

查看命名空间

$ kubectl get namespace
NAME              STATUS   AGE
default           Active   1d
kube-node-lease   Active   1d
kube-public       Active   1d
kube-system       Active   1d

指定命名空间

在 Deployment 等配置文件中,可在 metadata 里指定所属的 namespace,如:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: alpha
  labels:
    app: nginx
spec:
  type: NodePort
  ports:
  - name: nginx
    port: 80
    nodePort: 30080
  selector:
    app: nginx

查询命名空间中资源

在设定了 namespace 后,进行查询等操作时,均需指定命名空间,如:

$ kubectl get pods -n alpha
$ kubectl get pods --namespace=alpha

设定命名空间偏好

可在当前上下文中,设定命名空间偏好,使后续的 kubectl 命令不再需要特殊指定命名空间:

$ kubectl config set-context --current --namespace=alpha
# Validate it
kubectl config view --minify | grep namespace:

跨命名空间服务访问

默认情况下,使用服务名可以直接访问相同命名空间内的服务。如果需要访问其他命名空间里的服务,可使用 服务名.命名空间 的形式,如 nginx.alpha

0%