Kubernetes的名称空间03.md

1、概念

kubernetes集群提供对内部资源进行"软隔离"的机制,以方便用户管理和组织集群资源

image-20260525104146047

kubernetes创建后,自带默认的几个名称空间,分别是:

1、default

2、kube-system

3、kube-public

4、kube-node-lease

kubectl get namespaces
kubectl get ns
kubectl get ns default -o yaml

两层级别,不允许嵌套:

有些资源直接创建在集群里,不能创建在nameaspaces里

有些资源创建在namespaces,不能直接创建在集群里

namespaces本身也是资源就是直接创建在集群里的,不能创建在namespaces下

kubectl api-resources

image-20260525104901576

👆上图中NAMESPACED,true就表示只能创建在namespace下的,不能直接创建在集群里。必须指定namespace,不指也有一个default namespace。

false就是必须直接创建在集群里,不能创建在namespace下,指了也没用,不会隶属于namespace。

delete create get 不指定 -n 就是默认的default namesapce

kube-system是至关重要的一个namespace,一般不用动它,很多集群自身组件及系统组件都在里面。

kube-public一般用不到,空置状态,一般都是default

kube-node-lease,①分布式锁控制平面HA,其中有两个组件(controller-manager和scheduler)是通过抢占分布式锁对的方式来选出谁是mater的。这两个组件就会创建到这个namespaces下。②租约这个namespace主要是放节点租约的。

image-20260525112309761

比如三个controller-manager在这个namespace下,该namespace下就会生成一个锁,三个谁抢到谁是领导,抢那个资源就是节点租约资源

控制平面管理各个节点,怎么知道节点挂了?节点会周期在节点同名的节点租约namespace下更新老化时间之类的东西。

root@k8s-master01:~# kubectl get leases -n kube-node-lease
NAME           HOLDER         AGE
k8s-master01   k8s-master01   4d19h
k8s-master02   k8s-master02   4d18h
k8s-master03   k8s-master03   4d18h
k8s-node01     k8s-node01     4d18h
k8s-node02     k8s-node02     4d18h
k8s-node03     k8s-node03     4d18h

所有系统级的namespaces均不能进行删除操作;除了default外,其他三个也不应该用作业务应用的部署。

root@k8s-master01:~# kubectl create namespace demo --dry-run=client -o yaml
apiVersion: v1
kind: Namespace
metadata:
  name: demo
spec: {}
status: {}

# 说明:因为namespace不用spec和status,这些多余的信息都可以删掉


# 创建一个准生产/预发环境
root@k8s-master01:~# kubectl create namespace demo --dry-run=client -o yaml > namespace-demo.yaml
root@k8s-master01:~# vim namespace-demo.yaml
root@k8s-master01:~# cat namespace-demo.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: stage
  labels:
    enviorment: stage
root@k8s-master01:~#
#在stage这个namespace下创建nginx-demo这个pod,注意同名的pod在default下也有3个👇
root@k8s-master01:~# kubectl create deployment nginx-demo --image=nginx:alpine -n stage
deployment.apps/nginx-demo created
root@k8s-master01:~# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
backend-79f8849978-z2q4p      1/1     Running   0          3d
nginx-demo-6dbf7cbd6f-4qztw   1/1     Running   0          3d17h
nginx-demo-6dbf7cbd6f-66d94   1/1     Running   0          3d17h
nginx-demo-6dbf7cbd6f-v8jsv   1/1     Running   0          3d17h
whoami-7fd8895794-6szhw       1/1     Running   0          2d20h
whoami-7fd8895794-dhk6k       1/1     Running   0          2d20h
root@k8s-master01:~# kubectl get pods  -n stage
NAME                          READY   STATUS    RESTARTS   AGE
nginx-demo-6dbf7cbd6f-cxq7p   1/1     Running   0          23s
root@k8s-master01:~#

删除namespace会一并删除其下所有资源,及其危险!

使用名称空间的场景

环境管理

在同一Kubernetes集群上隔离研发、预发和生产等环境。

隔离

多个团队的不同产品线需要部署在同一个kubernetes上。

资源控制

类似vsphere的资源组,作为资源配额的承载单位,从而限制其内部所有应用使用CPU/Memory/PV等资源总和。

在产品线或团队等隔离目标上分配各自总体使用的资源配额。

权限控制

基于RBAC鉴权体系,在名称空间级别仅限权限配置。

提高集群性能

进行资源搜索时,名称空间有利于Kubernetes API缩小查找范围,从而提高搜索效率。

scale只支持对工作负载型控制器做scale,涉及:deployment, replicaset, or statefulset

root@k8s-master01:~# kubectl scale -h
Set a new size for a deployment, replica set, replication controller, or stateful set.

 Scale also allows users to specify one or more preconditions for the scale action.
# 👆scale只支持对工作负载型控制器做scale,replication controller不用了


kubectl scale --replicas=5 tc/foo rc/bar rc/baz  # 针对多个进行scale

kubectl scale --current-replicas=2 --replicas=3 deployment/mysql  # 当前是2个的时候才会扩成3个,当前不是2个,不改变。
Copyright 🌹 © oneyearice@126.com 2022 all right reserved,powered by Gitbook文档更新时间: 2026-06-04 15:17:07

results matching ""

    No results matching ""