Namespace类似于Linux系统中用户的概念,通过将系统内部的对象分配到不同的Namespace中,形成逻辑上的分,便于不同的分组在共享集群资源的同时还能被分别管理。
Kubernetes三个初始名称空间
default:未指定Namespace的对象都会被分配在default命名空间。
kube-system:由Kubernetes系统创建的资源都处于这个命名空间。
kube-public:该名称空间是自动创建的,并且对所有用户(包括未经身份验证的用户)可读。此名称空间主要保留给集群使用,以防某些资源在整个集群中公开可见。此名称空间的公共方面仅是约定,不是要求。
NameSpace操作
1、列出当前的命名空间
[root@k8s-1 ~]# kubectl get namespace
NAME STATUS AGE
default Active 36d
ingress-nginx Active 28d
kube-node-lease Active 36d
kube-public Active 36d
kube-system Active 36d
kubernetes-dashboard Active 33d
test-nginx Active 33d
2、获取默认名称空间的信息
[root@k8s-1 ~]# kubectl get ns default
NAME STATUS AGE
default Active 36d
[root@k8s-1 ~]# kubectl describe ns default
Name: default
Labels: kubernetes.io/metadata.name=default
Annotations: <none>
Status: Active
No resource quota.
No LimitRange resource.
tips:ns是namespace的简写
3、创建Namespace
[root@k8s-1 k8s-yaml]# cat test-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: test-ns
labels:
name: test-ns
releaes: stable
[root@k8s-1 k8s-yaml]# kubectl apply -f test-ns.yaml
namespace/test-ns created
[root@k8s-1 ~]# kubectl get ns |grep test-ns
test-ns Active 2m37s
4、在指定名称空间上部署应用
[root@k8s-1 ~]# kubectl get ns |grep test-ns
test-ns Active 2m37s
[root@k8s-1 ~]# kubectl create deployment --image nginx demo-nginx --namespace=test-ns
deployment.apps/demo-nginx created
[root@k8s-1 ~]# kubectl describe deployment demo-nginx -ntest-ns
Name: demo-nginx
Namespace: test-ns
CreationTimestamp: Wed, 12 Jan 2022 11:27:30 +0800
Labels: app=demo-nginx
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=demo-nginx
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=demo-nginx
Containers:
nginx:
Image: nginx
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: demo-nginx-645c888794 (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 23s deployment-controller Scaled up replica set demo-nginx-645c888794 to 1
5、设置Context选择命名空间
默认命名空间:default
# 查看相关配置信息
[root@k8s-1 ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
# 在默认命名空间中创建pod
[root@k8s-1 ~]# kubectl create deployment --image nginx demo2-nginx
deployment.apps/demo2-nginx created
# 查看命名空间中的pods
[root@k8s-1 ~]# kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
demo2-nginx-86565c487d-lv9jd 1/1 Running 0 23s
修改默认命名空间
[root@k8s-1 ~]# kubectl config set-context $(kubectl config current-context) --namespace=test-ns
Context "kubernetes-admin@kubernetes" modified.
[root@k8s-1 ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kubernetes kubernetes kubernetes-admin test-ns
# 在默认命名空间中创建pod
[root@k8s-1 ~]# kubectl create deployment --image nginx demo3-nginx
deployment.apps/demo3-nginx created
# 查看命名空间中的pods
[root@k8s-1 ~]# kubectl get pods -n test-ns
NAME READY STATUS RESTARTS AGE
demo-nginx-645c888794-qnf9s 1/1 Running 0 8m55s
demo3-nginx-564dd667f5-2xhv8 1/1 Running 0 12s
6、删除命名空间并清理
删除命名空间这一功能非常强大也非常危险,因为它不仅删除命名空间,还会清理其中部署了的所有资源(所以在操作时一定要注意)。
# 查看命名空间中的所有资源
[root@k8s-1 ~]# kubectl get all -n test-ns
NAME READY STATUS RESTARTS AGE
pod/demo-nginx-645c888794-qnf9s 1/1 Running 0 13m
pod/demo3-nginx-564dd667f5-2xhv8 1/1 Running 0 4m58s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/demo-nginx 1/1 1 1 13m
deployment.apps/demo3-nginx 1/1 1 1 4m58s
NAME DESIRED CURRENT READY AGE
replicaset.apps/demo-nginx-645c888794 1 1 1 13m
replicaset.apps/demo3-nginx-564dd667f5 1 1 1 4m58s
# 删除命名空间
[root@k8s-1 ~]# kubectl delete namespace test-ns
namespace "test-ns" deleted
# 删除demo资源
[root@k8s-1 ~]# kubectl delete deployment demo2-nginx
deployment.apps "demo2-nginx" deleted