Namespace 在很多情况下<mark>用于实现多用户的资源隔离</mark>,通过将集群内部的资源对象分配到不同的 Namespace 中, 形成逻辑上的分组,便于不同的分组在共享使用整个集群的资源同时还能被分别管理。
<br/>
Kubernetes 集群在启动后,会创建一个名为`default`的 Namespace, 如果不特别指明 Namespace,则用户创建的 Pod,RC,Service 都将被系统创建到这个默认的`default` 的 Namespace 中。
<br/>
node、persistent volume、namespace 等资源不属于任何 namespace。
<br/>
**1. 创建 Namespace**
```shell
【1】获取 yaml 模板
# kubectl create namespace my-ns --dry-run=client -o yaml > my-ns.yaml
# cat my-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: my-ns
【2】创建名为 my-ns 的命名空间
# kubectl apply -f my-ns.yaml
【3】查看集群中目前已有的所有命名空间
# kubectl get ns
NAME STATUS AGE
default Active 3d11h
ingress-nginx Active 2d11h
kube-flannel Active 3d11h
kube-node-lease Active 3d11h
kube-public Active 3d11h
kube-system Active 3d11h
my-ns Active 7s
```
>[info]命名空间名称满足正则表达式 `[a-z0-9]([-a-z0-9]*[a-z0-9])?`, 最大长度为 63 位。
<br/>
**2. 查看集群中目前已有的所有 Namespace**
```shell
/* 也可以使用 kubectl get ns */
# kubectl get namespaces
NAME STATUS AGE
default Active 3d11h
ingress-nginx Active 2d11h
kube-flannel Active 3d11h
kube-node-lease Active 3d11h
kube-public Active 3d11h
kube-system Active 3d11h
my-ns Active 5m44s
```
>[info]namespace 包含两种状态,`Active` 和`Terminating`。在 namespace 删除过程中,namespace 状态被设置成`Terminating`。
**3. 命名空间的使用**
```shell
【1】部署一个 tomcat6,它归属于命名空间 my-ns
# kubectl create deployment tomcat6-dep03 \
--image=tomcat:6.0.53-jre8 \
--namespace=my-ns \
--dry-run=client -o yaml > tomcat6-dep03.yaml
# cat tomcat6-dep03.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: tomcat6-dep03
name: tomcat6-dep03
namespace: my-ns #指定的命名空间为my-ns
spec:
replicas: 1
selector:
matchLabels:
app: tomcat6-dep03
template:
metadata:
labels:
app: tomcat6-dep03
spec:
containers:
- image: tomcat:6.0.53-jre8
name: tomcat
【2】部署 tomcat6
# kubectl apply -f tomcat6-dep03.yaml
【3】查看命名空间 my-ns 的资源
# kubectl get all -n my-ns
NAME READY STATUS RESTARTS AGE
pod/tomcat6-dep03-597c5d764c-s49g9 1/1 Running 0 16s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/tomcat6-dep03 1/1 1 1 16s
NAME DESIRED CURRENT READY AGE
replicaset.apps/tomcat6-dep03-597c5d764c 1 1 1 16s
```
<br/>
**4. 删除 Namespace**
```shell
/* 删除命名空间 */
# kubectl delete namespace my-ns
/* 删除命名空间后,该命名空间下的所有资源都会被删除 */
# kubectl get all -n my-ns
No resources found in my-ns namespace.
```
>[info]1. 删除一个 namespace 会自动删除所有属于该 namespace 的资源。
>2. default 和 kube-system 命名空间不可删除。
>3. PersistentVolume 是不属于任何 namespace 的,但 PersistentVolumeClaim 是属于某个特定 namespace 的。
>4. Event 是否属于 namespace 取决于产生 event 的对象。
>5. v1.7 版本增加了 kube-public 命名空间,该命名空间用来存放公共的信息,一般以 ConfigMap 的形式存放。
****
参考文档:https://feisky.xyz/kubernetes-handbook/concepts/namespace.html
- K8s是什么
- K8s特点
- K8s功能
- 为什么用容器
- K8s集群搭建
- 1. 集群架构
- 2. 机器初始化
- 3. 安装Docker
- 4. 配置k8s镜像仓库
- 5. 安装k8s核心工具
- 6. 初始化主节点
- 7. node节点加入集群
- 8. 安装Pod网络插件
- 9. 测试k8s集群
- yaml资源文件
- yaml文件作用
- yaml文件编辑语法
- 资源清单描述方法
- 命令行工具kubectl
- kubectl是什么
- kubectl命令语法
- Pod
- Pod是什么
- Pod特征
- Pod定义
- Pod基本操作
- Pod分类
- Pod生命周期
- Pod重启策略
- 镜像拉取策略
- 资源限制
- 健康检查
- Label
- Namespace
- ReplicationController
- ReplicaSet
- Deployment
- HorizontalPodAutoscaler
- Service
- Service是什么
- 应用Service
- Ingress
- Ingress是什么
- 部署ingress-nginx
- Helm
- Helm是什么
- Volume
- Volume是什么
- NFS的使用
- PV与PVC
- PV与PVC是什么
- PV与PVC的使用
- ConfigMap
- ConfigMap是什么
- ConfigMap创建
- ConfigMap使用
- ConfigMap热更新
- 滚动更新Pod
- Secret
- Secret作用
- Secret类型