Skip to content

安装 MetalLB

shell
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.15.3/config/manifests/metallb-native.yaml

metallb-config.yaml

yaml
apiVersion: metallb.io/v1beta1  
kind: IPAddressPool  
metadata:  
  name: my-manual-pool  
  namespace: metallb-system  
spec:  
  addresses:  
  - 192.168.30.61/32  
  - 192.168.30.63/32  
  - 192.168.30.64/32  
  - 192.168.30.65/32  
  autoAssign: false  
---  
apiVersion: metallb.io/v1beta1  
kind: L2Advertisement  
metadata:  
  name: my-l2-adv  
  namespace: metallb-system  
spec:  
  ipAddressPools:  
  - my-manual-pool
shell
kubectl apply -f metallb-config.yaml

部署 CloudNativePG (CNPG) Operator

shell
kubectl apply --server-side -f \
  https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-1.29/releases/cnpg-1.29.0.yaml

创建一个独立的命名空间:

shell
kubectl create namespace postgresql

创建postgres-cluster.yaml

yaml
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: my-pg-cluster
  namespace: postgresql
spec:
  instances: 3  # 1个主实例 + 2个备实例

  storage:
    size: 100Gi  # 根据你的数据量调整
    storageClass: <your-storage-class> # 替换为你的存储类,例如 local-path, standard

  # 其他生产配置(建议添加)
  # bootstrap:
  #   initdb:
  #     database: appdb
  #     owner: appuser

---
apiVersion: v1
kind: Service
metadata:
  name: my-pg-cluster-lb
  namespace: postgresql
spec:
  type: LoadBalancer
  loadBalancerIP: 192.168.30.61  # 手动指定 IP
  selector:
    cnpg.io/cluster: my-pg-cluster  # 自动匹配上面的集群
  ports:
    - port: 5432
      targetPort: 5432