Kubernetes:命名空间(namespace 创建、删除,pod中设置namespace,命名空间首选项设置set-context --current --namespace)


Kubernetes:命名空间(namespace 创建、删除,pod中设置namespace,命名空间首选项设置set-context --current --namespace)

参考:https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/namespaces/

一,什么是命名空间?

Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 他们可以为您和您的团队提供组织,安全甚至性能方面的帮助!

二,何时使用多个命名空间?

1:命名空间适用于存在很多跨多个团队或项目的用户的场景。

对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。当需要名称空间提供的功能时,请开始使用它们。

2:命名空间为名称提供了一个范围。

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

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

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

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

三,使用命名空间

3.1 查看命名空间

kubectl get namespace
  1.  
    NAME STATUS AGE
  2.  
    default Active 39m
  3.  
    kube- public Active 39m
  4.  
    kube-system Active 39m

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

kubectl get ns

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

default 没有指明使用其它命名空间的对象所使用的默认命名空间

kube-system Kubernetes 系统创建对象所使用的命名空间

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

3.2 创建命名空间

  1.  
    kubectl create namespace oopxiajun- test
  2.  
    namespace/oopxiajun-ns- test created

当然也可以使用yaml来处理

  1.  
    vim kube-ns-test.yaml
  2.  
     
  3.  
    kind: Namespace #类型为Namespace
  4.  
    apiVersion: v1 #版本号为v1
  5.  
    metadata:
  6.  
    name: oopxiajun-ns-test
  7.  
    labels:
  8.  
    name: label-test-v1
  1.  
    kubectl apply -f kube-ns-test.yaml
  2.  
    namespace/ oopxiajun- ns- test created

查看命名空间

  1.  
    kubectl get namespace
  2.  
     
  3.  
    NAME STATUS AGE
  4.  
    default Active 50m
  5.  
    kube- public Active 51m
  6.  
    kube-system Active 51m
  7.  
    oopxiajun-ns-test Active 20s

 

3.3 pod使用命名空间

在metadata 下面加一个namespace

  1.  
    vim first-pod.yml
  2.  
     
  3.  
    apiVersion: v1 #版本号
  4.  
    kind: Pod
  5.  
    metadata:
  6.  
    name: my-first-pod
  7.  
    namespace: oopxiajun-ns-test
  8.  
    labels:
  9.  
    app: bash
  10.  
    tir: backend
  11.  
    spec:
  12.  
    containers:
  13.  
    - name: bash-container
  14.  
    image: docker.io/busybox
  15.  
    command: [ 'sh', '-c', 'echo Hello myFirstPod! && sleep 3600']
  1.  
    kubectl create -f first-pod.yml
  2.  
    pod/my- first-pod created
  1.  
    kubectl get pods -n=oopxiajun-ns-test
  2.  
    NAME READY STATUS RESTARTS AGE
  3.  
    my-first-pod 1/ 1 Running 0 3m10s

3.4 设置命名空间首选项

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

  1.  
    kubectl get pod
  2.  
    No resources found in default namespace.
  3.  
     
  4.  
    kubectl get pods
  5.  
    No resources found in default namespace.

当前默认的名称空间为default

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

  1.  
    kubectl config set- context --current --namespace=oopxiajun-ns-test
  2.  
    Context "kubernetes-admin@kubernetes" modified.
  1.  
    kubectl get pod
  2.  
    NAME READY STATUS RESTARTS AGE
  3.  
    my-first-pod 1/ 1 Running 0 34m

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

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

