Skip to content

kubernetes学习笔记-NameSpace

简介

Namespace 是 Kubernetes 中用于资源隔离的机制。每个 Namespace 代表一个独立的项目或环境,能够将同一集群中的不同项目进行隔离。默认的 Namespace 是 default


创建 Namespace

方式一:使用 kubectl create namespace 命令

直接使用 kubectl 命令创建一个新的 Namespace:

kubectl create namespace <namespace-name>

例如,创建一个名为 study 的 Namespace:

kubectl create namespace study

方式二:通过 YAML 文件创建

也可以通过 YAML 文件定义 Namespace,然后使用 kubectl apply 命令进行创建:

apiVersion: v1
kind: Namespace # 资源类型
metadata:
  name: my-namespace # Namespace 名称

应用该 YAML 文件创建 Namespace:

kubectl apply -f create-namespace.yaml

查询 Namespace

要查看当前集群中的所有 Namespace,可以使用以下命令:

kubectl get namespace

例如,返回的结果可能是:

NAME              STATUS   AGE
kube-system       Active   41d
kube-public       Active   41d
kube-node-lease   Active   41d
default           Active   41d
study             Active   20d

此命令会显示每个 Namespace 的名称、状态和创建时间。


删除 Namespace

方式一:根据命名空间名称删除

使用以下命令删除指定的 Namespace:

kubectl delete namespace <namespace-name>

例如,删除 study Namespace:

kubectl delete namespace study

方式二:根据 YAML 文件删除

如果是通过 YAML 文件创建的 Namespace,也可以使用该文件删除:

kubectl delete -f create-namespace.yaml

修改默认工作命名空间

在 Kubernetes 中,默认的工作命名空间是 default。如果你希望修改当前上下文的工作命名空间,可以使用以下命令:

kubectl config set-context --current --namespace=<namespace-name>

例如,切换当前上下文的工作命名空间为 study

kubectl config set-context --current --namespace=study

切换后,所有后续的 kubectl 命令都将默认操作 study 命名空间中的资源。


强制删除 Namespace

有时,命名空间在删除时可能会进入 Terminating 状态,无法正常删除。此时,你可以通过以下步骤强制删除该 Namespace。

步骤 1:获取 Namespace 的 JSON 配置

首先,使用 kubectl get ns 获取 Namespace 的配置并保存为 JSON 文件:

kubectl get ns <namespace-name> -o json > <namespace-name>.json

例如,获取 kubernetes-dashboard 命名空间的 JSON 配置:

kubectl get ns kubernetes-dashboard -o json > kubernetes-dashboard.json

步骤 2:修改 JSON 配置,清除 finalizers

编辑生成的 JSON 文件,将 spec.finalizers 设为空数组:

{
  "spec": {
    "finalizers": []
  }
}

步骤 3:强制删除 Namespace

使用 kubectl replace 命令强制删除命名空间:

kubectl replace --raw "/api/v1/namespaces/kubernetes-dashboard/finalize" -f kubernetes-dashboard.json

这将清除 finalizers,并强制删除 kubernetes-dashboard 命名空间。


小结

  • Namespace 提供了 Kubernetes 中的资源隔离,适用于多租户环境或多个项目的管理。
  • 创建 Namespace 可以通过命令 kubectl create namespace 或者使用 YAML 文件。
  • 查询 Namespace 可以使用 kubectl get namespace 查看所有 Namespace。
  • 删除 Namespace 可以通过命名空间名称或 YAML 文件删除,删除过程中如果遇到问题,可以通过强制删除解决。
  • 修改默认工作命名空间 通过 kubectl config set-context 命令设置当前上下文的命名空间。