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
-
NAME STATUS AGE
-
default Active 39m
-
kube- public Active 39m
-
kube-system Active 39m
也可以使用 ns 代替,效果與namespace 一樣
kubectl get ns
Kubernetes 會創建三個初始命名空間:
* 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.