k8s中namespace资源讲解、删除命名空间namespace卡主,一直Terminating

Namespace在Kubernetes中用于实现资源隔离,常见于多环境或多租户场景。默认有default、kube-node-lease、kube-public和kube-system等命名空间。创建、删除命名空间可通过kubectl命令完成。当namespace卡住无法删除时,可编辑其finalizers字段并使用API进行更新来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

环境:centos7.9 docker-ce-20.10.9 kubernetes-version v1.22.6

什么是namespace

namespace是kubernetes系统中的一种非常重要的资源,namespace的主要作用是用来实现多套环境的资源隔离,或者说是多租户的资源隔离。
默认情况下,k8s集群中所有pod都是可以相互访问的,但在实际环境中,可能不想让两个pod之间相互访问,那此时就可以将两个pod划分到不同的namespace下。k8s通过将集群内部的资源分配到不同的namespace中,可以形成逻辑上的隔离,以方便不同的资源进行隔离使用和管理。不同的命名空间可以存在同名的资源,命名空间为资源提供了一个作用域。
可以通过k8s的授权机制,将不同的namespace交给不同的租户进行管理,这样就实现了多租户的资源隔离,还可以结合k8s的资源配额机制,限定不同的租户能占用的资源,例如CPU使用量、内存使用量等等来实现租户可用资源的管理。
在这里插入图片描述

查看k8s系统中的namespace

namespace可以简写为ns,k8s创建之初默认会创建好几个namespace,下面查看k8s中的namespace:

[root@master ~]# kubectl get namespace			#查看所有命名空间,namespace可以写成ns,即 kubectl get ns
NAME			STATUS		AGE
default			ACTIVE		45h					#所以未指定namespace的对象都被分配到default命名空间
kube-node-lease ACTIVE		45h					#集群之间的心跳维护
kube-puble		ACTIVE		45h					#此命名空间下的所有资源可以被任何人访问,包含未认证用户
kube-system		ACTIVE		45h					#所有由k8s系统创建的资源都处于该命名空间

[root@master ~]# kubectl get namespace default	#查看指定命名空间		

创建资源对象时不指定命名空间,默认是当前上下文中指定的命名空间,k8s安装完成时默认的上下文中定义的命名空间就是default命名空间。所有,具体哪个是默认命名空间还得看当前上下文中定义的空间空间。

创建namespace

1、使用命令创建命名空间
kubectl create namespace dev

2、编写yaml文件创建命名空间
cat << 'EOF' | kubectl create -f -
apiVersion: v1
kind: Namespace
metadata:
  name: dev
EOF

删除namespace

#删除dev命名空间,主要会删除该命名空间下的所有资源
kubectl delete namespace dev			
#也可以通过指定yaml文件删除dev命名空间
kubectl delete -f dev_namespace.yaml
# 或者
cat << 'EOF' | kubectl delete -f -
apiVersion: v1
kind: Namespace
metadata:
  name: dev
EOF

查询资源时使用-n参数指定命名空间

查看某个资源时需要指定命名空间,否则默认在default命名空间查找。

#指定命名空间查找资源
kubectl get cronjob,pods -n kube-system
#在全部命名空间查找资源
kubectl get cronjob,pods --all-namespaces
kubectl get cronjob,pods -A

删除命名空间namespace卡主,一直Terminating

# mysql-ha命名空间一直处于Terminating
[root@dev-master xenon]# kubectl  get ns mysql-ha 
NAME       STATUS        AGE
mysql-ha   Terminating   125m

# 解决办法
kubectl get ns mysql-ha -o json > mysql-ha-namespace.json
vim mysql-ha-namespace.json		
# 搜索finalizers找到下面这段
    "spec": {
        "finalizers": [
            "kubernetes"	# 删除这句
        ]
    },
# 删除后就是
    "spec": {
        "finalizers": [
        ]
    },

#开始一个代理
kubectl proxy --port=8888
# 另外启动一个终端执行,http段注意修改端口和命名空间
curl -k -H "Content-Type: application/json" -X PUT \
--data-binary @mysql-ha-namespace.json \
http://127.0.0.1:8888/api/v1/namespaces/mysql-ha/finalize

总结

namespace可以实现资源的逻辑隔离,namespace简写为ns。

#查看所有命名空间
kubectl get namespace
#查看所有命名空间
kubectl get ns
#命令创建一个dev命名空间
kubectl create namespace dev
#编写资源清单yaml文件创建一个命名空间
cat>> dev_namespace.yaml <<'EOF'
apiVersion: v1
kind: NameSpace
metadata:
  name: dev
EOF
#应用上面的资源清单
kubectl apply -f dev_namespace.yaml
#删除dev命名空间,dev下的所有资源都会被删除
kubectl delete namespace dev
#通过资源清单文件来删除dev命名空间
kubectl delete -f dev_namespace.yaml
#指定命名空间查找资源
kubectl get cronjob,pods -n kube-system
#在全部命名空间查找资源
kubectl get cronjob,pods --all-namespaces
kubectl get cronjob,pods -A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值