我在裸机服务器上设置了1个主节点和2个工作节点。我用3个副本集部署postgresql。这是我的部署文件。
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
selector:
matchLabels:
app: postgres
replicas: 3
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:latest
imagePullPolicy: "IfNotPresent"
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgredb
volumes:
- name: postgredb
persistentVolumeClaim:
claimName: postgres-pv-claim
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-pv-volume
labels:
type: local
app: postgres
spec:
storageClassName: standard
capacity:
storage: 15Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: postgres-pv-claim
labels:
app: postgres
spec:
storageClassName: standard
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15Gi
---
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_DB: postgresdb
POSTGRES_USER: postgres
POSTGRES_PASSWORD: root
---
我还遵循MetalLBhttps://metallb.universe.tf/installation/
并设置第2层负载平衡器。它运行良好,我甚至可以使用这个服务暴露nginx pod。
如你所见
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h28m
nginx LoadBalancer 10.107.29.158 153.10.19.35 80:30703/TCP 162m
这些是我的跑步舱
NAME READY STATUS RESTARTS AGE
nginx-76d6c9b8c-lrljz 1/1 Running 0 3h29m
postgres-7dff8d6d74-8mlnt 1/1 Running 0 136m
postgres-7dff8d6d74-9zxsk 1/1 Running 0 136m
postgres-7dff8d6d74-xzkkx 1/1 Running 0 136m
我面临什么问题?
当我试图暴露postgresSQL pod与负载均衡器我无法连接。服务器不可达。我试着像下面这样暴露
kubectl expose deploy postgres --port 30432 --type LoadBalancer
我也尝试为这个服务创建一个yaml文件,但仍然不成功。
kind: Service
apiVersion: v1
metadata:
name: postgres-svc
labels:
app: postgres
spec:
type: LoadBalancer
ports:
- port: 5432
targetPort: 30432
type: LoadBalancer
selector:
metallb-service: postgres
我期望什么?我想用这个负载平衡器服务将我的pod公开到外部网络,这样所有的新数据都应该在所有3个副本集中更新。你能帮我修理一下我的服务吗?yaml文件?我将非常感谢你的全部
您没有在postres容器中指定端口。
对于kubectl expose
,您应该指定targetPort:
kubectl expose deploy postgres --port 30432 --target-port 5432 --type LoadBalancer
在您的YAML中,您必须切换端口:
kind: Service
apiVersion: v1
metadata:
name: postgres-svc
labels:
app: postgres
spec:
type: LoadBalancer
ports:
- port: 30432
targetPort: 5432
type: LoadBalancer
selector:
app: postgres
这里selector
也是错误的。它必须与pod上的标签相匹配。