Kubernetes:ネーミングスペース(namespace作成、削除、podでnamespaceを設定、ネーミングスペースプリファレンスset-context--current--namespaceを設定)
10071 ワード
参照先: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ネーミングスペースの表示
nsの代わりにnsを使用することもできます.効果はnamespaceと同じです.
Kubernetesでは、3つの初期ネーミングスペースが作成されます.
*
*
*
3.2ネーミングスペースの作成
もちろんyamlで処理することもできます
ネームスペースの表示
3.3 podネーミングスペースの使用
metadataの下にnamespaceを追加
3.4ネーミングスペースプリファレンスの設定
podに関する情報を取得する必要がある場合は、ネーミングスペースを持たないと、構築したばかりのpodが調べられないことがわかります.
現在のデフォルトの名前空間はdefaultです
ネーミングスペースのプリファレンスを設定する必要があります
3.5すべてのオブジェクトがネーミングスペースにあるわけではありません
ほとんどのkubernetesリソース(Pod、Service、レプリカコントローラなど)は、いくつかのネーミングスペースに存在します.しかし、ネーミングスペースリソース自体はネーミングスペースにありません.さらに、nodesや永続化ボリュームなどの最下位リソースは、ネーミングスペースに属しません.
どのKubernetesリソースがネーミングスペースにあるか、ネーミングスペースにないかを表示します.
3.6ネームスペースの削除
再びget pod、もうpodが取れません(etcdのソースデータは削除されました.私たちのmy-first-podというpodはもう底を測って乾きました)
ネーミングスペースをdefaultに戻す必要があります
一、名前空間とは何ですか。
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.