我有一个包含 3 个 Pod 的 StatefulSet。第一个分配给主角色,其余的具有只读副本角色。
redis-0 (master)
redis-1 (replica)
redis-2 (replica)
Run Code Online (Sandbox Code Playgroud)
如何创建仅匹配 podredis-1和 的Kubernetes 服务redis-2?基本上我想要的服务仅指向充当副本的 Pod?
从逻辑上讲,我想要的是选择 STS 中除第一个之外的每个 Pod。在伪代码中:
selector: app=redis-sts && statefulset.kubernetes.io/pod-name!=redis-0
Run Code Online (Sandbox Code Playgroud)
或者,选择所有相关的 Pod 也是可行的。再次用伪代码表示:
selector: statefulset.kubernetes.io/pod-name=redis-1 || statefulset.kubernetes.io/pod-name=redis-2
Run Code Online (Sandbox Code Playgroud)
以下是定义了选择器和服务的相关 YAML。完整的 YAML。
apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
ports:
- port: 6379
clusterIP: None
selector:
app: redis-sts
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
spec:
selector:
matchLabels:
app: redis-sts
serviceName: redis-service
replicas: 3
template:
metadata:
labels:
app: redis-sts
spec:
# ...
Run Code Online (Sandbox Code Playgroud)
您可以使用Redis 有状态集的Pod 名称标签来创建访问特定只读副本 Pod 的服务。
apiVersion: v1
kind: Service
metadata:
name: redis-1
spec:
type: LoadBalancer
externalTrafficPolicy: Local
selector:
statefulset.kubernetes.io/pod-name: redis-1
ports:
- protocol: TCP
port: 6379
targetPort: 6379
Run Code Online (Sandbox Code Playgroud)
然后使用 pod 的服务名称来访问特定的 pod。
externalTrafficPolicy:Local只会将流量代理到拥有您的 Pod 实例的节点。
| 归档时间: |
|
| 查看次数: |
2511 次 |
| 最近记录: |