在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
相关产品推荐
相关产品推荐

