入门
命名空间的概述及其使用方法。
简介
Kubernetes 中的大多数资源都会位于命名空间中。我们到目前为止创建的所有 `pod`、`deployment`、`service`、`configmap` 等资源都运行在 `default` 命名空间中;正如其名称所示,如果我们没有明确指定其他位置,资源将默认运行在此命名空间中。
我们可以根据需要创建其他命名空间,它们可以帮助我们像使用模块或包来组织代码一样组织资源。但需要注意的是,命名空间并不提供强安全隔离。一个命名空间中的资源仍然可以访问另一个命名空间中的资源。
接下来,我们来看看在不同命名空间中工作时会发生什么变化。
创建命名空间
和所有其他资源一样,命名空间也可以通过清单文件创建。这非常简单,只需为其指定一个名称即可:
1apiVersion: v1 2kind: Namespace 3metadata: 4 name: my-namespace
点击下方的“RUN”按钮运行该示例。
No configuration found for ID: 0beaeff5e0983ac226970374ada8018df4db5a39d8cad8614deef9d48ca9318e
现在,如果我们尝试列出所有命名空间,应该能看到它已被成功创建:
1kubectl apply -f namespace.yaml 2# namespace/my-namespace created 3 4$ kubectl get namespaces 5# NAME STATUS 6# default Active 7# docker Active 8# ingress-nginx Active 9# kube-public Active 10# kube-system Active 11# my-namespace Active
我们可以看到 my-namespace 已被创建,同时也能注意到还有其他几个命名空间处于活动状态。例如,ingress-nginx 是我们在前一章安装 nginx ingress controller 时自动创建的,这是一个命名空间的典型应用场景。
这些命名空间中的所有资源都与 ingress 控制器相关,我们可能不希望在执行 kubectl get pods 时看到这些资源。
不过,我们可以使用 kubectl 的 -n 标志查看特定命名空间中的资源:
1kubectl get pods -n ingress-nginx 2# NAME READY STATUS 3# nginx-ingress-controller-57548b96c8-mwkrp 1/1 Running
我们还可以使用 --all-namespaces 标志查看所有命名空间中的资源,结合 kubectl get all 可以查看集群中当前运行的所有资源:
1kubectl get pods --all-namespaces 2kubectl get all --all-namespaces