我有一个简单的Statefulset
,其中有3个副本/吊舱。
pg-master-0 是实际的master,其余的( pg-master-1 和 pg-master2 )是备用的服务器或从属服务器。
请忽略命名,我将尽快进行处理
所以我有2个服务
问题:在当前的NodePort
服务中,如果我转到或连接到 IP:30006 ,我正在连接到 pg-master-0 。我有办法创建像 LoadBalancer 这样的单独服务来处理我对 ONLY pg-master-1 和 pg-mastr-2 实际上是所有副本,但 pg-master-0 上除外?
我打算为他们创建单独的服务,但问题是它们都具有相同的标签
apiVersion: v1
kind: Service
metadata:
name: pg-master
labels:
app: pg-master
spec:
type: NodePort
ports:
- port: 5432
name: pg-port
selector:
app: pg-master
---
apiVersion: v1
kind: Service
metadata:
name: pg-master-headless
labels:
app: pg-master-headless
spec:
clusterIP: None
ports:
- port: 5431
name: pg-port-headless
targetPort: 5432
selector:
app: pg-master
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: pg-master
spec:
replicas: 1
serviceName: pg-master-headless
selector:
matchLabels:
app: pg-master
template:
metadata:
labels:
app: pg-master
spec:
containers:
- name: pg-master
image: mjayson/ms-rpi-pg
env:
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_PASSWORD
value: postgres
ports:
- containerPort: 5432
name: http-port
volumeMounts:
- name: pv-data
mountPath: /var/lib/postgresql/data
volumes:
- name: pv-data
persistentVolumeClaim:
claimName: master-pv-claim
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: pg-slave
spec:
replicas: 1
selector:
matchLabels:
app: pg-slave
template:
metadata:
labels:
app: pg-slave
spec:
containers:
- name: pg-slave
image: mjayson/ms-rpi-pg
env:
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_PASSWORD
value: postgres
ports:
- containerPort: 5432
name: http-port
volumeMounts:
- name: pv-data
mountPath: /var/lib/postgresql/data
volumes:
- name: pv-data
persistentVolumeClaim:
claimName: slave-pv-claim