查看哪些 Kubernetes 资源在命名空间中,哪些不在命名空间中:

  1.  
    # 在命名空间中的资源
  2.  
    kubectl api-resources --namespaced= true
  3.  
     
  4.  
    # 部在命名空间中的资源
  5.  
    kubectl api-resources --namespaced= false
  1.  
    kubectl api-resources --namespaced= true
  2.  
     
  3.  
    NAME SHORTNAMES APIGROUP NAMESPACED KIND
  4.  
    bindings true Binding
  5.  
    configmaps cm true ConfigMap
  6.  
    endpoints ep true Endpoints
  7.  
    events ev true Event
  8.  
    limitranges limits true LimitRange
  9.  
    persistentvolumeclaims pvc true PersistentVolumeClaim
  10.  
    pods po true Pod
  11.  
    podtemplates true PodTemplate
  12.  
    replicationcontrollers rc true ReplicationController
  13.  
    resourcequotas quota true ResourceQuota
  14.  
    secrets true Secret
  15.  
    serviceaccounts sa true ServiceAccount
  16.  
    services svc true Service
  17.  
    controllerrevisions apps true ControllerRevision
  18.  
    daemonsets ds apps true DaemonSet
  19.  
    deployments deploy apps true Deployment
  20.  
    replicasets rs apps true ReplicaSet
  21.  
    statefulsets sts apps true StatefulSet
  22.  
    localsubjectaccessreviews authorization.k8s.io true LocalSubjectAccessReview
  23.  
    horizontalpodautoscalers hpa autoscaling true HorizontalPodAutoscaler
  24.  
    cronjobs cj batch true CronJob
  25.  
    jobs batch true Job
  26.  
    leases coordination.k8s.io true Lease
  27.  
    endpointslices discovery.k8s.io true EndpointSlice
  28.  
    events ev events.k8s.io true Event
  29.  
    ingresses ing extensions true Ingress
  30.  
    ingresses ing networking.k8s.io true Ingress
  31.  
    networkpolicies netpol networking.k8s.io true NetworkPolicy
  32.  
    poddisruptionbudgets pdb policy true PodDisruptionBudget
  33.  
    rolebindings rbac.authorization.k8s.io true RoleBinding
  34.  
    roles rbac.authorization.k8s.io true Role
  1.  
    ubectl api-resources --namespaced= false
  2.  
    NAME SHORTNAMES APIGROUP NAMESPACED KIND
  3.  
    componentstatuses cs false ComponentStatus
  4.  
    namespaces ns false Namespace
  5.  
    nodes no false Node
  6.  
    persistentvolumes pv false PersistentVolume
  7.  
    mutatingwebhookconfigurations admissionregistration.k8s.io false MutatingWebhookConfiguration
  8.  
    validatingwebhookconfigurations admissionregistration.k8s.io false ValidatingWebhookConfiguration
  9.  
    customresourcedefinitions crd,crds apiextensions.k8s.io false CustomResourceDefinition
  10.  
    apiservices apiregistration.k8s.io false APIService
  11.  
    tokenreviews authentication.k8s.io false TokenReview
  12.  
    selfsubjectaccessreviews authorization.k8s.io false SelfSubjectAccessReview
  13.  
    selfsubjectrulesreviews authorization.k8s.io false SelfSubjectRulesReview
  14.  
    subjectaccessreviews authorization.k8s.io false SubjectAccessReview
  15.  
    certificatesigningrequests csr certificates.k8s.io false CertificateSigningRequest
  16.  
    ingressclasses networking.k8s.io false IngressClass
  17.  
    runtimeclasses node.k8s.io false RuntimeClass
  18.  
    podsecuritypolicies psp policy false PodSecurityPolicy
  19.  
    clusterrolebindings rbac.authorization.k8s.io false ClusterRoleBinding
  20.  
    clusterroles rbac.authorization.k8s.io false ClusterRole
  21.  
    priorityclasses pc scheduling.k8s.io false PriorityClass
  22.  
    csidrivers storage.k8s.io false CSIDriver
  23.  
    csinodes storage.k8s.io false CSINode
  24.  
    storageclasses sc storage.k8s.io false StorageClass
  25.  
    volumeattachments storage.k8s.io false VolumeAttachment

3.6 删除名称空间

  1.  
    kubectl delete namespaces oopxiajun-ns- test
  2.  
    namespace "oopxiajun-ns-test" deleted

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

  1.  
    kubectl get pod
  2.  
    No resources found in oopxiajun-ns-test namespace.

我们需要将命名空间设置回default

  1.  
    kubectl config set-context --current -- namespace= default
  2.  
    Context "kubernetes-admin@kubernetes" modified.

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM