TL;博士;
你指的是两个完全不同的Kubernetes对象,它们是
Namespace
和
Labels/Selectors
命名空间
Kubernetes支持由同一物理集群支持的多个虚拟集群。这些虚拟集群称为命名空间。
为什么使用Kubernetes命名空间?这个问题的答案在
What is a Kubernetes Namespace?
文章。
-
允许团队或项目存在于自己的虚拟集群中,而不必担心影响彼此的工作。
-
通过将用户和进程限制在某些名称空间来增强基于角色的访问控制(RBAC)。
-
通过资源配额在多个团队和用户之间划分集群资源。
-
提供了一种简单的方法来分离容器化应用程序的开发、测试和部署,使整个生命周期都能在同一集群上进行。
简而言之,名称空间允许您分隔对象。旁边
default
你有几个
namespaces
喜欢
kube-system
它是由Kubernetes系统创建的。在这方面
namespace
你有像这样的系统Pod
kube-dns
或
kube-proxy
它们负责网络配置。
另一个例子是,许多
Helm Charts
被配置为在不同的环境中部署对象
namesapce
比
违约
.
一些资源是
namespaced
:
$ kubectl api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
...
这意味着它们需要定义命名空间,否则您会发现找不到资源的错误。
$ kubectl get po
No resources found in default namespace.
$ kubectl get pod --namespace kube-system
NAME READY STATUS RESTARTS AGE
event-exporter-gke-666b7ffbf7-kjcn2 2/2 Running 0 2m42s
fluentbit-gke-njk6d 2/2 Running 0 2m30s
fluentbit-gke-wlwsp 2/2 Running 0 2m29s
...
如果您没有指定
命名空间
,Kubernetes将使用
违约
在所有情况下都使用名称空间(创建、删除、获取等)。
您可以配置
Quota
在里面
命名空间
限制数量或吊舱、服务等。
$ kubectl describe namespaces
Name: default
Labels: <none>
Annotations: <none>
Status: Active
Resource Quotas
Name: gke-resource-quotas
Resource Used Hard
-------- --- ---
count/ingresses.extensions 0 100
count/jobs.batch 0 5k
pods 0 1500
services 1 500
使用案例
-
何时删除
命名空间
,您将删除该特定对象中的所有对象
命名空间
.
-
如果你有你所有的
pods
在一个
命名空间
,命令式
$ kubectl delete pod --all
将移除所有吊舱。如果你将它们分开
命名空间
,它将删除所有
豆荚
从一个特定
命名空间
.
标签/选择器
标签是附加到对象(如Pod)的键/值对。标签旨在用于指定对用户有意义和相关的对象的标识属性,但并不直接向核心系统暗示语义。标签可用于组织和选择对象的子集。
Labels / Selectors
通常用于连接
Application with Services
部署和服务是一样的
labels/selectors
他们是这样的
connected
.
使用案例
您已经测试了一些特定的软件,并使用了2个带有标签的Pod
env: prod
,
app: nginx
2个有标签
env: dev
和
应用程序:nginx
。现在,您可以删除具有特定值的Pod
label
.
$ kubectl get po --show-labels
NAME READY STATUS RESTARTS AGE LABELS
dev-1 1/1 Running 0 8s app=nginx,env=dev
dev-2 1/1 Running 0 14s app=nginx,env=dev
pord-1 1/1 Running 0 64s app=nginx,env=prod
pord-2 1/1 Running 0 26s app=nginx,env=prod
$ kubectl delete po -l env=prod
pod "pord-1" deleted
pod "pord-2" deleted
$ kubectl get po --show-labels
NAME READY STATUS RESTARTS AGE LABELS
dev-1 1/1 Running 0 70s app=nginx,env=dev
dev-2 1/1 Running 0 76s app=nginx,env=dev
结论
这个
production
和
staging
相似:
environment: staging
和
environment: production
.
那是两个不同的物体-
Namespace
它是一种虚拟集群,帮助我们组织项目或环境。
Labels
是一个键值对,分配给Kubernetes资源,如Pod、Deployment等。
我想使用environment的一个好处是,您可以将所有内容放在默认命名空间中,同时保持Pod分离?
在某些情况下是的,但对于每个命令,您都需要指定
标签
.
如果你列出所有资源
名称空间
你可以用
--all-namespaces
如,
$ kubectl get po --all-namespaces
或旗帜
-A
喜欢
$ kubectl get po -A
其他链接
如果您还有其他问题,请告诉我。