一、Namespace
1)Namespace概述
Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等则不属于任何namespace。
Namespace常用来隔离不同的用户,比如Kubernetes自带的服务一般运行在kube-system namespace中。
Kubernetes中的名称空间与docker中的名称空间不同。K8s中的名称空间只是做了一个逻辑上的隔离。
2)Namespace常用的命令
(1)查询
[root@master ~]# kubectl get namespaces
//查看K8s中存在的名称空间
NAME STATUS AGE
default Active 6d21h
kube-node-lease Active 6d21h
kube-public Active 6d21h
kube-system Active 6d21h
//namespace包含两种状态”Active”和”Terminating”。在namespace删除过程中,namespace状态被设置成”Terminating”。
[root@master ~]# kubectl describe namespaces default
//查看default名称空间的详细信息
[root@master ~]# kubectl get pod --namespace=default
[root@master ~]# kubectl get pod -n default
//查看default名称空间中的pod资源(两者都可以)
[root@master ~]# kubectl get pod
//如果不指定,则默认也是查看default名称空间中的资源
(2)创建、删除
使用命令行创建
[root@master ~]# kubectl create namespace beijing
//创建一个名称空间,名称为beijing
//创建完成后,可以通过“kubectl get namespaces”命令查看到
[root@master ~]# kubectl delete namespace beijing
//删除新创建的名称空间
使用yaml文件创建
[root@master ~]# vim namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: test
[root@master ~]# kubectl apply -f namespace.yaml
[root@master ~]# kubectl delete -f namespace.yaml
注意:
(1)删除一个名称空间时会自动删除所有属于该namespace的资源;
(2)default和kube-system名称空间不可以被删除;
(3)namespace资源对象仅用于资源对象的隔离,并不能隔绝不同名称空间的Pod之间的通信。如果需要隔离Pod之间的通信可以使用网络策略资源这项功能;
二、Pod详解
1)什么是Pod?
在Kubernetes中,最小的管理元素不是一个个独立的容器,而是Pod,Pod是管理,创建,计划的最小单元.
一个Pod就相当于一个共享context的配置组,在同一个context下,应用可能还会有独立的cgroup隔离机制,一个Pod是一个容器环境下的“逻辑主机”,它可能包含一个或者多个紧密相连的应用,这些应用可能是在同一个物理主机或虚拟机上。
Pod 的context可以理解成多个linux命名空间的联合:
PID 命名空间(同一个Pod中应用可以看到其它进程);
网络 命名空间(同一个Pod的中的应用对相同的IP地址和端口有权限);
IPC命名空间(同一个Pod中的应用可以通过VPC或者POSIX进行通信);
UTS 命名空间(同一个Pod中的应用共享一个主机名称);
Pod和相互独立的容器一样,Pod是一种相对短暂的存在,而不是持久存在的,正如我们在Pod的生命周期中提到的,Pod被安排到节点上,并且保持在这个节点上直到被终止