目录

名字空间

名字空间将对象分割成独立的组,为对象名字提供了作用域,名字在不同的名字空间可以是相同的。名字空间对正在运行的对象不提供任何隔离,名字空间之间是否提供网络隔离取决于 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.