来自官方例子 of Kubernetes文档站点,介绍如何使用mysql部署Wordpress应用程序:
mysql的服务定义
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: Nonemysql的部署定义
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指令?服务的“选择”是什么?
发布于 2018-09-27 16:41:05
根据K8S关于标签和选择器的文档。
API目前支持两种类型的选择器:基于等式的选择器和基于集的选择器。 较新的资源,如作业、部署、复制集和守护进程集,也支持基于集合的需求。
看起来像新的资源,比如部署支持,更多的基于功能集的资源(使用matchLabels),而旧的资源,比如服务,则遵循旧的基于等式的资源(没有matchLabels)。
发布于 2018-09-27 14:46:15
Service是一个概念,它使您的容器(在本例中是承载wordpress)可以在给定的端口上使用。它将外部端口( Node's端口)映射到和内部端口(容器/荚的端口)。它通过使用Pod's网络功能来做到这一点。选择器是一种在服务中指定应该打开端口的Pod的方法。实际上,Deployment只是将事物组合在一起的一种方式-- Pod本身持有Wordpress容器,服务中定义的端口可以通过Pod网络获得。
这是一个简单的解释,有不同的服务种类。
https://stackoverflow.com/questions/52539553
复制相似问题