一、Namespace 命名空间
1.1 概念
在一个Kubernetes集群中可以使用namespace创建多个“虚拟集群”,这些namespace之间可以完全隔离,也可以通过某种方式,让一个namespace中的service可以访问到其他的namespace中的服务,我们在CentOS中部署kubernetes1.6集群的时候就用到了好几个跨越namespace的服务,比如Traefik ingress和kube-systemnamespace下的service就可以为整个集群提供服务,这些都需要通过RBAC定义集群级别的角色来实现。
2.1 Namespaece实际应用场景
因为namespace可以提供独立的命名空间,因此可以实现部分的环境隔离。当你的项目和人员众多的时候可以考虑根据项目属性,例如生产、测试、开发划分不同的namespace。
3.1 namespace命令说明
3.1.1 查看Namespace
kubectl get namespace
NAME STATUS AGE
default Active 1d
kube-system Active 1d
kube-public Active 1d
Kubernetes以三个初始名称空间开头:
default
没有其他命名空间的对象的默认命名空间.kube-system
Kubernetes系统创建的对象的命名空间.kube-public
此命名空间是自动创建的,并且可供所有用户(包括未经过身份验证的用户)读取.此命名空间主要用于集群使用,关联的一些资源在集群中是可见的并且可以公开读取。此命名空间的公共方面知识一个约定,但不是非要这么要求。
获取特定的Namespace信息:
kubectl get namespaces <name>
获取特定的Namespace的详细信息:
kubectl describe namespaces <name>
Name: default
Labels: <none>
Annotations: <none>
Status: Active
No resource quota.
Resource Limits
Type Resource Min Max Default
---- -------- --- --- ---
Container cpu - - 100m
命名空间可以分为两个阶段:
Active
当前命名空间正在被使用。Terminating
这个Namespace正在被删除,并且不能用于新对象。
3.2.1 创建Namespace
-
创建一个名为my-namespace.yaml的新YAML文件,其中包含以下内容:
vim my-namespace.yaml apiVersion: v1 kind: Namespace metadata: # <insert-namespace-name-here> name: test # 通过kubectl命令根据yaml创建namespace kubectl create -f ./my-namespace.yaml
-
直接通过命令创建
kubectl create namespace <create-name>
3.3.1 删除Namespace
- 删除Namespace命令
kubectl delete namespaces <insert-some-namespace-name>
4.1 细分Namespace的作用
4.1.1 理解default
命名空间。
默认情况下,k8s集群在配置集群以保存默认的Pod集时,将实例化默认命名空间和集群使用的部署。
4.1.2 创建Namespace并设置对应的lable.
vim namespace-dev.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "development",
"labels": {
"name": "development"
}
}
}
vim namespace-pro.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "production",
"labels": {
"name": "production"
}
}
}
# 创建两个namespacenamespace-dev.json
kubectl create -f namespace-dev.json && kubectl create -f namespace-dev.json
查看namespace对应的lables
kubectl get namespace --show-lables
NAME STATUS AGE LABELS
default Active 32m <none>
development Active 29s name=development
production Active 23s name=production
4.1.3 为每个Namespace创建一个pod
一个Namespace为集群中的Pods,Services,and Deployments提供了范围。
每一个Namespace创建的资源(pod,services,deployment)对于另一个Namespace都是隐藏的。
参考文档:
4.1.4 了解每一个Namespace的动机
- 重点: 大多数Kubernetes资源(例如,pod,服务,复制控制器等)都在某些名称空间中。但是,命名空间资源本身并不在命名空间中。一些低级资源,例如(nodes and persistentVolumes)则不存在任何的命名空间中.