Kubernetes:ネーミングスペース(namespace作成、削除、podでnamespaceを設定、ネーミングスペースプリファレンスset-context--current--namespaceを設定)


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

一、名前空間とは何ですか。


Kubernetesは、同じ物理クラスタに依存する複数の仮想クラスタをサポートします.これらの仮想クラスタはネーミングスペースと呼ばれます.namespacesはあなたのkubernetesクラスタの仮想化クラスタだと思います.1つのKubernetesクラスタには、論理的に互いに分離された複数のネーミングスペースを持つことができます.彼らはあなたとあなたのチームのために組織、安全、さらには性能の方面の助けを提供することができます!

二、複数のネーミングスペースはいつ使用しますか?


1:ネーミングスペースは、複数のチームまたはプロジェクトにまたがるユーザーが多数存在するシーンに適用されます.
数~数十人のユーザーしかいないクラスタでは、ネーミングスペースを作成したり考慮したりする必要はありません.ネームスペースで提供される機能が必要な場合は、それらの使用を開始します.
2:ネーミングスペースは名前の範囲を提供します.
リソースの名前は、ネーミングスペース内で一意である必要がありますが、ネーミングスペースにまたがることはできません.ネーミングスペースは互いにネストできません.Kubernetesリソースごとに1つのネーミングスペースしかありません.
3:ネーミングスペースは、複数のユーザ間でクラスタリソースを分割する方法(リソース割当による)です.
4:Kubernetesの将来のバージョンでは、同じネーミングスペースのオブジェクトにはデフォルトで同じアクセス制御ポリシーがあります.
5:同じソフトウェアの異なるバージョンなど、わずかに異なるリソースを区切るために複数のネーミングスペースを使用する必要はありません.labelsを使用して、同じネーミングスペース内の異なるリソースを区別します.

三、ネーミングスペースの使用


3.1ネーミングスペースの表示
kubectl get namespace
NAME              STATUS   AGE
default           Active   39m
kube-public       Active   39m
kube-system       Active   39m

nsの代わりにnsを使用することもできます.効果はnamespaceと同じです.
kubectl get ns

Kubernetesでは、3つの初期ネーミングスペースが作成されます.
*default他のネーミングスペースを使用するオブジェクトが使用するデフォルトネーミングスペースは指定されていません
*kube-system Kubernetesシステムオブジェクト作成に使用するネーミングスペース
*kube-publicこのネーミングスペースは自動的に作成され、すべてのユーザー(認証されていないユーザーを含む)がそれを読み取ることができます.このネーミングスペースは、クラスタ全体でリソースが表示され、読み取り可能であることを防止するために、主にクラスタで使用されます.このネーミングスペースの公共面はただの約束であり、要求ではない.
3.2ネーミングスペースの作成
kubectl create namespace oopxiajun-test
namespace/oopxiajun-ns-test created

もちろんyamlで処理することもできます
vim kube-ns-test.yaml

kind: Namespace         # Namespace
apiVersion: v1          # v1
metadata:
  name: oopxiajun-ns-test
  labels:
    name: label-test-v1
kubectl apply -f kube-ns-test.yaml 
namespace/oopxiajun-ns-test created

ネームスペースの表示
kubectl get namespace

NAME                STATUS   AGE
default             Active   50m
kube-public         Active   51m
kube-system         Active   51m
oopxiajun-ns-test   Active   20s

 
3.3 podネーミングスペースの使用
metadataの下にnamespaceを追加
vim first-pod.yml 

apiVersion: v1 # 
kind: Pod
metadata:
  name: my-first-pod
  namespace: oopxiajun-ns-test
  labels:
    app: bash
    tir: backend
spec:
  containers:
  - name: bash-container
    image: docker.io/busybox
    command: ['sh','-c','echo Hello myFirstPod! && sleep 3600']
kubectl create -f first-pod.yml 
pod/my-first-pod created
kubectl get pods -n=oopxiajun-ns-test
NAME           READY   STATUS    RESTARTS   AGE
my-first-pod   1/1     Running   0          3m10s

3.4ネーミングスペースプリファレンスの設定
podに関する情報を取得する必要がある場合は、ネーミングスペースを持たないと、構築したばかりのpodが調べられないことがわかります.
kubectl get pod
No resources found in default namespace.

kubectl get pods
No resources found in default namespace.

現在のデフォルトの名前空間はdefaultです
ネーミングスペースのプリファレンスを設定する必要があります
kubectl config set-context --current --namespace=oopxiajun-ns-test
Context "kubernetes-admin@kubernetes" modified.
kubectl get pod
NAME           READY   STATUS    RESTARTS   AGE
my-first-pod   1/1     Running   0          34m

3.5すべてのオブジェクトがネーミングスペースにあるわけではありません
ほとんどのkubernetesリソース(Pod、Service、レプリカコントローラなど)は、いくつかのネーミングスペースに存在します.しかし、ネーミングスペースリソース自体はネーミングスペースにありません.さらに、nodesや永続化ボリュームなどの最下位リソースは、ネーミングスペースに属しません.
どのKubernetesリソースがネーミングスペースにあるか、ネーミングスペースにないかを表示します.
#  
kubectl api-resources --namespaced=true

#  
kubectl api-resources --namespaced=false
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
endpointslices                           discovery.k8s.io            true         EndpointSlice
events                      ev           events.k8s.io               true         Event
ingresses                   ing          extensions                  true         Ingress
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
ubectl 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
ingressclasses                                 networking.k8s.io              false        IngressClass
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 oopxiajun-ns-test
namespace "oopxiajun-ns-test" deleted

再びget pod、もうpodが取れません(etcdのソースデータは削除されました.私たちのmy-first-podというpodはもう底を測って乾きました)
kubectl get pod
No resources found in oopxiajun-ns-test namespace.

ネーミングスペースをdefaultに戻す必要があります
kubectl config set-context --current --namespace=default
Context "kubernetes-admin@kubernetes" modified.