0

来自关于使用 mysql部署应用程序的文档站点的官方示例:KubernetesWordpress

的服务定义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标签的 pod。

为什么Service selector不需要matchLabel出于相同目的的指令?服务的“选择”是什么?

4

2 回答 2

2

根据关于标签和选择器的 K8S 文档。

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

较新的资源,例如 Job、Deployment、Replica Set 和 Daemon Set,也支持基于集合的需求。

看起来像 Deployment 这样的新资源支持更多基于集合的功能(使用 matchLabels),而像 Services 这样的旧资源遵循旧的基于相等性(没有 matchLabels)。

于 2018-09-27T16:41:05.637 回答
1

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

这是一个简单的解释,有不同种类的服务。

于 2018-09-27T14:46:15.743 回答