从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
指令就可以达到相同的目的?对服务执行的“选择”是什么?
答案 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
网络使用。
这是一个简单的解释,其中有多种服务。