Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 为什么在一次部署中会提到三次标签_Kubernetes_Kubernetes Deployment - Fatal编程技术网

Kubernetes 为什么在一次部署中会提到三次标签

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

我浏览了以下文档页面:

部署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
    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