You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Kubernetes部署Postgres与Keycloak容器时YAML文件报错

Kubernetes部署Postgres与Keycloak的YAML语法错误修复

错误原因分析

你遇到的YAML解析错误完全是缩进不规范导致的:

  • Postgres容器的配置项(image、ports等)缩进层级错误,比同级的Keycloak容器条目多了一个缩进级别
  • volumes部分的条目缩进也不符合Kubernetes YAML的格式要求

修复后的完整YAML配置

apiVersion: v1
kind: Service
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  ports:
  - name: http
    port: 8080
    targetPort: 8080
  selector:
    app: keycloak
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  replicas: 3
  selector:
    matchLabels:
      app: keycloak
  template:
    metadata:
      labels:
        app: keycloak
    spec:
      containers:
      - name: keycloak
        image: quay.io/keycloak/keycloak:20.0.3
        args: ["start-dev"]
        env:
        - name: KEYCLOAK_ADMIN
          value: "admin"
        - name: KEYCLOAK_ADMIN_PASSWORD
          value: "admin"
        - name: KC_PROXY
          value: "edge"
        ports:
        - name: http
          containerPort: 8080
        readinessProbe:
          httpGet:
            path: /realms/master
            port: 8080
      - name: postgres
        image: postgres:latest
        imagePullPolicy: "IfNotPresent"
        ports:
        - containerPort: 5432
        envFrom:
        - configMapRef:
            name: postgres-config
        volumeMounts:
        - mountPath: /var/lib/postgresql/data
          name: postgredb
      volumes:
      - name: postgredb
        persistentVolumeClaim:
          claimName: postgres-pv-claim

额外架构建议

虽然上面的YAML已经修复语法错误可以执行,但不建议把Postgres和Keycloak放在同一个Pod中:

  • Postgres是有状态服务,需要稳定的存储、固定的网络标识,适合用StatefulSet部署
  • Keycloak是无状态服务,多副本部署时,共享同一个外部Postgres实例才是合理架构
  • 分开部署后,你需要给Keycloak添加连接Postgres的环境变量(比如KC_DB=postgres、KC_DB_URL、KC_DB_USERNAME、KC_DB_PASSWORD等),让它连接外部的Postgres服务

部署前的准备

执行部署前,你需要先创建对应的postgres-config ConfigMap和postgres-pv-claim PersistentVolumeClaim,否则Postgres容器会启动失败:

  • 示例ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
data:
  POSTGRES_DB: keycloak
  POSTGRES_USER: keycloak
  POSTGRES_PASSWORD: keycloak
  • 示例PersistentVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pv-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

内容的提问来源于stack exchange,提问作者gabriele serafini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:39:24