kubernetes:选择器在服务与部署中的作用

时间:2018-09-27 14:39:59

标签: kubernetes kubernetes-service kubernetes-deployment

Kubernetes文档站点的official example开始,使用mysql部署Wordpress应用程序:

mysql的服务定义:

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None

mysql

的部署定义
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql

我的问题如下:

Deployment定义具有matchLabel selector,因此它将与以下定义的具有app: wordpress tier:mysql标签。

为什么Service selector不需要matchLabel指令就可以达到相同的目的?对服务执行的“选择”是什么?

2 个答案:

答案 0 :(得分:2)

根据Labels and Selectors上的K8S文档。

  

API当前支持两种类型的选择器:基于等式和基于集合。

     

较新的资源,例如作业,部署,副本集和后台驻留程序集,也支持基于集合的需求。

像Deployment这样的新资源支持功能更强大的基于集合的(带有matchLabels),而像Services这样的旧资源则遵循了基于旧的等式(没有matchLabels)。

答案 1 :(得分:0)

Service是一个使您的容器(在这种情况下为托管wordpress)在给定端口上可用的概念。它将外部端口(Node's端口)映射到内部端口(容器/ pod的端口)。它通过使用Pod's网络功能来做到这一点。选择器是一种在服务中指定应在哪个Pod上打开端口的方式。 Deployment实际上只是将事物组合在一起的一种方式-Pod本身拥有Wordpress容器,并且服务中定义的端口可通过Pod网络使用。

这是一个简单的解释,其中有多种服务。