Kubernetes 为什么在一次部署中会提到三次标签
我浏览了以下文档页面: 部署yaml的示例如下所示:Kubernetes 为什么在一次部署中会提到三次标签,kubernetes,kubernetes-deployment,Kubernetes,Kubernetes Deployment,我浏览了以下文档页面: 部署yaml的示例如下所示: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
我们可以在这里看到三次提到标签app:nginx
为什么我们需要它们中的每一个?我很难从官方文档中理解它。第一个标签:
kubectl get deployment -l app=nginx
它是用于选择部署的部署标签。您可以使用以下命令使用第一个标签:
kubectl get deployment -l app=nginx
第二个标签:
它不是一个标签。标签选择器用于选择带有标签nginx的吊舱。它由ReplicaSet使用
第三个标签:
它是用来识别豆荚的豆荚标签。ReplicaSet使用它来维护所需的副本数量,并为此使用标签选择器。
它还用于使用以下命令选择pod:
kubectl get pods -l app=nginx
第一个标签用于部署本身,它为该特定部署提供了标签。假设您要删除该部署,然后运行以下命令:
kubectl delete deployment -l app=nginx
这将删除整个部署
第二个标签是选择器:matchLabels
,它告诉资源(服务等)根据标签匹配pod。因此,假设您想要创建一个服务,其中所有的pod都有标签app=nginx
,那么您可以提供以下定义:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
上述服务将查找分配了标签app:nginx
的匹配标签和绑定吊舱
第三个标签是
podTemplate
标签,template
实际上是podTemplate
。它描述了发射的吊舱。假设您有两个副本部署,k8s将使用模板:metadata:labels
中指定的标签启动两个POD。这是微妙但重要的区别,因此您可以为部署和部署生成的pod使用不同的标签。.metadata.labels
用于标记部署
对象本身,您不一定需要它,但正如其他答案所说,它可以帮助您组织对象
.spec.selector
告诉部署
(引擎盖下是复制集
对象)如何找到要管理的吊舱。例如,它将使用标签app:nginx
管理POD
但是,如何让ReplicaSet控制器首先使用该标签创建POD呢?您在pod模板中定义了它,
.spec.template.metadata.labels
我假设第二个是必需的,另外两个是可选的?我们在哪里使用部署标签?(第一个标签)在展开对象上添加第一个标签,以使用标签选择展开。例如,您有一组要从单个命令中选择的部署。您可以使用一个标签标记所有部署,并从一个命令中选择:kubectl get deployment-l app=nginx