Namespace(命名空间)的使用


     Namespace(命名空间)是kubernetes系统中的一个非常重要的概念,Namespace在很多情况下用于实现多租户的资源隔离。Namespace通过将集群内部的资源对象“分配”到不同的Namespace中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。

     kubernetes集群在启动后,会默认创建一个名为“default”的Namespace。同一个namespace下面不允许出现两个service叫相同的名字。

1.查看命名空间

[root@kub_master ~]# kubectl get namespaces -o wide
NAME          STATUS    AGE
default       Active    7d
kube-system   Active    7d

 可以看到有两个个namespace

 如果在创建过程中不指名Namespace,则用户创建的pod,RC,Service都将被系统创建到这个默认名为default的Namespace中。

2. 创建命名空间

[root@kub_master ~]# kubectl create namespace test
namespace "test" created
[root@kub_master ~]# kubectl get namespaces -o wide
NAME          STATUS    AGE
default       Active    7d
kube-system   Active    7d
test          Active    3s

3. 删除命名空间

注:特别危险!会删除namespace下所有的k8s资源

[root@kub_master ~]# kubectl delete namespace test
namespace "test" deleted
[root@kub_master ~]# kubectl get namespaces -o wide
NAME          STATUS        AGE
default       Active        7d
kube-system   Active        7d
test          Terminating   1m
[root@kub_master ~]# kubectl get namespaces -o wide
NAME          STATUS    AGE
default       Active    7d
kube-system   Active    7d

4. Namespace的定义很简单,如下所示的yaml定义了名为develop的Namespace

[root@kub_master ~]# mkdir k8s/namespace
[root@kub_master ~]# cd k8s/namespace/
[root@kub_master namespace]# vim develop-namespace.yaml
[root@kub_master namespace]# cat develop-namespace.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: develop
[root@kub_master namespace]# kubectl create -f develop-namespace.yaml 
namespace "develop" created
[root@kub_master namespace]# kubectl get namespaces -o wide
NAME          STATUS    AGE
default       Active    7d
develop       Active    15s
kube-system   Active    7d

5.创建属于develop命名空间的pod资源

一旦创建了Namespace,在创建资源对象时,就可以指定这个资源对象属于哪个Namespace。

[root@kub_master namespace]# vim pod-busybox.yaml 
[root@kub_master namespace]# cat pod-busybox.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: develop
spec:
  containers: 
  - name: busybox
    image: docker.io/busybox:latest
    imagePullPolicy: IfNotPresent
    command:
      - sleep
      - "3600"
[root@kub_master namespace]# kubectl create -f pod-busybox.yaml 
pod "busybox" created
[root@kub_master namespace]# kubectl get pods --namespace=develop
NAME      READY     STATUS    RESTARTS   AGE
busybox   1/1       Running   0          21s

在kubectl命令中加入--namespace参数来查看某个命名空间中的对象。

6. 创建namespace=develop的RC资源

[root@kub_master namespace]# vim nginx-rc.yaml 
[root@kub_master namespace]# cat nginx-rc.yaml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb
  namespace: develop
spec:
  replicas: 2
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb
        image: 192.168.0.212:5000/nginx:1.13
        ports:
        - containerPort: 80
[root@kub_master namespace]# kubectl create -f nginx-rc.yaml 
replicationcontroller "myweb" created
[root@kub_master namespace]# kubectl get rc --namespace=develop
NAME      DESIRED   CURRENT   READY     AGE
myweb     2         2         2         20s
[root@kub_master namespace]# kubectl get pods --namespace=develop
NAME          READY     STATUS    RESTARTS   AGE
busybox       1/1       Running   9          9h
myweb-1fd25   1/1       Running   0          34s
myweb-z1524   1/1       Running   0          34s

7. 创建namespace=develop的Service资源

[root@kub_master namespace]# vim nginx-svc.yaml 
[root@kub_master namespace]# cat nginx-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: myweb
  namespace: develop
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 30008
      targetPort: 80
  selector:
    app: myweb
[root@kub_master namespace]# kubectl create -f nginx-svc.yaml 
service "myweb" created
[root@kub_master namespace]# kubectl get svc --namespace=develop
NAME      CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
myweb     192.168.72.198   <nodes>       80:30008/TCP   14s

   当给每个租户创建一个Namespace来实现多租户资源隔离时,还能结合Kubernetes的资源配额管理,限定不同租户能占用的资源。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM