Kubernetes中的名字空间
名字空间
名字空间将对象分割成独立的组,为对象名字提供了作用域,名字在不同的名字空间可以是相同的。名字空间对正在运行的对象不提供任何隔离,名字空间之间是否提供网络隔离取决于 Kubernetes 所使用的网络解决方案。
查看当前集群中的所有名字空间
$ kubectl get namespaces 
NAME                   STATUS   AGE
default                Active   379d
kube-node-lease        Active   379d
kube-public            Active   379d
kube-system            Active   379d
kubernetes-dashboard   Active   377d
创建名字空间
- 使用命令
    
$ kubectl create namespace kubia namespace/kubia created - 编写 YAML 文件(kubia-namespace.yaml)
    
apiVersion: v1 kind: Namespace metadata: name: kubia$ kubectl apply -f kubia-namespace.yaml namespace/kubia created 
查看新创建的名字空间,ns 是 namespace 的缩写。
$ kubectl get ns kubia
NAME    STATUS   AGE
kubia   Active   35s
删除名字空间
★ 名字空间内创建的所有类型的对象也会被删除。
$ kubectl delete ns kubia
namespace "kubia" deleted
管理名字空间中的对象
编写 YAML 文件(kubia.yaml)
apiVersion: v1
kind: Service
metadata:
  name: kubia 
  labels:
    app: kubia
spec:
  type: NodePort 
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 30087
  selector:
    app: kubia 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubia 
spec:
  selector:
    matchLabels:
      app: kubia 
  replicas: 2
  template:
    metadata:
      labels:
        app: kubia 
    spec:
      containers:
      - name: kubia 
        image: wangjunjian/kubia:latest 
        ports:
        - containerPort: 8080 
在指定名字空间中部署应用
$ kubectl apply -f kubia.yaml --namespace kubia
service/kubia created
deployment.apps/kubia created
查看指定名字空间的所有实例
$ kubectl get all -n kubia
NAME                        READY   STATUS    RESTARTS   AGE
pod/kubia-864465c9d-5vntt   1/1     Running   0          99s
pod/kubia-864465c9d-xnq9t   1/1     Running   0          99s
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/kubia   NodePort   10.107.215.133   <none>        8080:30087/TCP   7s
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kubia   2/2     2            2           99s
NAME                              DESIRED   CURRENT   READY   AGE
replicaset.apps/kubia-864465c9d   2         2         2       99s
删除指定名字空间的所有类型的所有实例
all所有资源类型--all所有资源实例$ kubectl delete all --all -n kubia pod "kubia-864465c9d-5vntt" deleted pod "kubia-864465c9d-xnq9t" deleted service "kubia" deleted deployment.apps "kubia" deleted replicaset.apps "kubia-864465c9d" deleted
删除指定名字空间及里面的所有类型的所有实例
$ kubectl delete namespaces kubia
namespace "kubia" deleted
查看所有名字空间中的标签 app=kubia 的 Pod 实例
$ kubectl get pods --all-namespaces -l app=kubia
NAMESPACE   NAME                    READY   STATUS    RESTARTS   AGE
default     kubia-864465c9d-744qc   1/1     Running   0          7d3h
default     kubia-864465c9d-kzql7   1/1     Running   0          7d3h
default     kubia-manual            1/1     Running   0          2d19h
default     kubia-manual-v2         1/1     Running   0          47h
kubia       kubia-864465c9d-x2xzx   1/1     Running   0          41s
kubia       kubia-864465c9d-xhsfq   1/1     Running   0          41s
也可以使用简写,A 是 all-namespaces 的缩写。
$ kubectl get pods -A -l app=kubia
切换名字空间
通过 kubectl config 可以设置当前上下文件的名字空间,可以避免在命令中频繁指定名字空间。
查看所有上下文
$ kubectl config get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   
查看当前上下文
$ kubectl config current-context
kubernetes-admin@kubernetes
设置指定上下文的名字空间
$ kubectl config set-context $(kubectl config current-context) --namespace kubia
Context "kubernetes-admin@kubernetes" modified.
查看 Pod 实例(现在默认的名字空间是 kubia)
$ kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
kubia-864465c9d-x2xzx   1/1     Running   0          17m
kubia-864465c9d-xhsfq   1/1     Running   0          17m
恢复名字空间为 default
$ kubectl config set-context $(kubectl config current-context) --namespace default
Context "kubernetes-admin@kubernetes" modified.
将切换当前上下文的名字空间命令化
编写配置文件 ~/.bashrc
alias kcd='kubectl config set-context $(kubectl config current-context) --namespace'
让配置后的命令生效
source ~/.bashrc
使用定义的 kcd 命令进行名字空间切换
$ kcd kubia
Context "kubernetes-admin@kubernetes" modified.
$ kcd default
Context "kubernetes-admin@kubernetes" modified.