Kubernetes – Namespaces
Kubernetes 命名空间是一种让您能够组织资源的机制。它就像集群内的虚拟集群。命名空间将资源与其他命名空间的资源隔离开来。例如,您需要在一个命名空间中为部署/服务使用不同的名称,但您可以在两个不同的命名空间中为部署使用相同的名称。
初始命名空间
- kube-system: Master、kubectl 等系统进程都部署在此命名空间中;因此建议不要创建或修改该命名空间。
- kube-public:此命名空间包含可公开访问的数据,例如包含集群信息的configMap 。
- kube-node-lease:该命名空间是节点的心跳。每个节点都有其关联的租约对象。它决定了节点的可用性。
- default:这是您默认用于创建资源的命名空间。
虽然您创建的任何资源都将在默认命名空间中创建,但您也可以创建自己的新命名空间并在那里创建资源。
注意:避免创建带有前缀 Kube- 的命名空间,因为它是为 Kubernetes 系统命名空间保留的,您不应尝试修改它们。
使用命名空间
kubernetes 中的命名空间是一种在物理集群中创建和组织虚拟集群的方法,我们可以在其中隔离单个集群中的一组资源。命名空间有助于组织集群中的资源,例如pod、服务和卷。可以使用 kubernetes 命名空间来管理应用程序和授权的工作负载。
查看命名空间
查看命名空间时使用的命令有几个,如下所示。
列出所有定义的命名空间:
在实时情况下,您将发现用于不同应用程序的命名空间数量,要列出集群中存在的所有命名空间,您可以使用以下命令。
kubectl get namespaces
描述命名空间:
使用以下命令查看有关特定命名空间的更多具体信息。
kubectl describe namespace my-namespace
要查看命名空间中存在的资源数量:
您可以使用以下命令查看特定命名空间中存在的所有资源。
kubectl get pods --namespace=my-namespace
标记命名空间:
您可以将标签添加到现有的命名空间,以便在创建资源时进一步提供帮助。
kubectl label namespaces <namespace> <labelKey>=<value>
设置请求的命名空间
在 kubernetes 中设置命名空间可以通过两种方式完成,一种是命令式方式,另一种是声明式方式,即使用 kubectl 的命令行并编写 yaml 文件。如以下命令和代码所示
命令式或者kubectl的命令行:
kubectl get pods --namespace=my-namespace
此命令将从指定的命名空间中获取 pod。
声明方式或者yaml文件:
apiVersion: v1 kind: Namespace metadata: name: <NameSpaceName> lables: # Labels are key value pairs(Metadata) <key>: <value> <key> <value>
设置命名空间首选项
设置命名空间首选项将使AP I 与集群交互的默认命名空间成为可能。设置命名空间首选项后,您可以在该特定命名空间中部署资源,在该命名空间中管理所有资源而不会造成任何混淆。命名空间首选项通常在 Kubernetes API 服务器上配置,可以设置为以下选项之一:
- 集群范围的默认命名空间。
- 用户的默认命名空间。
要使用命令行工具 kubectl 设置命名空间首选项,可以使用以下命令。这将是 my-namespace 作为默认命名空间。
kubectl config set-context --current --namespace=my-namespace
命名空间和 DNS
命名空间将隔离需要有限授权的服务,DNS 将以容器的形式公开您部署的应用程序,在某些情况下,DNS 和命名空间将协同工作。Kubernetes 将使用以下命名约定将 DNS 分配给需要公开资源的命名空间。
<service-name>.<namespace-name>.svc.cluster.local
<service-name>:表示与资源关联的服务的名称。;<namespace-name>:资源所在的命名空间的名称。
Kubernetes 命名空间 Yaml
Kubernetes 命名空间 yaml 文件用于在 Kubernetes 中创建命名空间,您可以在其中隔离将要部署在 Kubernetes 集群中的资源。
apiVersion: v1 kind: Namespace metadata: name: <NameSpaceName> lables: # Labels are key value pairs(Metadata) <key>: <value> <key> <value>
例子:
通过以下 yaml,命名空间的名称将为“test-ns”,键值对将为“ team: testing team”
apiVersion: v1 kind: Namespace metadata: name: test-ns labels: team: testingteam
创建新的命名空间
$ kubectl create namespace your-namespace
在命名空间中创建组件:
要在命名空间中创建组件,您可以提供 –namespace 标志或在配置文件中指定命名空间。
方法 1:使用 –namespace 标志
$ kubectl apply -f your_config.yaml --namespace=your-namespace
然后您可以使用kubectl get检查命名空间中的资源并使用-n指定命名空间
在每个命名空间中创建 Pod
您不需要使用 –namespace 标志来指定命名空间,而只需在配置文件中初始指定命名空间即可。
然后使用该命令。
$ kubectl apply -f your_config_file.yaml
使用 Kubernetes 命名空间的好处
- 不同团队的资源隔离:命名空间将隔离将在 Kubernetes 集群中使用的资源。Kubernetes 中的命名空间对于安全性、性能或组织原因非常有用。可以为将在 Kubernetes 集群上工作的不同团队(例如开发团队、测试团队和其他团队)创建命名空间。
- RBAC:命名空间可以通过使用基于角色的访问控制来提高部署的资源的安全性。例如,如果使用 RABAC 将资源部署在 dev 命名空间中,我们可以在 Kubernetes 中控制该 dev 命名空间中开发人员团队成员的权限。
- 资源组织:在 Kubernetes 集群中,以有组织的方式维护部署在集群中的资源非常重要,这可以通过使用 Kubernetes 命名空间来实现,您可以在其中跟踪和管理已部署的资源。
- 提高性能:部署在 Kubernetes 集群中的资源彼此隔离,这将有助于减轻 CPU 和内存等资源的负担。
Kubernetes 命名空间常见问题解答
1. Kubernetes 中的命名空间是什么?
Namespace是kubernetes集群内部的一个虚拟集群。
2. 命名空间的作用是什么?
Namespace会在逻辑上隔离kubernets集群的对象。