在 Kubernetes 配置文件中命名标签时,我尝试更加明确,认为部署使用 pod 标签,服务使用部署标签。
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth-depl
labels:
app: auth-depl-label
spec:
replicas: 1
selector:
matchLabels:
app: auth-pod-label
template:
metadata:
labels:
app: auth-pod-label
spec:
containers:
- name: auth-pod
image: bogdan-pechounov/auth
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: auth-srv
spec:
selector:
app: auth-depl-label
type: LoadBalancer
ports:
- protocol: TCP
port: 3000
targetPort: 3000
但是,在 Chrome 中minikube service auth-srv
会产生This site can’t be reached
错误。在 中minikube dashboard
,服务处于挂起状态,并且没有与该服务关联的 pod。
使用 pod 标签确实有效,这让我想知道部署标签的用途。
apiVersion: v1
kind: Service
metadata:
name: auth-srv
spec:
selector:
app: auth-pod-label
type: LoadBalancer
ports:
- protocol: TCP
port: 3000
targetPort: 3000
完整代码(skaffold dev
开始)
每个标签只是一种在不知道资源名称的情况下引用资源集合的方式。但是,正如您所指出的,kubernetes 本身以与您的问题相关的几种方式使用标签:
Deployments
使用标签来跟踪其托管 Pod 的健康状况和基数(因为 Pod 的名称大多是随机的)Services
使用标签跟踪处于Ready
应向其发送流量的状态的Pod使用
Deployments
,还需要注意Deployment
对象本身template: { metadata: { labels: {} } }
有标签,但这些标签与标记在新创建的 Pod 上的标签无关,并且这些标签必须是 a 的子集matchLabels:
才能Deployment
管理它们同样的故事
Service
,它也可以有自己的标签,但与它用于成员资格的标签无关Service
。请注意,虽然标签与matchLabels:
中的标签相同是非常常见的,但它们彼此之间没有任何关系。Service
selector:
这是一个非常好的设置,因为
Deployment
只关心 Pod beingawesome
和Service
只关心那些 Pod beingv1
,并且由于应用了模板的标签,所以两者都由 Deployment 中新生成的 Pod 实现