此k8s yaml中哪些名称应相同

时间:2018-08-15 11:10:25

标签: kubernetes

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-app
  labels:
    run: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      run: my-app
  template:
    metadata:
      labels:
        run: my-app
    spec:
      containers:
      - image: gcr.io/google-samples/hello-app:1.0
        name: my-app
        ports:
        - containerPort: 8080

这是来自kubenetes网站的示例yaml,my-app太多了,它们都必须相同吗?他们的目的是什么?

2 个答案:

答案 0 :(得分:1)

  

这是来自kubenetes网站的示例yaml,有太多my-app,它们都必须相同吗?他们的目的是什么?

否,name字段不必相同,可以不同。在my-appmetadata部分中看到的selector参考 是labels,可用于将不同的Kubernetes对象粘合在一起,或者在查询Kubernetes时仅选择对象的子集。有时它们是相同的。

取决于您如何创建展开,您可能在整个展开中以及从其派生的对象中拥有run: myapp。使用kubectl run my-app --image=gcr.io/google-samples/hello-app:1.0 --replicas=3将创建您要引用的相同部署。

下面的图片展示了如何使用不同的run: my-app标签,并以上面的Deployment为灵感:

enter image description here

上图显示了部署以及如何使用template框(蓝色)来创建指定副本(Pods)的数量。从部署的角度来看,每个Pod的run: my-app部分都会有一个metadata标签,这将用作选择其负责的Pod的方式。

使用kubectl对Pods子集的类似选择将是:

kubectl get pods -l run=my-app

这将为您提供所有标记为run: my-app的Pod。

总而言之,当使用以下命令进行查询时,标签可用于选择资源的子集。 kubectl或由其他Kubernetes资源进行选择。您可以创建自己的标签,在整个特定部署中它们不必一定相同,但是如果是这样,则可以很容易地查询带有特定标签的任何资源。

答案 1 :(得分:0)

我个人认为,这对于检查广告连播分组信息很有帮助。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-app   <--- Deployment object name, you can change it.
  labels:
    run: my-app  <--- It is helpful for the management, e.g.> Deleting same label one 
spec:
  replicas: 3
  selector:
    matchLabels:
      run: my-app <--- What labels are controlled over by this deployment object.
  template:
    metadata:
      labels:
        run: my-app <--- Yeah, it's pod's label. It can be used of grouping with other objects
    spec:
      containers:
      - image: gcr.io/google-samples/hello-app:1.0
        name: my-app
        ports: