概述
namespace实现了资源的隔离,是kubernetes 集群级别的资源,用于将集群分隔为多个隔离的逻辑分区以配置给不同的用户、租户、环境或项目使用。
kubernetes 的绝大多数资源都隶属于名称空间级别,名称空间资源为这类资源名称提供了隔离的作用域,同一名称空间内的同一类型的资源名必须是唯一的,但跨名称空间时并无此限制。
kubernetes中还有一些资源隶属于集群级别的,如Node,namespace 和persistentVolume等资源,其不属于任何名称空间,因此资源对象的名称必须是全局唯一。
kubernetes 的名称空间资源不能实现Pod之间的通信隔离,仅用于限制资源对象名称的作用域。并不限制资源的通信。
kubernetes 集群默认提供了几个名称空间用于特定的目的,kube-system主要用于运行系统级别的资源,而default则为那些为指定名称空间的资源操作提供默认值
操作空间
查看空间
kubectl get ns #简写kubectl get namespaces #全写
kubenetes安装完默认有三个名称空间:
- default: 默认的 namespace。如果不指定 -n 参数,默认操作的就是default空间,比如不指定命名空间,默认创建的所有资源对象都在这个命名空间下。
- kube-system:运行着 kubernetes 系统创建的资源对象。系统级别的Pod都运行在此名称空间中
- kube-public命名空间中的资源可以被所有人访问(包括未认证用户)
查看指定名称空间并指定格式输出
kubectl get ns/kube-system -o [yaml|json|wide|name]
查看系统的kube-system的信息,ns 即 namespace 的简写
$ kubectl get ns kube-system -o yamlapiVersion: v1kind: Namespacemetadata:creationTimestamp: "2020-07-15T17:01:53Z"managedFields:- apiVersion: v1fieldsType: FieldsV1fieldsV1:f:status:f:phase: {}manager: kube-apiserveroperation: Updatetime: "2020-07-15T17:01:53Z"name: kube-systemresourceVersion: "15"selfLink: /api/v1/namespaces/kube-systemuid: a44ffa7c-6f01-4760-aa32-7a7891d914dbspec:finalizers:- kubernetesstatus:phase: Active
查看详细信息
[root@master ~]# kubectl describe namespace defaultName: defaultLabels: <none>Annotations: <none>Status: ActiveNo resource quota.No resource limits.
查看其它资源下的pod
[root@master ~]# kubectl get pods -n promNAME READY STATUS RESTARTS AGEcustom-metrics-apiserver-746485c45d-kjl9p 1/1 Running 5 5dkube-state-metrics-68d7c699c6-lghtm 1/1 Running 5 5dmonitoring-grafana-7f99994bc4-kgqrq 1/1 Running 5 5dprometheus-node-exporter-nxdls 1/1 Running 5 5dprometheus-server-77c8c48b9-cvf6z 1/1 Running 5 5d
创建空间
kubectl create namespace web1
其仅支持字母、数字、连接线、下划线等字符组成。
文本创建:
# demonamespace.yamlapiVersion: v1kind: Namespacemetadata:name: web2
创建
kubectl apply -f demonamespace.yaml
查看
[root@master ~]# kubectl get namespaceNAME STATUS AGEdefault Active 12dingress-nginx Active 8dkube-public Active 12dkube-system Active 12dprom Active 11dweb Active 2dweb1 Active 19mweb2 Active 6s
使用命令直接创建新的命名空间
$ kubectl create namespace dev [14:52:05]namespace/dev created$ kubectl create namespace prod [14:53:42]namespace/prod created
删除空间
需要注意的是删除 namespace 时会将 namespace 下的资源一并删除
$ kubectl delete namespace dev [15:20:40]namespace "dev" deleted
或者使用简写的ns 方式删除
$ kubectl delete ns testnamespace "test" deleted
一次删除多个名称空间
##简写kubectl delete ns/test ns/productionkubectl delete ns test production##全写kubectl delete namespace test productionkubectl delete namespace/test namespace/production
运行环境Context
获取运行环境
$ kubectl config get-contexts
新配置一个集群,名为 kubernetes-cluster,并配置 server
$ kubectl config set-cluster kubernetes-cluster --server=http://localhost:32768 [15:04:29]Cluster "kubernetes-cluster" set.
$ kubectl config set-context ctx-dev --namespace=dev --cluster=kubernetes-cluster --user=dev [15:05:22]Context "ctx-dev" created.
为 kubernetes-cluster 集群定义通过 prod 用户访问 prod 命名空间的运行环境名为 ctx-prod
kubectl config set-context ctx-prod --namespace=prod --cluster=kubernetes-cluster --user=prod [15:06:54]Context "ctx-prod" created.
集群 kubernetes-cluster 绑定了不同的命名空间 dev 和 prod,运行环境(上下文)分别命名为 ctx-dev 和 ctx-prod。
$ kubectl config get-contexts [15:07:05]CURRENT NAME CLUSTER AUTHINFO NAMESPACEctx-dev kubernetes-cluster dev devctx-prod kubernetes-cluster prod prod
使用 kubectl config use-context
$ kubectl config use-context ctx-dev [15:07:49]Switched to context "ctx-dev"
创建nginx
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxspec:selector:matchLabels:app: nginx_1.18replicas: 2template:metadata:labels:app: nginx_1.18spec:containers:- name: nginximage: nginx:1.18ports:- containerPort: 80
$ kubectl get pods -o wide [15:16:36]NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-7dbdc5f8fc-2rp2w 0/1 ContainerCreating 0 23s <none> kube-node-1 <none> <none>nginx-7dbdc5f8fc-zqvfd 0/1 ContainerCreating 0 23s <none> kube-node-2 <none> <none>
$ kubectl config use-context ctx-prod [15:18:17]Switched to context "ctx-prod".$ kubectl get deploy [15:18:46]No resources found.$ kubectl get podsNo resources found.
结果为空也就证明了两个环境是被隔离的,彼此不会互相影响。
查看当前运行环境
$ kubectl config current-context [15:19:19]ctx-prod
