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