一、什么是命名空间

Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。

二、何时使用多个命名空间

使用命名空间 命名空间和 DNS 并非所有对象都在命名空间中 接下来 何时使用多个命名空间
命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。当需要名称空间提供的功能时,请开始使用它们。

命名空间为名称提供了一个范围。资源的名称需要在命名空间内是唯一的,但不能跨命名空间。命名空间不能相互嵌套,每个 Kubernetes
资源只能在一个命名空间中。

命名空间是在多个用户之间划分集群资源的一种方法(通过资源配额)。

在 Kubernetes 未来版本中,相同命名空间中的对象默认将具有相同的访问控制策略。

不需要使用多个命名空间来分隔轻微不同的资源,例如同一软件的不同版本:使用 labels 来区分同一命名空间中的不同资源。

使用命名空间 命名空间的创建和删除已在命名空间的管理指南文档中进行了描述。

三、查看命名空间

您可以使用以下命令列出集群中现存的命名空间:

[root@k8s1 ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   2d1h
kube-node-lease   Active   2d1h
kube-public       Active   2d1h
kube-system       Active   2d1h

也可以使用 ns 代替,效果与namespace 一样

kubectl get ns

Kubernetes 会创建三个初始命名空间:

  • default 没有指明使用其它命名空间的对象所使用的默认命名空间 * kube-system Kubernetes 系统创建对象所使用的命名空间
  • kube-public 这个命名空间是自动创建的,所有用户(包括未经过身份验证的用户)都可以读取它。这个命名空间主要用于集群使用,以防某些资源在整个集群中应该是可见和可读的。这个命名空间的公共方面只是一种约定,而不是要求。

3.1 创建命名空间

[root@k8s1 ~]# kubectl create namespace orange
namespace/orange created

查看命名空间
[root@k8s1 ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   2d1h
kube-node-lease   Active   2d1h
kube-public       Active   2d1h
kube-system       Active   2d1h
orange            Active   5s

3.2当然也可以使用yaml来创建命名空间

[root@k8s1 namespace]# cat my-namespace.yaml 
kind: Namespace  #类型为Namespace
apiVersion: v1 #类型为Namespace
metadata:
  name: orange-test  #命名空间名称
  labels:
    name: orange-test-v1  

创建命名空间
[root@k8s1 namespace]# kubectl create -f my-namespace.yaml 
namespace/orange-test created

查看命名空间
[root@k8s1 namespace]# kubectl get namespace
NAME              STATUS   AGE
default           Active   2d1h
kube-node-lease   Active   2d1h
kube-public       Active   2d1h
kube-system       Active   2d1h
orange            Active   9m44s
orange-test       Active   25s

3.3 pod使用命名空间

[root@k8s1 namespace]# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
llxxyy/centos-pure                   7.6                 c21f6df29f79        About an hour ago   1.04GB
[root@k8s1 namespace]# cat my-pod-namespace.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-namespace ##pod名称
  namespace: orange  ##命名空间名称
  labels:
    app: bash
    tir: backend
spec:
  containers:
  - name: bash-container
    image: llxxyy/centos-pure:7.6   ##镜像名称:tag
    command: ['sh','-c','echo hello myfirstpod && sleep 3600']
[root@k8s1 namespace]# kubectl create -f my-pod-namespace.yaml 
pod/my-pod-namespace created
[root@k8s1 namespace]# kubectl get pods -n=orange
NAME               READY   STATUS    RESTARTS   AGE
my-pod-namespace   1/1     Running   0          5s

3.4 设置命名空间首选项

当我们需要获得pod 相关信息时,不带命名空间 ,你会发现我们刚刚所构建的pod 查不到。

kubectl get pod
No resources found in default namespace.
#### 当前默认的名称空间为default

我们需要设置命名空间首选项

[root@k8s1 namespace]# kubectl config set-context --current --namespace=orange
Context "kubernetes-admin@kubernetes" modified.
[root@k8s1 namespace]# kubectl get pod
NAME               READY   STATUS    RESTARTS   AGE
my-pod-namespace   1/1     Running   0          3m

3.5 并非所有对象都在命名空间中

大多数 kubernetes 资源(例如 Pod、Service、副本控制器等)都位于某些命名空间中。但是命名空间资源本身并不在命名空间中。而且底层资源,例如 nodes 和持久化卷不属于任何命名空间。

查看哪些 Kubernetes 资源在命名空间中,哪些不在命名空间中:
# 在命名空间中的资源
kubectl api-resources --namespaced=true


# 部在命名空间中的资源
kubectl api-resources --namespaced=false
[root@k8s1 namespace]# kubectl api-resources --namespaced=true
NAME                        SHORTNAMES   APIGROUP                    NAMESPACED   KIND
bindings                                                             true         Binding
configmaps                  cm                                       true         ConfigMap
endpoints                   ep                                       true         Endpoints
events                      ev                                       true         Event
limitranges                 limits                                   true         LimitRange
persistentvolumeclaims      pvc                                      true         PersistentVolumeClaim
pods                        po                                       true         Pod
podtemplates                                                         true         PodTemplate
replicationcontrollers      rc                                       true         ReplicationController
resourcequotas              quota                                    true         ResourceQuota
secrets                                                              true         Secret
serviceaccounts             sa                                       true         ServiceAccount
services                    svc                                      true         Service
controllerrevisions                      apps                        true         ControllerRevision
daemonsets                  ds           apps                        true         DaemonSet
deployments                 deploy       apps                        true         Deployment
replicasets                 rs           apps                        true         ReplicaSet
statefulsets                sts          apps                        true         StatefulSet
localsubjectaccessreviews                authorization.k8s.io        true         LocalSubjectAccessReview
horizontalpodautoscalers    hpa          autoscaling                 true         HorizontalPodAutoscaler
cronjobs                    cj           batch                       true         CronJob
jobs                                     batch                       true         Job
leases                                   coordination.k8s.io         true         Lease
events                      ev           events.k8s.io               true         Event
daemonsets                  ds           extensions                  true         DaemonSet
deployments                 deploy       extensions                  true         Deployment
ingresses                   ing          extensions                  true         Ingress
networkpolicies             netpol       extensions                  true         NetworkPolicy
replicasets                 rs           extensions                  true         ReplicaSet
ingresses                   ing          networking.k8s.io           true         Ingress
networkpolicies             netpol       networking.k8s.io           true         NetworkPolicy
poddisruptionbudgets        pdb          policy                      true         PodDisruptionBudget
rolebindings                             rbac.authorization.k8s.io   true         RoleBinding
roles                                    rbac.authorization.k8s.io   true         Role
[root@k8s1 namespace]# kubectl api-resources --namespaced=false
NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KIND
componentstatuses                 cs                                          false        ComponentStatus
namespaces                        ns                                          false        Namespace
nodes                             no                                          false        Node
persistentvolumes                 pv                                          false        PersistentVolume
mutatingwebhookconfigurations                  admissionregistration.k8s.io   false        MutatingWebhookConfiguration
validatingwebhookconfigurations                admissionregistration.k8s.io   false        ValidatingWebhookConfiguration
customresourcedefinitions         crd,crds     apiextensions.k8s.io           false        CustomResourceDefinition
apiservices                                    apiregistration.k8s.io         false        APIService
tokenreviews                                   authentication.k8s.io          false        TokenReview
selfsubjectaccessreviews                       authorization.k8s.io           false        SelfSubjectAccessReview
selfsubjectrulesreviews                        authorization.k8s.io           false        SelfSubjectRulesReview
subjectaccessreviews                           authorization.k8s.io           false        SubjectAccessReview
certificatesigningrequests        csr          certificates.k8s.io            false        CertificateSigningRequest
podsecuritypolicies               psp          extensions                     false        PodSecurityPolicy
runtimeclasses                                 node.k8s.io                    false        RuntimeClass
podsecuritypolicies               psp          policy                         false        PodSecurityPolicy
clusterrolebindings                            rbac.authorization.k8s.io      false        ClusterRoleBinding
clusterroles                                   rbac.authorization.k8s.io      false        ClusterRole
priorityclasses                   pc           scheduling.k8s.io              false        PriorityClass
csidrivers                                     storage.k8s.io                 false        CSIDriver
csinodes                                       storage.k8s.io                 false        CSINode
storageclasses                    sc           storage.k8s.io                 false        StorageClass
volumeattachments                              storage.k8s.io                 false        VolumeAttachment

3.6 删除名称空间

语法
kubectl delete namespaces <insert-some-namespace-name>
[root@k8s1 namespace]# kubectl delete namespaces orange
namespace "orange" deleted

再次get pod,已经拿不到pod了(etcd中的源数据已经被删除了,我们的my-pod-namespace这个pod已经被测底干掉了)

[root@k8s1 namespace]# kubectl get pod
No resources found.

3.7将命名空间设置回default

[root@k8s1 namespace]# kubectl config set-context --current --namespace=default
Context "kubernetes-admin@kubernetes" modified.
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容