当多个团队使用同一个集群时,命名空间很有帮助,在名称冲突时使用,它可以是多个集群之间的虚拟墙。例如,我们不能在 Kubernetes 集群中拥有同名的 pod,但使用命名空间我们可以虚拟地划分集群并拥有同名的 pod。
命名空间的一些重要功能如下。
- 有助于使用相同的命名空间进行 pod 到 pod 的通信。
- 充当一个虚拟集群,可以位于同一物理集群之上。
- 提供了团队及其环境之间的逻辑分离。
在本文中,我们将创建一个命名空间,并在新创建的命名空间中创建一个 pod,我们还将看到如何将命名空间设置为默认命名空间。
先决条件
- 具有至少 1 个工作节点的 Kubernetes 集群。
本文将帮助您在 AWS Ubuntu 18.04 EC2 实例上创建具有 1 个主节点和 2 个节点的 Kubernetes 集群。
我们将要做什么
- 创建命名空间
创建命名空间
要列出 Kubernetes 集群中所有可用的命名空间,请执行以下命令。您可以拥有多个命名空间,并且命名空间可以具有命名空间元数据。
kubectl get namespace #获取集群中的所有命名空间
现在让我们尝试在不存在的特定命名空间中创建一个 pod。
要在“test-env”命名空间中创建一个 pod,请执行以下命令。
kubectl run nginx --image=nginx --namespace=test-env #尝试在不存在的命名空间中创建一个pod。
Pod 不会在不存在的命名空间中创建,因此我们首先需要创建一个命名空间。
要创建命名空间“test-env”,请执行以下命令(k8s create namespace)。
kubectl create namespace test-env #创建命名空间
kubectl get namespace #获取命名空间列表
现在我们有了一个命名空间,我们想在其中创建一个 pod。
要在我们创建的命名空间中创建一个 pod,请将 –namespace=test-env 选项传递给命令。
kubectl run nginx --image=nginx --namespace=test-env #在命名空间中创建一个pod。
如果您尝试在不指定命名空间的情况下获取 pod,您将无法获取 pod 的详细信息。
kubectl get pods #获取pod列表
要获取属于“test-env”命名空间的 pod 的详细信息,请使用以下命令。
kubectl get pods --namespace=test-env #获取指定命名空间中的pod列表
如果要将命名空间设置为默认命名空间,则不需要在命令中指定命名空间选项,请使用以下命令。
kubectl config set-context --current --namespace=test-env #设置默认命名空间
现在无需在命令中指定命名空间即可获取 pod 的详细信息。
kubectl get pods #从默认命名空间中获取 pod 列表
要切换到默认命名空间,请使用以下命令。
kubectl config set-context --current --namespace=default #检查命名空间为默认值
kubectl get pods #获取pod列表
要检查哪个是默认命名空间,请使用以下命令。
kubectl config view --minify | grep namespace: #Extract the namespace from the kubernetes config file.
kubectl config set-context --current --namespace=test-env #Set default namespace in the config file.
kubectl config view --minify | grep namespace:
检查哪些 Kubernetes 资源是命名空间,执行以下命令。
kubectl api-resources --namespaced=<strong>true</strong> #获取可以在命名空间中的Kubernetes对象
要查看哪些 Kubernetes 资源不在命名空间中,请使用以下命令。
kubectl api-resources --namespaced=<strong>false</strong> #获取永远不能在命名空间中的Kubernetes对象列表
您可以使用下面提到的命令获取命名空间的详细信息。
kubectl get namespaces #获取命名空间列表。
kubectl describe namespace test-env #获取命名空间的详细信息。
命名空间也可以使用 .yml 文件创建。
vim namespace-using-file.yml #创建命名空间定义文件
执行以下命令以创建对象定义文件中指定的命名空间。
kubectl create -f namespace-using-file.yml #使用.yml文件创建命名空间
kubectl get namespaces #获取命名空间列表
当您不再需要命名空间时,可以使用以下命令将其删除。
kubectl get namespaces #获取命名空间列表
kubectl delete namespaces env-prod test-env #删除一个命名空间
kubectl get namespaces #获取命名空间列表
使用命令“kubectl change namespace”切换到不同的命名空间。
结论
在本文中,我们了解了命名空间、创建命名空间、更改默认命名空间、检查命名空间中和不在命名空间中的 Kubernetes 资源,我们还看到了如何在我们选择的命名空间中创建 Kubernetes 对象(此处为 pod)。