1. 程式人生 > 其它 >5.K8s名稱空間

5.K8s名稱空間

名稱空間的出現,原理上是為了劃分組的方式來管理pod在哪個namespace上執行,而不需要去關心這些pod具體在哪個節點上工作,就好像QQ群一樣。

檢視ns

[root@master ~]# kubectl get ns       
NAME              STATUS   AGE
default           Active   166m
kube-node-lease   Active   166m
kube-public       Active   166m
kube-system       Active   166m

新建一個ns

[root@master ~]# kubectl create ns ns1
namespace/ns1 created
[root@master ~]# kubectl get ns       
NAME              STATUS   AGE
default           Active   166m
kube-node-lease   Active   166m
kube-public       Active   166m
kube-system       Active   166m
ns1               Active   1s

刪除一個名稱空間

[root@master ~]# kubectl delete ns ns1
namespace "ns1" deleted

如果刪不掉ns1就需要特別處理

kubectl delete ns ns1 #先用delete刪除
kubectl proxy --port=8081 #單獨開一個終端,做api代理
#下面通過強制刪除ns1
kubectl get ns ns1 -o json | jq 'del(.spec.finalizers)' |curl -v -H "Content-Type: application/json"  -X PUT --data-binary @- http://127.0.0.1:8081/api/v1/namespaces/ns1/finalize
[root@master ~]#kubectl get ns
NAME              STATUS   AGE
default           Active   3h24m
kube-node-lease   Active   3h24m
kube-public       Active   3h24m
kube-system       Active   3h24m
#這樣就刪除乾淨了

沒有jq的話,可以按照如下方式安裝jq

wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
yum repolist
yum install -y jq

namespace快速切換器kubectx的安裝

git clone https://github.com/ahmetb/kubectx.git
cp kubectx/kube* /usr/local/bin/ ##把相關檔案放到可執行目錄裡
[root@master kubectx-master]# kubens 
default
kube-node-lease
kube-public
kube-system
ns1
[root@master kubectx-master]# kubens --help
USAGE:
  kubens                    : list the namespaces in the current context  #list namespace
  kubens <NAME>             : change the active namespace of current context   #切換namespace
  kubens -                  : switch to the previous namespace in this context  #切到原來的
  kubens -c, --current      : show the current namespace #顯示當前namespace
  kubens -h,--help          : show this message
[root@master kubectx-master]# kubens ns1
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "ns1".
[root@master kubectx-master]# kubens 
default
kube-node-lease
kube-public
kube-system
ns1
[root@master kubectx-master]# kubens -c
ns1

[root@master kubectx-master]# kubectl config set-context --current --namespace=ns1  #還可以原生的切換
Context "kubernetes-admin@kubernetes" modified.
[root@master kubectx-master]# kubens -   #檢視之前的namespace
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "ns1".
[root@master kubectx-master]# kubens -
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "ns1".
[root@master kubectx-master]# kubens -c #檢視當前的namespace
ns1
[root@master kubectx-master]# kubectl get pods #查當前的namespace下有什麼資源
No resources found in ns1 namespace.
[root@master kubectx-master]# kubens  #檢視所有的namespace
default
kube-node-lease
kube-public
kube-system
ns1
[root@master kubectx-master]# kubens default   #切換回default
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "default".
[root@master kubectx-master]# kubectl get pods #查當前的namespace下有什麼資源,發現有了原來的資源了
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-c7c9d97b4-7vdrh   1/1     Running   0          103m
nginx-deployment-c7c9d97b4-gcn4f   1/1     Running   0          78m